c++给出了奇怪的大数字答案(恐怕不是溢出)

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

本文关键字:溢出 答案 数字 c++      更新时间:2023-10-16

我正在写一个小程序来比较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;
}

100000返回正确答案,但大于1000000则不返回。有人知道是怎么回事吗?我无法想象这个问题是溢出的,因为涉及的数字并不是那么大(正确答案是5e9)。

问题是溢出。5e9是5'000'000'000,但最大的32位有符号整数(在32位平台和64位Windows上都是长整数);

我给了你的程序一个测试运行,它返回了正确的答案(与wolfram alpha相比)。所以我要说,代码中没有错误。

编辑:在64位机器上运行,所以你可能会使用32位,并得到上面答案中告诉的溢出