4

这是计算 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
4

1 回答 1

15

根据IEEE 754,浮点数等以 2 次方格式存储:以 2 为底的符​​号、尾数和指数。

因此,简单地说,2^1000 存储的尾数正好为 1,指数为 1000。

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

于 2012-11-28T13:39:38.237 回答