IEEE 754 Представление с плавающей точкой - PullRequest
0 голосов
/ 25 ноября 2011

Как преобразовать десятичное значение в стандарт IEEE 745 с плавающей запятой одинарной точности?Я могу работать с небольшими числами, такими как 0,5, 0,75 и т. Д. Моя проблема в том, что я понятия не имею, что делать с меньшими числами.Например,

12.1325 * 10 ^ -13

1 Ответ

0 голосов
/ 26 ноября 2011

Я предполагаю, что сложность заключается в двоичном преобразовании, а не в кодировании с плавающей запятой IEEE (поскольку вы говорите, что знаете, как преобразовать 0,5 и 0,75).Для менее простых примеров, таких как 12.1325 * 10 -13 , я бы использовал мой двоичный преобразователь ).Для 70 мест 0,00000000000121325 равно

0,0000000000000000000000000000000000000001010101010111111111100000001111 ...

округлено (вручную) до 24 значащих бит, то есть 0,000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001float.

Еще один способ сделать это - аналитически (хотя вам понадобится хороший калькулятор произвольной точности, например, PARI / GP ).Начните с переписывания 12.1325 * 10 -13 как 121325/10 17 и попробуйте найти ближайшее число с 24-битным числителем и степенью двух знаменателей:

121325/10 17 = х / 2 n

x = (2 n * 121325) / 10 17

Вы обнаружите, что n = 63 дает вам то, что вы ищете: x = 11190256.123714056749056 = 11190256 (при округлении до ближайшего целого числа).(11190256 = 101010101011111111110000 в двоичном формате, и вы увидите, что это соответствует ответу выше.) Когда вы нормализуете число с плавающей точкой, вычтете 23 из показателя степени, что даст: 1.0101010101111111111 * 2 -40

(Последний способ см. В моей статье Правильный десятичный код с плавающей точкой с использованием больших целых чисел .)

...