为什么a+=b的执行结果和a=a+b不同??
在完成C语言S1E6课后作业时发现的问题,求大神解惑。程序如下:#include <stdio.h>
#include <math.h>
int main()
{
int i;
unsigned long long result1 = 0;
unsigned long long temp;
for(i=0;i<54;i++)
{
temp = pow(2,i);
result1 += pow(2,i);
//result1-=1;
//result1 += temp;
//result1 = result1 + temp;
}
printf("舍罕王应给予达伊尔%llu粒麦子!\n",result1);
return 0;
}
result1 = result1 + temp执行结果正确为18014398509481983
result1 += pow(2,i)执行结果错误为18014398509481984
另外,i小于53时,两者执行结果一致,均正确。从54开始出现错误。
pow 返回double会自动转换
result1 +=(long)pow(2,i);
就一样了 万千只cnm 发表于 2021-7-30 16:56
pow 返回double会自动转换
result1 +=(long)pow(2,i);
就一样了
非常感谢
页:
[1]