Хотя умножение на 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'