首页 > 解决方案 > Unsigned long long 不同的结果

问题描述

为什么我得到:

34458730320

3446590374

如果我运行:

#include <stdio.h>

int main()
{
    printf("%llu\n",10248428203192896360LLU/594823321LLU*2LLU);
    printf("%llu\n",2LLU*10248428203192896360LLU/594823321LLU);
    return 0;
}

我预计第二个是正确的(在 Mathematica,Matlab 中检查)。

标签: c

解决方案


整数值

2LLU * 10248428203192896360LLU

溢出 64 位,编译器应该对此发出警告。第一个是正确的

10248428203192896360LLU / 594823321LLU * 2LLU 

因为除法是精确的,没有余数,所以除法后加倍没有关系。


推荐阅读