Есть ли более быстрая альтернатива Десятичному числу Python

Кто-либо знает о более быстрой десятичной реализации в Python?

Как пример ниже демонстрирует, стандартное десятичное число Python в ~100 раз медленнее, чем плавание.

from  timeit import Timer

def run(val, the_class):
    test = the_class(1)
    for c in xrange(10000):
        d = the_class(val)
        d + test
        d - test
        d * test
        d / test
        d ** test
        str(d)
        abs(d)    

if __name__ == "__main__":
    a = Timer("run(123.345, float)", "from decimal_benchmark import run")
    print "FLOAT", a.timeit(1)
    a = Timer("run('123.345', Decimal)", "from decimal_benchmark import run; from decimal import Decimal")
    print "DECIMAL", a.timeit(1)

FLOAT 0.040635041427
DECIMAL 3.39666790146
16
задан B. Barbieri 18 July 2019 в 09:57
поделиться

2 ответа

библиотека GMP является одной из лучших математических библиотек произвольной точности вокруг, и существует Python, связывающий доступный в GMPY. Я попробовал бы тот метод.

11
ответ дан 30 November 2019 в 17:05
поделиться

Необходимо выдержать сравнение Десятичное число к производительность Длинного целого , не плавающая точка. Плавающая точка является главным образом аппаратными средствами в эти дни. Десятичное число используется для [1 111] десятичная точность , в то время как Плавающая точка для более широкого диапазона. Используйте десятичное число пакет для денежных вычислений.

Для заключения в кавычки десятичное число руководство пакета:

Десятичные числа могут быть представлены точно. Напротив, числа как 1,1 не имеют точного представления в двоичной плавающей точке. Конечные пользователи обычно не ожидали бы 1.1 отображаться как 1,1000000000000001, как это делает с двоичной плавающей точкой.

точность переносит в арифметику. В десятичной плавающей точке, "0.1 + 0.1 + 0.1 - 0.3" точно равно нулю. В двоичной плавающей точке результатом является 5.5511151231257827e-017. В то время как рядом обнулить, различия предотвращают надежное тестирование равенства, и различия могут накопиться. Поэтому десятичное число было бы предпочтено в приложениях учета, которые имеют строгие инварианты равенства.

2
ответ дан 30 November 2019 в 17:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: