0

Выполняю следующий код, в num4 получаю 100.3

int main()
{
        double num1 = 100.10;
        double num2 = 0.002;
        double num3 = num1 * num2;
    double num4 = num1 + num3; //100.3
    return 0;

}

хотя если считать на калькуляторе, получается 100.3002

введите сюда описание изображения

Как в C++ получить такой же результат как на калькуляторе?

Пробовал функцию round из библиотеки cmath, все тщетно.

Kromster
  • 13,809
  • Чтобы получать результат, как на калькуляторе, следует вместо чисел с плавающей точкой использовать числа с фиксированной точкой или двоично-десятичные. – user7860670 Dec 13 '22 at 14:03
  • @user7860670 да ну, неужели у double такая низкая точность, что он не держит даже 7 знаков? // спойлер, дело в чем-то еще. – Kromster Dec 13 '22 at 14:52
  • 1
    Вероятно, дело в том, КАК вы смотрите на значение. Уточните, где вы видите 100,3 в среде разработке, в принте, в отладчике, в выводе? Добавьте этот код или скриншот. – Kromster Dec 13 '22 at 14:55
  • @Kromster На самом деле точность у double даже еще ниже, чем это. Уже в самом начале 100.10 внезапно превращается в 100.09... – user7860670 Dec 13 '22 at 15:00
  • @user7860670 вообще-то, double precision type has a range of around 1E-307 to 1E+308 with a precision of at least 15 digits. А вот если вы его неправильно обрезаете-округляете - тогда конечно, проблема в этом. – Kromster Dec 13 '22 at 15:16
  • @Kromster "вы его неправильно держите" ©, ага. Собственно double в принципе не могут представлять многие десятичные числа, например упомянутое 100.1, так что какое количество значащих разрядов потом остается после вычислений - совсем не важно. – user7860670 Dec 13 '22 at 15:41
  • 1
    Вероятнее всего автор вопроса использовал для вывода std::cout. Вот если бы он использовал printf, то ответ был бы верным. Поэтому здесь вопрос не в точности представления числа типа double, а в использовании различных средств вывода и их особенностях. – eugesh Dec 13 '22 at 16:12

0 Answers0