print libreria from float example python

libreria - python decimal format



Python Decimal (5)

Debería comparar el rendimiento Decimal con el Integer largo , no el punto flotante. El punto flotante es principalmente hardware en estos días. El decimal se usa para la precisión decimal , mientras que el punto flotante es para un rango más amplio. Usa el paquete decimal para cálculos monetarios.

Para citar el manual del paquete decimal :

Los números decimales se pueden representar exactamente. Por el contrario, los números como 1.1 no tienen una representación exacta en el punto flotante binario. Por lo general, los usuarios finales no esperarían que 1.1 se muestre como 1.1000000000000001 como lo hace con el punto flotante binario.

La exactitud se traslada a la aritmética. En punto flotante decimal, "0.1 + 0.1 + 0.1 - 0.3" es exactamente igual a cero. En el punto flotante binario, el resultado es 5.5511151231257827e-017. Mientras están cerca de cero, las diferencias evitan las pruebas de igualdad confiable y las diferencias pueden acumularse. Por esta razón, el decimal sería preferido en aplicaciones de contabilidad que tienen invariantes de igualdad estricta.

¿Alguien sabe de una implementación decimal más rápida en Python? Como muestra el siguiente ejemplo, el decimal de python estándar es ~ 100 veces más lento que el flotante.

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

Gracias, Maksim


La biblioteca GMP es una de las mejores bibliotecas matemáticas de precisión arbitraria, y hay un enlace de Python disponible en GMPY . Yo probaría ese método.


Puedes probar cdecimal :

from cdecimal import Decimal


El decimal de python es muy lento, se puede usar float o una implementación más rápida de Decimal decimal.


Use cDecimal .

Agregando lo siguiente a su punto de referencia:

a = Timer("run(''123.345'', Decimal)", "import sys; import cdecimal; sys.modules[''decimal''] = cdecimal; from decimal_benchmark import run; from decimal import Decimal") print "CDECIMAL", a.timeit(1)

Mis resultados son:

FLOAT 0.0257983528473 DECIMAL 2.45782495288 CDECIMAL 0.0687125069413

(Python 2.7.6 / 32, Win7 / 64, AMD Athlon II 2.1GHz)