为什么我的64位计算机无法在C ++中存储双精度数2 ^ 1024?

时间:2014-05-30 18:09:37

标签: c++ 64-bit double

我的电脑配有英特尔®酷睿™2双核处理器,我相信它是一款64位处理器。所以我认为在C ++(或任何其他编程语言)中,可以存储任何双精度数(需要64位)。

我阅读了以下链接:http://en.wikipedia.org/wiki/Double-precision_floating-point_format

基于此,我知道双精度数字符号为1位,指数为11位,分数为剩余52位。

所以,我想我会尝试使用具有以下二进制代码的双精度词:

0 11111111111 0000000000000000000000000000000000000000000000000000

同样,基于我在上面的链接中读到的内容,我认为这个数字转换为2 ^ 1024的十进制数,exponenent等于以下内容:

2 ^ 10 + 2 ^ 9 + 2 ^ 8 + 2 ^ 7 + 2 ^ 6 + 2 ^ 5 + 2 ^ 4 + 2 ^ 3 + 2 ^ 2 + 2 ^ 1 + 2 ^ 0 - 1023

然后我尝试使用以下代码在C ++中打印2 ^ 1024:

double x = pow(2.0, 1024);
cout << x << endl;

然而,当我运行该程序时,它会打印'1.#INF'

有谁知道为什么?

1 个答案:

答案 0 :(得分:5)

某些位模式保留用于特殊用途,例如非数字,+无穷大和无穷大。您遇到了用于+无穷大的那个。