提问人:James Rider 提问时间:7/3/2022 更新时间:7/8/2022 访问量:266
为什么 1e100 不能完全表示为 64 位浮点数?
Why is 1e100 not exactly representable as 64 bit float?
问:
有人告诉我,1e100 不能完全表示为 64 位浮点数。使用 64 位浮点数,我们可以在有效数中有 16 位有效数字,并操纵指数(最多约 10^308)。因此,由于 1e100 只有一个有效数字,为什么这个数字不能完全表示为浮点数?
答:
3赞
chux - Reinstate Monica
7/4/2022
#1
1e100
或 10 100 与 2100 * 5100 相同。
5100 是一个奇数,是一个 233 位整数,远远超出了常见的 64 位二进制浮点的精度能力,后者通常具有 53 位的精度。每个二进制浮点都有一个精确值,即一些整数乘以 2 的幂。
如果我们使用不太常见的十进制浮点编码,那么准确保存 10100 是没有问题的。
1赞
user1196549
7/4/2022
#2
浮点使用指数 2 而不是 10。
10^100 ~ 1.1429873912822749822157835483053 x 2^332.
相反,尽管 2^332 有 99 位有效数字,但它可以精确地表示为浮点数。
评论
0赞
Sam Mason
7/5/2022
可能值得指出的是,最接近 1e100 的 f64 正好是 ,并且与预期的小数点后 16 位匹配。 匹配您的“1.14...”,但您的十进制近似值可能会使表示形式模糊不清5147557589468029 * 2^(332-52)
5147557589468029 * (2^-52)
0赞
7/5/2022
@SamMason:不,浮点表示使用超过 1 的尾数,而不是最接近的近似值。此外,显示整数似乎意味着一个确切的值。你的评论掩盖了事情。
评论