Если вы делаете:
>>> format(0.01, '.30f')
'0.010000000000000000208166817117'
вы можете видеть, что 0.01
(как число с плавающей запятой с двойной точностью) больше, чем число 0.01
, которое вы выучили в школе.
Итак, при суммировании 100 раз ошибка увеличивается:
>>> sum([0.01]*100)
1.0000000000000007
И этого достаточно, чтобы выдать ошибку математического домена.
Что вы можете сделать?
- Используйте второй код
round()
это меньше десятичных знаков:
.
>>> round(1.0000000000000007, 13)
1.0
13 или 14 может быть достаточно.