我正在编写一个小程序来比较 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)。
最佳答案
问题是溢出。 5e9 是 5'000'000'000,但是 32 位有符号整数(在 32 位平台上为长整数,在 64 位 Windows 上为长;在 64 位 Linux 上为 64 位)可以容纳的最大数字是 2' 147'483'648。
关于C++ 给出大量奇怪的答案(afaik 不会溢出),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30413746/