为什么我的 64 位计算机不能在 C++ 中存储双精度数字 2^1024?
Why can't my 64-bit computer store the double-precision number 2^1024 in C++?
我的电脑有一个英特尔®酷睿™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'
有人知道为什么吗?
一些位模式保留用于特殊用途,如非数字、+无穷大和-无穷大。
相关文章:
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 使用浮点数和双精度数的非常小数字的数学
- 如何在 c++ 中添加两个大的双精度数字
- 字符串和双精度的麻烦,等值后再得到一个数字
- 避免双精度数字的四舍五入
- 有没有办法将数字作为字符串,并在不使用浮点数或双精度数的情况下将其四舍五入到确切的位数
- 将协议缓冲区中的二进制双精度数组转换为 JavaScript 数字
- 2 个给定数字之间的双精度密度
- 如何在不丢失第一位数字的情况下打印出双精度值
- 双精度数字程序意外值
- 从字符串转换为数字大于 std::numeric_limit<double>::d igits10 的双精度
- 非分数数字对双精度数字的影响
- 减少C++中双精度的数字
- 将双精度转换为精度超过 5 位十进制数字的字符串
- 使用自定义数字将字符串转换为双精度无法按预期工作
- 小数点后的数字,用于双精度变量/C++计算
- C++ 浮点数与双精度数的精度数字
- 使用浮点数、双精度数和长双精度数后,控制台中不显示所有数字
- 查找双精度数组中的第一个数字
- C++ 仅使用数字(双精度)的读入文件