c++ pow(2,1000) is normaly to big for double, but it's working. why?
我学习C ++已经有几周了,但数据类型仍然让我感到困惑。
首先,0xbadc0de在其他线程中发布的代码对我不起作用。
首先,pow(2,1000)
给我this more than once instance of overloaded function "pow" matches the argument list.
我通过将pow(2,1000)
更改为pow(2.0,1000)
来修复它。
看起来很好,我运行它并得到了这个:
http://i.stack.imgur.com/bbRat.png
而不是
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
它缺少很多值,可能是什么原因?
但现在是真正的问题。我想知道302位数字如何适合double(8字节)?0xFFFFFFFFFFFFFFFF = 18446744073709551616,那么这个数字怎么可能比这还大?
我认为这与浮点数编码有关。此外,如果不是0xFFFFFFFFFFFFFFFF,最大可以存储多大的数字?
0xFFFFFFFFFFFFFFFF
或最大值为:18446744073709600000(虽然看起来我的计算器四舍五入了)。如何在64位中获得302位数字是另一个问题(压缩)?一些技巧。 - Martin York