Почему в python int(0.9999999999999999) == 0, а int(0.99999999999999999) == 1?
Asked
Active
Viewed 135 times
0
1 Answers
0
Потому что точность вещественных чисел в вашем компьютере ограничена.
@>>> f'{0.9999999999999999:.60g}'
'0.99999999999999988897769753748434595763683319091796875'
@>>> f'{0.99999999999999999:.60g}'
'1'
Оба числа невозможно представить точно в виде двоичной дроби (а вещественные числа хранятся в таком виде: m * 2^e, m и e - целые). Питон подыскивает наилучшее приближение. Чем больше девяток тем ближе это приближение к единице. Рано или поздно единица и получается.
P.S. int к проблеме не относится. Проблема случается раньше, когда Питон превращает строку 0.99999999999999999 в вещественное число 1.
Stanislav Volodarskiy
- 33,556
inthttps://ideone.com/Jiw6Fz – Кирилл Малышев Jun 06 '21 at 08:19