Как двойной тип данных сильно меняет ответ по сравнению с int в C ++? - PullRequest
2 голосов
/ 05 августа 2020

Я решал задачу «Подсчитать количество цифр в факториале» и сохранил ответ в двух типах данных int и double. Ответы для обоих типов данных различны, и тот, который хранится в double, наконец-то был правильным. Как это происходит?

Вот код:

        int n;
        cin>>n;
        double ans;
        int ans_int;
        double digits = 0;
        int digit_int = 0; 
        for (int i = 1; i<=n; i++) {
            digits += log10(i);
            digit_int += log10(i);
        }

        ans = floor(digits)+1;

        ans_int = floor(digit_int)+1; // This gives wrong answer. 

        cout<<ans<<endl;

Если в приведенном выше коде я делаю цифры как int, а не как double, я получаю ответ как 1 di git , через 5! вместо 3, в остальных случаях аналогично.

Ответы [ 2 ]

3 голосов
/ 05 августа 2020

Преобразование двойного числа в int сначала округляет его до ближайшего целого числа. Итак, если вы сложите, скажем, log10 (x) для x ≤ 10 ≤ 99, логарифм всегда будет между 1 и 2, но преобразование в int добавит только 1 вместо правильного значения.

3 голосов
/ 05 августа 2020

Проблема заключается в этой строке: digit_int += log10(i);. Если i меньше 10, то его логарифм будет меньше 1. При добавлении меньше единицы к целому числу фактически добавляется ноль.

...