GHC 7.0.3 否认将 2^1000 显示为标准化双精度输出“无穷大”
我有以下输出 - 我很惊讶。有什么帮助为什么“我的双打”看起来这么低吗?
<块引用>Prelude GHC.Float> floatRange (0.5e1000::Double)
(-1021,1024)
Prelude GHC.Float>显示(0.5e1000::双)
“无限”
指数 1000 似乎离 1024 限制相当远(因为我预计 IEEE 会包含这个 ::Double)。
我将不胜感激你的帮助。
I have the following output - and I am surprised. Any help why "my Doubles" seem to be so low?
Prelude GHC.Float> floatRange (0.5e1000::Double)
(-1021,1024)
Prelude GHC.Float> show (0.5e1000::Double)
"Infinity"
The exponent 1000 seems to be quite far away from the 1024 limit (as I expected IEEE to contain this ::Double).
I would appreciate your help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
最有可能的是,
floatRange
返回二进制(以 2 为底)指数的范围。您在这里设置以 10 为底的指数为 1024,因此您要求以 2 为底的指数达到 3402 左右。Most likely,
floatRange
is returning the range of the binary (base-2) exponent. You are setting a base-10 exponent of 1024 here, so you're asking the base-2 exponent to reach 3402 or so.0.5e1000
并不意味着“2^1000”。它的意思是“0.5 * 10^1000”,这实际上远远超出了可表示的双精度值的范围。0.5e1000
does not mean "2^1000". It means "0.5 * 10^1000", which actually is well outside the range of representable double-precision values.