我正在编写一个小程序来比较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)。
答案 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位,并在上面的答案中得到溢出。