Самый простой способ преобразовать десятичное число с плавающей точкой в битовое представление вручную на основе IEEE 754 без использования какой-либо библиотеки
Я знаю, что есть несколько способов чтения каждого бита с плавающей запятой IEEE 754 с использованием написанных библиотек.
Я не хочу этого, и я хочу иметь возможностьвручную преобразовать десятичное число с плавающей запятой в двоичное представление на основе IEEE 754.
Я понимаю, как работает IEEE 754, и я просто пытаюсь его применить.
Я задаю этот вопрос здесь, просто хочу посмотреть, нормален ли я или глуп, и мне также интересно, как ПК делает это быстро.
Если мне дано десятичное числов строкеМне нужно выяснить, чтоE и чтоM является.
получить две части: целая частьi
и дробная частьf
.
иметь дело сf
, Я постоянноmultiple 2
и получить целую часть (либо 0 или 1) и удалить целую часть, а затем повторять, пока не станет 0
перерабатыватьi
в биты. Это легко я просто постоянноmod 2
а такжеdiv 2
чтобы получить все битыi
.
например, чтобы конвертироватьf
часть
0,390625 * 2 = 0,781250
0,78125 * 2 = 1,56251
0,5625 * 2 = 1,1251
0,125 * 2 = 0,250
0,25 * 2 = 0,50
0,5 * 2 = 11
0
В этом случае временные биты0.390625
является0 1 1 0 0 1
.
Теперь у меня есть биты дляi
и дляf
.
Если все биты дляi
0, то по битамf
Я сдвигаю его до первого1
ушел, согласноdefault hidden 1
изM
, я получилM
, затем дайте значение сдвига к E, учитываяE
базовые конечно.
Еслиi
не равно 0, тогда я объединяю обе части битов и вычисляю, сколько shift_right мне нужно сделать, чтобы сделать объединенные биты равными 1, а затем присваиваю это значениеE
Я думаю, все мои шаги не так. Но я чувствую это очень хлопотно.
Есть ли простой и чистый способ?
Как это делает ПК?