|
|
|
Внутреннее устройство Extended
|
|||
|---|---|---|---|
|
#18+
В проекте из за ошибки было неправильно считано число Extended типа. При попытке преобразовать его в строку выдавало мусор. При попытке прибавить 0.1 превращалось в -NaN. Ошибку нашли, исправили, а мне стало интересно поразбираться. Сделал демо проект. Код: pascal 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. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. Правда в нём при любой попытке взаимодействовать с числом (хоть прибавить 0,1 хоть FloatToStr) выдаёт Код: plaintext Переменная Знак Экспонента МантиссаValidVal 0 011111111111101 1011111001111011100111010101100001010110011011001000011111001111InvalidVal 0 011111111111110 0000000000000000000000000000000000000000000000000000000000000000 Почитал статейку ОСОБЕННОСТИ ВЕЩЕСТВЕННЫХ ЧИСЕЛ В DELPHI Если все биты в экспоненте равны единице, а в матрице – нулю, то мы получаем комбинацию, известную как INF (от английского Infinity – бесконечность). Эта комбинация используется тогда, когда результат вычислений превышает максимально допустимое форматом число. В зависимости от значения бита s бесконечность может быть положительной или отрицательной. Если же при такой экспоненте в мантиссе хоть один бит не равен нулю, такая комбинация называется NAN (Not A Number – не число). Попытки использования комбинаций NAN или INF приводят к ошибке времени выполнения. Несколько иначе устроен Extended. Кроме количественных отличий добавляется ещё и одно качественное: в мантиссе явно указывается первый разряд. То есть, мантисса 1010... интерпретируется как 1.01, а не как 1.101, как это было в типах Single и Float. Суть вопроса в чём я правильно понимаю что старший бит мантиссы в Extended должен быть равен 1? По факту InvalidVal это 0 * 2 в какой то степени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2020, 16:23 |
|
||
|
Внутреннее устройство Extended
|
|||
|---|---|---|---|
|
#18+
Демо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2020, 16:24 |
|
||
|
Внутреннее устройство Extended
|
|||
|---|---|---|---|
|
#18+
istrebitel, авторBe careful using System.Extended if you are creating data files to share across platforms. Be aware that:
Если тебе по неким странным причинам не хватает double - посмотри на https://github.com/rvelthuis/DelphiBigNumbers ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2020, 16:27 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=36&tid=2037990]: |
0ms |
get settings: |
4ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 327ms |

| 0 / 0 |
