我为什么得到:
34458730320
3446590374
如果我跑步:
#include <stdio.h>
int main()
{
printf("%llu\n",10248428203192896360LLU/594823321LLU*2LLU);
printf("%llu\n",2LLU*10248428203192896360LLU/594823321LLU);
return 0;
}
我希望第二个是正确的(已在Matlab中的Mathematica中选中)。
答案 0 :(得分:1)
整数值
2LLU * 10248428203192896360LLU
溢出64位,编译器应对此进行警告。首先是正确的
10248428203192896360LLU / 594823321LLU * 2LLU
因为除法是精确的,没有余数,所以除法后加倍并不重要。