ddvictor 发表于 2021-7-30 16:23:02

为什么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开始出现错误。

万千只cnm 发表于 2021-7-30 16:56:21

pow 返回double会自动转换
result1 +=(long)pow(2,i);
就一样了

ddvictor 发表于 2021-7-31 11:51:11

万千只cnm 发表于 2021-7-30 16:56
pow 返回double会自动转换
result1 +=(long)pow(2,i);
就一样了

非常感谢
页: [1]
查看完整版本: 为什么a+=b的执行结果和a=a+b不同??