|
|
|
Формат действительных чисел с плавающей точкой
|
|||
|---|---|---|---|
|
#18+
Всем известен формат IEEE действительных чисел с плавающей точкой одинарной точности. 1 бит под знак(s),8 бит под порядок-экспоненту(e), 23 бита под мантиссу (m). Итого 32 бита, 4 байта. Порядок хранится как целое число без знака с уклоном 127, то есть из этого числа надо вычесть 127 и это число будет степень двойки. Число можно вычислить так (-1)^s*2^(e-127)*(1+m/2^23). Когда действительное число имеет двойную точность и занимает 8 байт, тоже все понятно, там под экспоненту отводится 11 бит, и 52 под мантису и число можно вычислить так (-1)^s*2^(e-1023)*(1+m/2^52). Если на Си читать файл двоичных данных, то достаточно прочитанные 4 байта, в которых записано число одинарной точности, преобразовать к float для того чтобы получить нужное действительное число одинарной точности: char v[4]; ... //считываем v float q = *(float*)v; Но вот есть у меня файлы данных в которых в 4 байтах записано действительное число, под знак отведен 1 бит, показатель 11 и под мантиссу оставшиеся 20, то есть (-1)^s*2^(e-1023)*(1+m/2^20). Что это за формат ? Как с ним работать ? Есть ли стандартные функции для работы с таким форматом ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 12:19 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=424&tid=2034059]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
35ms |
get tp. blocked users: |
2ms |
| others: | 231ms |
| total: | 372ms |

| 0 / 0 |
