【问题标题】:IEEE 754 Floating Point RepresentationIEEE 754 浮点表示
【发布时间】:2012-01-06 09:43:39
【问题描述】:
如何从十进制转换为 IEEE 745 浮点单精度?
我可以处理 0.5、0.75 等小数字
我的问题是我不知道如何处理较小的数字。
例如,
12.1325 * 10^-13
【问题讨论】:
标签:
floating-point
computer-science
ieee-754
number-formatting
arithmetic-expressions
【解决方案1】:
我假设困难在于二进制转换而不是 IEEE 浮点编码(因为您说您知道如何转换 0.5 和 0.75)。对于不太直接的示例,例如 12.1325 * 10-13,我会使用我的 binary converter)。到 70 个地方,0.00000000000121325 是
0.0000000000000000000000000000000000000001010101010111111111100000001111...
四舍五入(手动)到 24 个有效位,即
0.000000000000000000000000000000000000000010101010101111111111
从那里开始,将其编码为浮点数是很严格的。
另一种方法是分析(不过你需要一个好的任意精度计算器的帮助,比如PARI/GP)。首先将 12.1325 * 10-13 重写为 121325/1017,并尝试找到最接近的具有 24 位分子和二分母幂的数:
121325/1017 = x/2n
x = (2n * 121325)/1017
您会发现 n=63 可以满足您的需求:x = 11190256.123714056749056 = 11190256(四舍五入到最接近的整数)。 (11190256 = 101010101011111111110000 二进制,你会看到它与上面的答案匹配。)当你标准化浮点数时,你将从指数中减去 23,得到:1.0101010101111111111 * 2-40
(后一种方法见我的文章Correct Decimal To Floating-Point Using Big Integers。)