2016-01-27 3 views
0

Когда я делю 1/5e-5, он дает правильный ответ, но 1/5e-6 дает ответ близко к правильному.Раздел Python 2.7 не показывает точный результат

>>> 1/5e-5 
20000.0 
>>> 1/5e-6 
199999.99999999997 (should be 200000) 
>>> 

Как его получить, чтобы показать точное значение. Я попытался импортировать decimel, numpy и scipy, но ни один из них не изменил результат.

+0

https://docs.python.org/3.1/tutorial/floatingpoint.html –

+1

Вы должны прочитать [ошибка округления с плавающей точкой] (http://programmers.stackexchange.com/questions/101163/what-causes-floating-point-rounding-errors). Основная проблема заключается в том, что компьютеры не могут точно моделировать определенные десятичные дроби в двоичном формате, подобно тому, как мы не можем моделировать 2/3 (0,666667 ...) в десятичной системе. –

+0

Вы не всегда можете получить «точное значение» с математикой с плавающей запятой. – TigerhawkT3

ответ

2

Вы можете получить decimal, чтобы сделать это правильно - Вы просто должны избегать использования чисел с плавающей запятой по пути:

>>> import decimal 
>>> decimal.Decimal('1')/(decimal.Decimal('5')/decimal.Decimal('1000000')) 
Decimal('2E+5') 
+0

Вы можете использовать числа с плавающей запятой, преобразованные в 'Десятичные', если они точны. Целые числа, преобразованные в плавающие точки, удовлетворяют этому требованию, если они меньше, чем '2 ** 53'. –

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