Pyinterval с тривиальным примером с плавающей точкой, похоже, не работает - PullRequest
1 голос
/ 16 июля 2011

Здесь, вероятно, есть сотни вопросов об ошибках округления с плавающей запятой, и решение должно быть интервальной арифметикой, которая помогает отслеживать их. Поскольку я хотел бы поэкспериментировать с этим, я попытался установить 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)] на Дарвине"

1 Ответ

0 голосов
/ 17 июля 2011

Похоже, что преобразование строк в числа с плавающей запятой не учитывает округление, но если я сделаю это вручную, введя 1.001 как 1001/1000, я получу то, что ожидаю:

>>> (interval[1001]/1000)-1
interval([0.0009999999999996678, 0.001000000000000112])
...