Zijn er gegevenstypen met een betere precisie dan float?
Antwoord 1, autoriteit 100%
- In tegenstelling tot op hardware gebaseerde binaire drijvende komma, heeft de decimale module een door de gebruiker aanpasbare precisie (standaard 28 plaatsen) die zo groot kan zijn als nodig is voor een bepaald probleem.
Als je onder druk staat door prestatieproblemen, kijk dan eens op GMPY
Antwoord 2, autoriteit 94%
Python’s ingebouwde float
type heeft dubbele precisie (het is een C double
in CPython, een Java double
in Jython). Als je meer precisie nodig hebt, download dan NumPyen gebruik de numpy.float128
.
Antwoord 3, autoriteit 29%
Voor sommige toepassingen kunt u Fraction
gebruiken in plaats van getallen met drijvende komma.
>>> from fractions import Fraction
>>> Fraction(1, 3**54)
Fraction(1, 58149737003040059690390169)
(Voor andere toepassingen is er decimal
, zoals gesuggereerd door de andere reacties.)
Antwoord 4, autoriteit 25%
Misschien heb je decimaal nodig
>>> from decimal import Decimal
>>> Decimal(2.675)
Decimal('2.67499999999999982236431605997495353221893310546875')
Antwoord 5, autoriteit 2%
Hier is mijn oplossing. Ik maak eerst willekeurige getallen met random.uniform, formatteer ze in string met dubbele precisie en converteer ze dan terug naar float. U kunt de precisie aanpassen door ‘.2f’ te veranderen in ‘.3f’ enz..
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)