C Math pow():出乎意料的结果

时间:2014-06-27 09:08:08

标签: c math pow

请考虑以下代码:

#include <math.h>
#include <stdio.h>
int main()
{
    printf("%f\n", pow(43,10));
}

此输出:21611482313284248.000000

有关游乐场的信息,请参阅http://codepad.org/eSa4ASF2

但是如果我使用Windows Calculator(x ^ y函数)运行操作,我会得到以下结果: 21611482313284249

发生了什么事?

2 个答案:

答案 0 :(得分:4)

在IEEE-754中,double(二进制-64)可以表示精确到9007199254740992的所有整数(即2次幂53)。之后,并非所有整数都可以在double中准确表示。您的号码21611482313284249大于9007199254740992,无法在double中完全表示。

答案 1 :(得分:3)

结果如此之大,双精度浮点数的有效位数不足以表示每个整数的精度。