gpt4 book ai didi

c++ - 8 个字节如何容纳 302 个十进制数字? (欧拉挑战16)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:50 25 4
gpt4 key购买 nike

c++ pow(2,1000) is normaly to big for double, but it's working. why?

所以我已经学习 C++ 几个星期了,但数据类型仍然让我感到困惑。

首先是一件小事:0xbadc0de 在另一个线程中发布的代码对我不起作用。首先,pow(2,1000) 给我这个重载函数“pow”的实例不止一次匹配参数列表。

我通过更改 pow(2,1000) -> pow(2.0,1000) 修复了它看起来不错,我运行它并得到这个:

http://i.stack.imgur.com/bbRat.png

代替

10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376

它缺少很多值,可能是什么原因造成的?

但现在是真正的问题。我想知道 302 位长数字如何适合 double (8 字节)?0xFFFFFFFFFFFFFFFF = 18446744073709551616 那这个数字怎么能比那个大呢?

我认为这与 float 编码有关。另外,如果不是 0xFFFFFFFFFFFFFFFF,可以存储在 8 个字节中的最大数是多少?

最佳答案

八个字节包含 64 位信息,因此您可以使用这些位存储 2^64 ~ 10^20 个唯一项目。这些项目很容易解释为从 02^64 - 1 的整数。所以你不能在 8 个字节中存储 302 个十进制数字; 010^303 - 1 之间的大多数数字不能这样表示。

float 可以包含 302 位小数的近似值;这是因为它们分别存储尾数和指数。此表示中的数字存储一定数量的有效数字(如果我没记错的话, double 字为 15-16)和一个指数(可以达到数百,内存服务)。但是,如果小数的长度为 X 字节,则它只能区分 2^(8X) 不同的值……不太可能准确表示具有 302 位十进制数字的整数。

要表示这样的数字,您必须使用更多的位:实际上大约 1000 或 125 个字节。

关于c++ - 8 个字节如何容纳 302 个十进制数字? (欧拉挑战16),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14567127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com