如何从十进制转换为 IEEE 745 浮点单精度?我可以处理小数字,如 0.5、0.75 等。我的问题是我不知道如何处理小数字。例如,
12.1325 * 10^-13
如何从十进制转换为 IEEE 745 浮点单精度?我可以处理小数字,如 0.5、0.75 等。我的问题是我不知道如何处理小数字。例如,
12.1325 * 10^-13
我假设困难在于二进制转换而不是 IEEE 浮点编码(因为您说您知道如何转换 0.5 和 0.75)。对于不太直接的例子,比如 12.1325 * 10 -13,我会使用我的二进制转换器)。到 70 个地方,0.00000000000121325 是
0.00000000000000000000000000000000000000001010101010111111111100000001111...
四舍五入(手动)到 24 个有效位,即 0.00000000000000000000000000000000000000010101010101111111111
从那里开始,将其编码为浮点数是很困难的。
另一种方法是分析(尽管你需要一个好的任意精度计算器的帮助,比如PARI/GP)。首先将 12.1325 * 10 -13重写为 121325/10 17,并尝试使用 24 位分子和两个分母的幂找到最接近的数字:
121325/10 17 = x/2 n
x = (2 n * 121325)/10 17
您会发现 n=63 为您提供了您所追求的:x = 11190256.123714056749056 = 11190256(四舍五入到最接近的整数)。(11190256 = 101010101011111111110000 二进制,你会看到它与上面的答案匹配。)当你标准化浮点数时,你将从指数中减去 23,得到:1.0101010101111111111 * 2 -40
(对于后一种方法,请参阅我的文章Correct Decimal To Floating-Point Using Big Integers。)