Search code examples
pythonpython-decimal

Is there a faster alternative to python's Decimal?


Does anyone know of a faster decimal implementation in python?

As the example below demonstrates, the standard library's decimal module is ~100 times slower than float.

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)

Outputs:

FLOAT 0.040635041427
DECIMAL 3.39666790146

Solution

  • The GMP library is one of the best arbitrary precision math libraries around, and there is a Python binding available at GMPY. I would try that method.