Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Как увеличить точность класса float

#python


Насколько я знаю, точность типа float в python ограничена 16 знаками после запятой.
Мне необходимо около 40 знаков после запятой. И вот вопрос, как увеличить количество
знаков после запятой в типе float, или какой типа данных использовать вместо флоат,
для которого определены операции с комплексными числами?    


Ответы

Ответ 1



Проект GMPY не устроит? Биндинги к gmp и mpfr.

Ответ 2



Также могу посоветовать пакет mpmath; Numpy поддерживает float128, но это около 32 знаков. А вообще, вопрос с точностью очень актуальный, существует весьма простой пример вычислений с плавающей точкой (на Python), заставляющий задуматься, что верить расчетам с плавающей точкой нужно очень осторожно...

Ответ 3



Вообще говоря, для более точных расчетов в Python используют класс Decimal. Подробнее о нем можно прочитать здесь В этом классе можно управлять точностью вычислений, потерь значений в нем не происходит, в отличии от double, но при этом, конечно, ждать высокую скорость работы не стоит.

Ответ 4



Боюсь, но придется их эмулировать самостоятельно. Дело в том, что по умолчанию в питоне используется тип Double, который имеет размер 8 байт, 52 бита из них используется для мантиссы, которые как раз и дают 15-16 знаков в десятичном виде. Что бы обеспечить 40 знаков после запятой, нужно где то 132 бита только для мантиссы. И ещё бит 12-15 для экспоненты. Итого 144-147 бит (18-19 байт). Мне не известны библиотеки, которые оперируют такими числами. Если уточните задачу, зачем нужна такая точность, может быть подкину красивое решение проблемы. Но в обычных задачах оно очень редко нужно. В своей жизни только один раз встречал задачу, в которой нужна была точность 12 знаков после запятой, и то, как потом оказалось, это была синтетическая задача, что бы отсечь тех, кто пользуется калькулятором и не умеет думать.

Комментариев нет:

Отправить комментарий