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



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

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

基于此,我知道双精度数的符号有1位,指数有11位,剩下的52位是分数。

所以,我想我应该用一个具有以下二进制代码的double来做实验:

0 11111111111 0000000000000000000000000000000000000000000000000000

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

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'

有人知道为什么吗?

一些位模式保留用于特殊用途,如非数字、+无穷大和-无穷大。

最新更新