Точное деление в питоне - PullRequest
       35

Точное деление в питоне

0 голосов
/ 07 декабря 2018

Я новичок в Python, и я написал программу, которая масштабирует значения от интервала [-7000,18000] до интервала [-1,1].

desired_upper_bound = 1.0
desired_lower_bound = -1.0
max_value = 18000.0
min_value = -7000.0
value = -7000.0
slope = (desired_upper_bound - desired_lower_bound) / (max_value - min_value)
print(slope)
intercept = desired_upper_bound - (slope * max_value)
print(intercept)
transformed_value = slope * value + intercept
print(transformed_value)

Точный результат 'transformed_value' должен быть -1, хотя консоль выдает: -1.0000000000000002.В остальной части моей работы это может вызвать много проблем, когда значение не находится в интервале, поэтому я хотел бы знать, как решить эту проблему.

Я хотел бы получить математически правильный результат«1» рассчитывается и отображается в консоли.Что я делаю не так?

1 Ответ

0 голосов
/ 09 декабря 2018

Это происходит потому, что арифметика с плавающей запятой не точна.Цитировать арифметическую статью с плавающей точкой в Википедии о том, что:

арифметика с плавающей точкой (FP) является арифметической, используя формальное представление действительных чисел в виде приближения чтобы поддерживать компромисс между дальностью и точностью.

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

if transformed_value <= -1:
    transformed_value = round(transformed_value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...