首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >8字节如何容纳302位小数?(欧拉挑战16)

8字节如何容纳302位小数?(欧拉挑战16)
EN

Stack Overflow用户
提问于 2013-01-28 16:58:06
回答 5查看 10.7K关注 0票数 4

c++ pow(2,1000)对于双倍来说是正常的,但它是有效的。为什么?

因此,我已经学习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

而不是

代码语言:javascript
复制
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376

它失去了很多的价值,可能是什么原因呢?

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

我想这和浮点数编码有关。另外,如果不是0xFFFFFFFFFFFFFFFFFFFFFFFF,可以以8字节存储的最大数字是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-28 17:07:42

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

浮点数可以保持接近302个小数位的数字;这是因为它们分别存储尾数和指数。这个表示法中的数字存储一定数量的有效数字(如果我没记错的话,双倍数为15-16)和一个指数(可以进入数百个内存服务)。但是,如果小数是X字节长,那么它只能区分2^(8X)不同的值.不太可能准确地表示带有302位小数的整数。

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

票数 8
EN

Stack Overflow用户

发布于 2013-01-28 17:06:24

这叫做“浮点”是有原因的。数据类型包含一个标准意义上的数字,以及一个表示小数点所属位置的指数。这就是pow(2.0, 1000)工作的原因,也是你看到很多零的原因。浮点数(或双,也就是更大的浮点数)数字包含固定数量的精度数字。所有剩余的数字最终都是零。尝试pow(2.0, -1000),您将看到相同的情况反过来。

浮点数(32位)的精度小数位数约为7,而双(64位)的小数位数约为16小数位。

现在大多数系统都使用IEEE浮点,我只是链接到了一个非常好的描述。另外,本文还对具体标准IEEE 754-1985给出了不同大小浮点数位布局的详细描述。

票数 1
EN

Stack Overflow用户

发布于 2013-01-28 17:10:48

浮点类型可以覆盖比相同大小的整数类型大得多的范围,但精度较低。

它们所代表的数字如下:

  • 表示正或负的符号位s
  • 尾数m,1到2之间的值,给出一定数量的精度;
  • 表示数字尺度的指数e

值本身计算为m * pow(2,e),如果设置了符号位,则为负值。

一个double有一个53位尾数,它提供了大约16位小数的精度.

因此,如果您需要表示一个精度超过64位的整数,那么64位整数和64位浮点类型都不能工作。您将需要一个大的整数类型,需要尽可能多的位来表示您正在使用的值,或者(取决于您要解决的问题)其他一些表示形式,比如素因式分解。在标准的C++中没有这样的类型,所以您需要自己制作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14567127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档