Czy istnieją typy danych o większej precyzji niż zmiennoprzecinkowe?
Czy istnieją typy danych o większej precyzji niż zmiennoprzecinkowe?
Odpowiedzi:
Jeśli naciskają na Ciebie problemy z wydajnością, spójrz na GMPY
float
-s są podwójnej precyzji”
float
Typ wbudowany w Pythonie ma podwójną precyzję (to C double
w CPythonie, Java double
w Jythonie). Jeśli potrzebujesz większej precyzji, zdobądź NumPy i użyj jego numpy.float128
.
numpy.float128
często ma 64-bitową precyzję w systemie 64-bitowym. numpy.float128(1) + numpy.float128(2**-64) - numpy.float128(1)
zwraca 0.0
. Zobacz stackoverflow.com/a/29821557/420755
Decimal
gdy chcesz pracować z przybliżonymi liczbami, które mają stałą (ale konfigurowalną) precyzję. Używaj, Fraction
gdy chcesz pracować z dokładnymi stosunkami i jesteś przygotowany na sprostanie nieograniczonym wymaganiom dotyczącym przechowywania.
Może potrzebujesz Decimal
>>> from decimal import Decimal
>>> Decimal(2.675)
Decimal('2.67499999999999982236431605997495353221893310546875')
Oto moje rozwiązanie. Najpierw tworzę losowe liczby za pomocą random.uniform, formatuję je do łańcucha z podwójną precyzją, a następnie konwertuję je z powrotem na zmiennoprzecinkowe. Możesz dostosować precyzję, zmieniając „.2f” na „.3f” itp.
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)
numpy.floor(100*a)/100
do skrócenia liczby a
do dwóch miejsc po przecinku.