Почему точность десятичных знаков различается при умножении и делении одного и того же математического выражения? - PullRequest
0 голосов
/ 28 марта 2020
# Used "==" and "is" for equality
print(48 / 10 == 48 * 0.1)
print(48 / 10 is 48 * 0.1)
print()

# Check Both Answers Individually
print(f"48 / 10 = {48 / 10}")
print(f"48 * 0.1 = {48 * 0.1}")

В следующем коде я думал, что оба выражения будут совпадать, но это не так. Это то, что он выводит.

False
False

48 / 10 = 4.8
48 * 0.1 = 4.800000000000001

Может кто-нибудь объяснить, почему есть разница в результате, используете ли вы деление или умножение?

1 Ответ

0 голосов
/ 28 марта 2020

Хотя умножение на 0,1 и деление на 10 математически равны, в компьютерной программе они не равны.

Когда вы пишете 0.1 в Python, вы получаете не одну десятую. Это немного больше. Вот от 0.1 до 40 цифр точности:

>>> "%0.40f" % 0.1
'0.1000000000000000055511151231257827021182'

Разница заключается в том, что числа с плавающей запятой используют двоичное представление. Вы не можете представить 0.1 точно с конечным числом двоичных цифр, точно так же, как вы не можете представить 1/3 = 0.333333 ... точно с конечным числом десятичных цифр.

Так как 0.1 немного больше чем одна десятая, вы должны ожидать, что 48*0.1 будет немного больше, чем 4,8. И это:

>>> "%0.40f" % (48*0.1)
'4.8000000000000007105427357601001858711243'

Не стоит ожидать, что 4.8 также будет равно 4,8. На самом деле это немного меньше, чем 4,8: ​​

>>> "%0.40f" % (4.8)
'4.7999999999999998223643160599749535322189'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...