C++ 给出大量奇怪的答案(afaik 不会溢出)

C++ giving weird answers with large numbers (afaik not overflow)

我正在编写一个小程序来比较 CPP 和 Matlab 之间的速度,我注意到在处理大量数字时我得到了错误的答案。

代码如下:

#include "stdafx.h"
#include <iostream>
#include "time.h"



int main()
{       

    clock_t t = clock();

    long x = 1000000;

    long sum = 0;    

    for (long i = 1;i <= x;i++) {
        sum = sum + i;
    }

    t = clock() - t;

    printf("It took %d ms, sum equals=",t);
    std::cout << sum << std::endl;

    return 0;
}

100 000 returns 正确答案,但高于 1000 0000 则不是。任何人都知道发生了什么事?我无法想象问题会溢出,因为涉及的数字根本没有那么大(正确答案是 5e9)。

问题是溢出。 5e9 是 5'000'000'000,但最大的数字是 32 位有符号整数(在 32 位平台上为 long,在 64 位平台上为 long Windows;在 64 位平台上为 64 位 Linux) 可以容纳的是 2'147'483'648.

我对你的 Programm 进行了测试 运行,它返回了正确的答案(与 wolfram alpha 相比)。所以我要说的代码没有错误。

编辑:运行 在 64 位机器上,因此您可以使用 32 位机器并得到上面答案中所述的溢出。