88 votes

Valeurs flottantes en double précision en Python ?

Existe-t-il des types de données offrant une meilleure précision que les flottants ?

128voto

larsmans Points 167484

La fonction intégrée de Python float a une double précision (c'est un C double en CPython, un Java double en Jython). Si vous avez besoin de plus de précision, obtenez NumPy et utiliser son numpy.float128 .

58voto

Jacob Points 17521

Type de données décimales

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

Si vous êtes pressé par les problèmes de performance, jetez un coup d'œil à GMPY

17voto

Gareth Rees Points 31350

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 d'autres applications, il y a decimal comme l'ont suggéré les autres réponses).

15voto

jerboa Points 378

Vous avez peut-être besoin d'un système décimal

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

Arithmétique en virgule flottante

1voto

Bittikettu Points 37

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X