web-dev-qa-db-fra.com

Valeurs flottantes double précision en Python?

Existe-t-il des types de données plus précis que float?

72
kravemir

type de données décimal

  • Contrairement aux virgule flottante binaire basée sur le matériel, le module décimal a une précision modifiable par l'utilisateur (28 emplacements par défaut) qui peut être aussi grande que nécessaire pour un problème donné.

Si vous êtes pressé par des problèmes de performance, regardez GMPY

46
Jacob

Le type float intégré de Python a une double précision (il s'agit d'un C double dans CPython, un Java double dans Jython). besoin de plus de précision, obtenez NumPy et utilisez son numpy.float128.

101
Fred Foo

Peut-être que vous avez besoin de décimal

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

Arithmétique en virgule flottante

12
jerboa

Pour certaines applications, vous pouvez utiliser Fraction au lieu de nombres à virgule flottante.

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

(Pour les autres applications, il y a decimal , comme suggéré par les autres réponses.)

12
Gareth Rees

Voici ma solution. Je crée d'abord des nombres aléatoires avec random.uniform, les formate en chaîne avec une double précision, puis les reconvertis en float. Vous pouvez ajuster la précision en remplaçant '.2f' par '.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)
2
Bittikettu