2012-05-01 6 views
1

Я вычисленное следующее:с плавающей запятой в Python дает неправильный ответ

>>> float(10.0-9.2) 
0.800000000000000*7* 

даже делает 10.0-9.2 дал выше результат. Почему дополнительные 7 поступают в результате?

Я нахожусь на python 3.2.

+1

Возможный дубликат [Ошибка округления по Python с номерами с плавающей запятой] (http://stackoverflow.com/questions/5997027/python-rounding-error-with-float-numbers) – recursive

+0

Почему вы даже конвертируете результат поплавка вычитание в поплавок? что бы вы ожидали, что это будет другое, чем плавание? – mata

+0

@mata: просто чтобы убедиться, что – Rohan

ответ

10

Арифметика с плавающей точкой имеет встроенные проблемы, поскольку она основана на двоичном приближении чисел.

В документах Python имеется a good explanation of this.

Вы можете проверить the decimal module, если вам нужны более точные ответы.

+0

Спасибо .. искал это. Ответы на мой вопрос – Rohan

+0

Вы очень облегчили мою боль. Я подумал, что это была ошибка сначала, но она выглядела слишком совершенно неточной, чтобы не быть математической ошибкой, связанной с логикой типа python. –

0

Это типично для двоичной арифметики с плавающей запятой на всех платформах. Если ваше приложение не допускает ошибок округления в пределах этой погрешности, вы можете вместо этого использовать объекты Decimal.

+2

Конечно, 'decimal' также реализовал числа с плавающей запятой, просто с другой базой, что означает, что вы по-прежнему получаете неточности, только те, к которым привыкли люди. – delnan

+0

Да, они просто не «двоичные» числа с плавающей запятой. –

Смежные вопросы