mpmath и точность вопроса - PullRequest
0 голосов
/ 27 апреля 2019

Точность mpmath.sqrt (2) не та, которую я ожидал. Что я делаю не так?

import mpmath as mp

mp.prec = 20

mp.nprint(mp.sqrt(2), 20)

результат: 1.4142135623730951455

Ожидается: 1.4142135623730950488 (согласно эта ссылка )

1 Ответ

0 голосов
/ 27 апреля 2019

Интересный случай.Использование питонов Decimal дает тот же результат, что и указанная вами ссылка, но использование float или math.sqrt(), похоже, дает другой результат.

>>> from decimal import Decimal
>>> '{:.25f}'.format(2**0.5)                            # Result 1
'1.4142135623730951454746219'
>>> '{:.25f}'.format(math.sqrt(2))                      # Result 1
'1.4142135623730951454746219'
>>> '{:.25f}'.format(math.sqrt(Decimal('2')))           # Result 1
'1.4142135623730951454746219'
>>> '{:.25f}'.format(Decimal('2') ** Decimal('0.5'))    # Result 2
'1.4142135623730950488016887'

# The reference you listed                              # Result 2
'1.4142135623730950488016887'

Ваша библиотека, вероятно, использует float для внутреннего использования..

Но я думаю, что это нормально и НЕ является ошибкой, поскольку float s не должны быть точными на 100%;они предназначены для быстрой работы на машине.

...