При 3fe9000000000000
первый бит (ноль) является знаковым битом, поэтому мы можем игнорировать его (это положительно).
Следующие 11 битов 011.1111.1110
(3fe
), чторавно 1022
, но оно уменьшается на 1023
для обработки отрицательных показателей. Поэтому -1
, что дает вам множитель 2<sup>-1</sup>
или 0.5
.
Биты мантиссы равны 1001000..0
(9000..0
вашего шестнадцатеричного числа). Эти первые четыре бита соответствуют значениям 0.5
, 0.25
, 0.0125
и 0.0625
(каждый раз делятся пополам). Поскольку установлены только первый и четвертый биты, вы получаете 0.5 + 0.0625 = 0.5625
.
. При добавлении неявного 1
к этому номеру, как предписано IEEE754, вы получаете базовое значение 1.5625
. Когда это умножается на множитель, вычисленный ранее, вы получаете:
1.5625 x 0.5 = 0.78125
То есть это как вы получаете свое значение.
Более подробную информацию можно найти нана странице IEEE754-1985 в Википедии , и вы можете поэкспериментировать с превосходным онлайн-конвертером Харальда Шмидта , чертовски полезным инструментом, я также создал свою собственную копию для обработки двойной точности (нев Интернете, к сожалению, это было Java-приложение для рабочего стола). Это действительно действительно мне очень помогло в понимании.
Возможно, вы также захотите взглянуть на некоторые другие ответы , которые я дал на IEEE754, включая этот в частности.
Относительно битового шаблона, который вы привели в комментарии, 0x4172f58bc0000000
(который вы заявляете должен быть 19880124
, но вычислить что-то другое), вот как вы его конвертируете:
4---> 1--> 7--> 2--> f--> 5--> 8--> b--> c--> (<- hex digits)
s eee eeee eeee mmmm mmmm mmmm mmmm mmmm mmmm
0 100 0001 0111 0010 1111 0101 1000 1011 1100 (<- then all zeroes)
v v vvv | |||| | | | | || || 1/n
1 1 421 | |||| | | | | || |+-------- 4,194,304
0 6 | |||| | | | | || +--------- 2,097,152
2 | |||| | | | | |+----------- 1,048,576
4 | |||| | | | | +------------ 524,288
| |||| | | | +-------------- 131,072
| |||| | | +------------------- 8,192
| |||| | +--------------------- 4,096
| |||| +----------------------- 1,024
| |||+-------------------------- 256
| ||+--------------------------- 128
| |+---------------------------- 64
| +----------------------------- 32
+-------------------------------- 8
Знак положительный.
Показатель степени 1,024 + 16 + 4 + 2 + 1 = 1,047 - 1,023 bias = 24
, поэтому множитель равен 2<sup>24</sup>
или 16,777,216
.
Сумма битов мантиссы, с добавлением каждого бита <sup>1</sup>/<sub>2<sup>n</sup></sub>
, когда n
начинается с 1
и увеличивается вправо:
<sup>1</sup>/<sub>4,194,304</sub>
, <sup>1</sup>/<sub>2,078,152</sub>
, <sup>1</sup>/<sub>1,048,576</sub>
, <sup>1</sup>/<sub>524,288</sub>
, <sup>1</sup>/<sub>131,072</sub>
, <sup>1</sup>/<sub>8,192</sub>
, <sup>1</sup>/<sub>4,096</sub>
, <sup>1</sup>/<sub>256</sub>
, <sup>1</sup>/<sub>128</sub>
, <sup>1</sup>/<sub>64</sub>
, <sup>1</sup>/<sub>32</sub>
и <sup>1</sup>/<sub>8</sub>
.
Когда вы добавляете все это вместе снеявное 1
, вы получите 1.1849477291107177734375
.
Тогда, произведением этого и ранее вычисленного множителя 16,777,216
будет требуемое значение, 19,880,124
.