Wolfram alpha на самом деле здесь неправ.
(1 - 0.002) ** 5
ровно 0.990039920079968
.
Вы можете убедиться в этом, просто оценив, что после .
есть 15 цифр, что соответствует 5 * 3
, где 3 — это количество цифр после .
в выражении (1 - 0.002)
. После 15-го по определению не может быть никакой цифры.
Редактировать
Еще немного покопавшись, я нашел кое-что интересное:
Эта нотация Decimal('0.002')
создает фактическое десятичное число с этим точным значением. При использовании Decimal(0.002)
десятичное число создается из числа с плавающей запятой, а не из строки, что создает неточность. Используя это обозначение, исходная формула:
(1-decimal.Decimal(0.002))**5
Возвращает Decimal('0.99003992007996799979349352807411754897106595345737537649055432859002826694496107'
, что действительно на 80 цифр больше, чем .
, но отличается от альфа-значения wolfram.
Это, вероятно, вызвано разницей в точности между представлением с плавающей запятой в python и wolfram alpha, и является еще одним признаком того, что wolfram alpha использует числа с плавающей запятой, когда используется SetPrecision.
Примечание: прямой запрос результата возвращает правильное значение (см. http://www.wolframalpha.com/input/?i=%281+-+0.002%29%5E5).).
person
njzk2
schedule
08.11.2013