Здесь, вероятно, есть сотни вопросов об ошибках округления с плавающей запятой, и решение должно быть интервальной арифметикой, которая помогает отслеживать их. Поскольку я хотел бы поэкспериментировать с этим, я попытался установить pyinterval .
К сожалению, это не похоже на работу. Для этого тривиального случая ошибки с плавающей запятой я бы ожидал интервал с 2 числами, одно выше, а другое ниже фактического ответа (0,001):
>>> from interval import interval
>>> interval(1.001)-1
interval([0.0009999999999998899])
После некоторой царапины на голове, я думаю, что число 1.001 преобразуется в одно значение с плавающей запятой перед передачей в модуль интервала, поэтому я попытался использовать функции fpu.up и fpu.down с плавающей запятой для конверсия:
>>> from interval import fpu
>>> fpu.down(lambda : float("1.001")-1)
0.0009999999999998899
>>> fpu.up(lambda : float("1.001")-1)
0.0009999999999998899
Есть идеи, что не так? Или я неправильно понял, как это должно работать?
Я использую x86 mac с "Python 2.7.1 (r271: 86832, 1 января 2011, 22:28:41) [GCC 4.2.1 (Apple Inc., сборка 5664)] на Дарвине"