Я вычисленное следующее:с плавающей запятой в Python дает неправильный ответ
>>> float(10.0-9.2)
0.800000000000000*7*
даже делает 10.0-9.2 дал выше результат. Почему дополнительные 7 поступают в результате?
Я нахожусь на python 3.2.
Я вычисленное следующее:с плавающей запятой в Python дает неправильный ответ
>>> float(10.0-9.2)
0.800000000000000*7*
даже делает 10.0-9.2 дал выше результат. Почему дополнительные 7 поступают в результате?
Я нахожусь на python 3.2.
Арифметика с плавающей точкой имеет встроенные проблемы, поскольку она основана на двоичном приближении чисел.
В документах Python имеется a good explanation of this.
Вы можете проверить the decimal
module, если вам нужны более точные ответы.
Спасибо .. искал это. Ответы на мой вопрос – Rohan
Вы очень облегчили мою боль. Я подумал, что это была ошибка сначала, но она выглядела слишком совершенно неточной, чтобы не быть математической ошибкой, связанной с логикой типа python. –
Это типично для двоичной арифметики с плавающей запятой на всех платформах. Если ваше приложение не допускает ошибок округления в пределах этой погрешности, вы можете вместо этого использовать объекты Decimal.
Конечно, 'decimal' также реализовал числа с плавающей запятой, просто с другой базой, что означает, что вы по-прежнему получаете неточности, только те, к которым привыкли люди. – delnan
Да, они просто не «двоичные» числа с плавающей запятой. –
Возможный дубликат [Ошибка округления по Python с номерами с плавающей запятой] (http://stackoverflow.com/questions/5997027/python-rounding-error-with-float-numbers) – recursive
Почему вы даже конвертируете результат поплавка вычитание в поплавок? что бы вы ожидали, что это будет другое, чем плавание? – mata
@mata: просто чтобы убедиться, что – Rohan