Точность программы зависит от параметров - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь научиться программировать на C ++, поэтому я создал что-то, что позволило вам ввести минимальный и максимальный параметр, и он будет вычислять k+(k+1)+(k+2)+...+(max), и сравнил его с аналитическим значением, используя стандартную формулу (n(n+1)/2). Кажется, это работает нормально, когда я пробую небольшие числа, но когда, например, пытаюсь min=4, max=4*10^5 (400 000), я получаю отрицательный результат для суммы, но положительный результат проверяется аналитическим методом, даже после того, как изменив тип с «int» на «long». Пробуя другие комбинации, я добился противоположного, аналитический метод привел к отрицательной сумме. Я подозреваю, что это связано с тем фактом, что тип int может доходить до определенного числа цифр, но я хотел получить какое-то подтверждение на этот счет, и если это не так, то какова реальная проблема. Код указан ниже:

#include <iostream>
// Values are inconsistent when paramin,parammax become large. 
// For example, try (parammin,parammax)=(4,400,000)
int main() {
    int parammax,parammin;
    std::cout << "Input a minimum, then maximum parameter to sum up to" << std::endl;
    std::cin >> parammin >> parammax;
    int sum=0;
    for (int iter = parammin; iter <= parammax; iter++){
        sum += iter;
    }
    std::cout << "The sum is: " << sum << std::endl;
    const int analyticalmethod = (parammax*(parammax+1)-parammin*(parammin-1))/2;
    std::cout << "The analytical result for the sum is,"
                 " via (max*(max+1)-min*(min-1))/2: " 
              << analyticalmethod << std::endl;
    return 0;
}

1 Ответ

0 голосов
/ 25 января 2019

Использование очень больших чисел без контроля опасно в C ++.Базовые типы int, long и long long зависят от реализации и имеют только следующие требования:

  • int имеет размер не менее 16 бит
  • long не менее int и не менее 32 бит
  • long long не менее long и не менее 64 бит

Есливы думаете, что вам могут потребоваться большие значения, вам следует рассмотреть библиотеку с множественной точностью, например, gmp .

...