c - C 如何以 double 数据类型存储 1001 位数?

标签 c double

这是计算 2 的 1000 次方的代码。

#include <stdio.h>

int main() {
    double multiply = 1;
    int i;
    for(i = 1; i <= 1000; i++) {
        multiply *= 2;
    }
    printf("%lf\n", multiply);
    return 0;
}

以及我系统上的输出,以及 ideone

10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376

正确答案:

irb(main):001:0> 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376 == 2 ** 1000
=> true

最佳答案

根据 IEEE 754 、 float 等以 2 的幂格式存储:符号、尾数和以 2 为底的指数。

所以简单地说,2^1000 的尾数恰好为 1,指数为 1000。

如果您要加 2,则该值不再正确。

关于c - C 如何以 double 数据类型存储 1001 位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13606346/

相关文章:

Java float 与 double

php - 多个左连接,如何在php中输出

c - memcpy 的未定义行为

c - 抑制 "ISO C99 requires rest arguments to be used"

c - 修改后指针没有改变

c++ - C++ 程序使用的 C 库中的错误处理

java即时 double 型转int型

c++ - 以非科学计数法打印 float 或 double

C++判断一个数是否为整数

android - gcc disable -Wall 特定文件/文件夹的标志