Я писал небольшую программу для сравнения скорости между CPP и Matlab, и я заметил, что получаю неправильный ответ при работе с большими числами.C++ дает странные ответы с большими номерами (afaik not overflow)
Вот код:
#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).
Почему вы не используете большое количество для больших вычислений? используйте long long или int64, посмотрите http://en.cppreference.com/w/cpp/types/integer – ahmedsafan86
Используйте ['std :: numeric_limits :: max()'] (http: //en.cppreference. com/w/cpp/types/numeric_limits/max), чтобы проверить, что является самым большим 'long', которое может быть представлено в вашей системе. –