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