请考虑以下代码:
#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
发生了什么事?
答案 0 :(得分:4)
在IEEE-754中,double
(二进制-64)可以表示精确到9007199254740992
的所有整数(即2次幂53)。之后,并非所有整数都可以在double
中准确表示。您的号码21611482313284249
大于9007199254740992
,无法在double
中完全表示。
答案 1 :(得分:3)
结果如此之大,双精度浮点数的有效位数不足以表示每个整数的精度。