|
|
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
Столкнулся с проблемой (видимо из-за незнания/непонимания). FPC 3.0.0 компилю с ключами -TWin32 -Mobjfpc Есть такая функция: Код: pascal 1. 2. 3. 4. На делфи Код: pascal 1. выдает "859895402131951" - это правильно, калькулятор подтверждает. FPC же упорно выдает какое-то странное число "-859886812597777", даже если сделать Код: pascal 1. Единственное, что помогает, это переделать функцию так: Код: pascal 1. 2. 3. 4. тогда результат совпадает, но это не вариант - функция экспортится из библиотеки, которую используют. Пока что нашел только такое г-решение проблемы: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Так тоже, естественно, правильно работает и я пока остановился на этом. Но может кто подскажет - может есть какая-то настройка/деректива, которая включает кастинг "как в Делфи"? Я не нашел пока. И если кто объяснит такое поведение - тоже спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 17:08 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
YuRockНо может кто подскажет - может есть какая-то настройка/деректива, которая включает кастинг "как в Делфи"? -Mdelphi ?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 17:33 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
YuRockИ если кто объяснит такое поведение - тоже спасибо. Похоже на баг компилятора. FPC 3.1.1, из транка, под Linux x64 выдаёт корректный результат, под Win32 вообще -200209. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 17:39 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Нет, не помогает. Ведет себя так же, как и -Mobjfpc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 17:52 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeyпод Linux x64 выдаёт корректный результат, под Win32 вообще -200209 Под win64 та же история. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 17:54 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
YuRock, Похоже на то, что при касте в старших разрядах оказывается мусор. Попробуй так Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 21:02 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
YuRock... если кто объяснит такое поведение - тоже спасибо. Код: pascal 1. 2. 3. 4. 5. Проверено FPC 3.0.2, Lazarus 1.6.4 Скорее всего "виновата" оптимизация при преобразовании типов. Достаточно посмотреть формируемый код ассембера в различных реализациях функций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 21:34 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
Описался вместо Код: pascal 1. должно быть Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 21:39 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_YuRock, Похоже на то, что при касте в старших разрядах оказывается мусор. Попробуй так Код: pascal 1. Да, так и есть. С принудительным обнулением старших разрядов выдает верный результат. Страшненькая особенность, которую придется учитывать при желании перевести какой-нибудь проект на fpc. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 13:00 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
SimplTsarСкорее всего "виновата" оптимизация при преобразовании типов. Достаточно посмотреть формируемый код ассембера в различных реализациях функций. Мне не достаточно :) - я в ассемблере ~0. А причину проблемы определил уже _Vasilisk_. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 13:01 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
YuRockСтрашненькая особенность, которую придется учитывать при желании перевести какой-нибудь проект на fpc. https://bugs.freepascal.org/view_all_bug_page.php Избавите многих от страшненького. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 14:26 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
YuRockСтрашненькая особенность, которую придется учитывать при желании перевести какой-нибудь проект на fpc.Мне вот интересно, эта бага проявляется при касте любого типа в более широкий? Или только 32 в 64? И еще а тупо вот так Код: pascal 1. 2. 3. 4. разве не работает? Это же не Си, где тип результата определяется по операндам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 14:48 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Код: pascal 1. 2. 3. 4. разве не работает? Это же не Си, где тип результата определяется по операндам Не работает, я пробовал, еще и варнинг при этом (без явного каста) выдает что-то типа "Результат операции будет размером 64 бита". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 16:13 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
YuRockНе работает, я пробовал, еще и варнинг при этом (без явного каста) выдает что-то типа "Результат операции будет размером 64 бита". А результат тот же, что и при явном касте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 16:14 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2017, 11:14 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Это же не Си, где тип результата определяется по операндам У дельфей, кстати, если ожидается результат Int64, то один из операндов также должен быть Int64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2017, 11:16 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyУ дельфей, кстати, если ожидается результат Int64, то один из операндов также должен быть Int64.Хм. Таки да Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: plaintext 1. При этом никаких хинтов и ворнингов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2017, 16:06 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_При этом никаких хинтов и ворнингов В доке об этом сказано: http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Simple_Types_(Delphi) In general, arithmetic operations on integers return a value of type Integer, which is equivalent to the 32-bit LongInt. Operations return a value of type Int64 only when performed on one or more Int64 operands. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2017, 16:31 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
YuRock, пока остановился на этом Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2017, 16:49 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
YuRock, Под win64 та же история. ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2017, 16:55 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
Bred eFeMYuRock, пока остановился на этом Нет, я уже переостановился на Код: pascal 1. Мне так больше нравится - хоть понимание, зачем это написано, есть. Bred eFeM Код: plaintext Я запускал под win64 (изначальный вариант), в результате был мусор. С вариантом [выше] стало все правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2017, 18:35 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
YuRock, так у тебя and или * ? а для x32 cpu signed($FFFFFFF) = -1 , если чё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2017, 19:20 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
Bred eFeM, ну выше ж всё описано, вточности как в 1-м посту Василиск. Вначале and, а потом результат and *. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2017, 22:23 |
|
||
|
арифметика в FPC - cast Integer to Int64
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey https://bugs.freepascal.org/view.php?id=32046 Баг пофиксили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2018, 19:40 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39474303&tid=2041370]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
180ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 192ms |
| total: | 441ms |

| 0 / 0 |
