Как избежать неточностей при подсчете различных выражений в Python? Суть проблемы заключается в том, что при подсчете разных чисел с плавающей точкой есть много неприятных и тонких моментов.
Ну например, есть довольно тривиальная задачка на вероятности: В магазине стоят два платёжных терминала. Каждый из них может быть неисправен
с вероятностью 0,3 независимо от другого терминала. Найдите вероятность того, что
хотя бы один платежный терминал исправен.
Правильным ответом здесь является 0.91, т.е P = (0.3 * 0.7) + (0.7 * 0.3) + (0.7 * 0.7)
Но интерпритатор питона выдает не очень корректный результат (0.9099999999999999).
Я знаю, что это происходит из-за специфичной реализации хранения вещественных чисел в памяти.
Но мой вопрос заключается в том, как именно можно обходить подобные проблемы при работе с такими числами в Python?

21 Авг 2019 в 06:09
190 +1
0
Ответы
1

Для избежания неточностей при подсчете выражений с числами с плавающей точкой в Python можно использовать модуль decimal. Модуль decimal предоставляет возможность работать с числами с фиксированной точностью, что избавляет от проблем с точностью вычислений.

Вот пример, как можно переписать вашу задачу с использованием модуля decimal:

from decimal import Decimal
p_terminal_broken = Decimal('0.3')
p_terminal_working = Decimal('0.7')
P = (p_terminal_broken * p_terminal_working) + (p_terminal_working * p_terminal_broken) + (p_terminal_working * p_terminal_working)
print(P)

Таким образом, вы получите точный результат без неточностей.

20 Апр 2024 в 13:23
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир