Oll*_*lie 4 c++ double types integer
c ++ pow(2,1000)对于double来说是正常的,但它正在发挥作用.为什么?
所以我已经学习了几个星期的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
Run Code Online (Sandbox Code Playgroud)
它缺少很多价值,可能是什么原因造成的?
但现在是真正的问题.我想知道302位长号如何适合双倍(8字节)?0xFFFFFFFFFFFFFFFF = 18446744073709551616那么数字怎么能大于那个?
我认为这与浮点数编码有关.如果它不是0xFFFFFFFFFFFFFFFF,那么8个字节中可能存储的最大数字是多少?
八个字节包含64位信息,因此您可以2^64 ~ 10^20使用这些位存储唯一项.这些项目很容易被解释为整数0来2^64 - 1.所以你不能在8个字节中存储302个十进制数字; 大多数数字之间0和之间10^303 - 1不能如此表示.
浮点数可以包含302个十进制数字的近似值; 这是因为它们分别存储了尾数和指数.此表示中的数字存储一定数量的有效数字(如果我没记错,则为15-16表示双精度数)和指数(可以进入数百个存储器服务).但是,如果十进制是X字节长,那么它只能区分2^(8X)不同的值......不太可能完全表示具有302个十进制数字的整数.
要表示此类数字,必须使用更多位:大约1000,实际或125字节.