Doble precisión de valores flotantes en Python?

¿Hay tipos de datos con mejor precisión que flotar?

Tipo de datos decimal

  • A diferencia del punto flotante binario basado en hardware, el módulo decimal tiene una precisión modificable por el usuario (de forma predeterminada en 28 lugares) que puede ser tan grande como sea necesario para un problema dado.

Si está presionado por problemas de rendimiento, eche un vistazo a GMPY

El tipo float incorporado de Python tiene doble precisión (es un double C en CPython, un double Java en Jython). Si necesita más precisión, obtenga NumPy y use su numpy.float128 .

Puede ser que necesites decimal

 >>> from decimal import Decimal >>> Decimal(2.675) Decimal('2.67499999999999982236431605997495353221893310546875') 

Aritmética de punto flotante

Para algunas aplicaciones puede usar Fraction lugar de números de punto flotante.

 >>> from fractions import Fraction >>> Fraction(1, 3**54) Fraction(1, 58149737003040059690390169) 

(Para otras aplicaciones, hay decimal , como lo sugieren las otras respuestas).

Aquí está mi solución. Primero creo números aleatorios con random.uniform, los formulo en una cadena con doble precisión y luego los convierto de nuevo a flotar. Puede ajustar la precisión cambiando ‘.2f’ a ‘.3f’, etc.

 import random from decimal import Decimal GndSpeedHigh = float(format(Decimal(random.uniform(5, 25)), '.2f')) GndSpeedLow = float(format(Decimal(random.uniform(2, GndSpeedHigh)), '.2f')) GndSpeedMean = float(Decimal(format(GndSpeedHigh + GndSpeedLow) / 2, '.2f'))) print(GndSpeedMean)