C ++给出了大数字的奇怪答案(afaik不溢出)

时间:2015-05-23 14:18:19

标签: c++ numbers

我正在编写一个小程序来比较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返回正确答案,但1000 0000以上则没有。任何人都知道发生了什么?我无法想象问题是否会溢出,因为所涉及的数字并不是那么大(正确答案是5e9)。

2 个答案:

答案 0 :(得分:3)

问题是溢出。 5e9是5&000; 000&#39; 000&#39; 000,但最大的数字是32位有符号整数(在32位平台上长,在64位Windows上;它在64位上64位Linux)可以容纳2&#39; 147&#39;&#39; 648。

答案 1 :(得分:0)

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

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