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”
floatTyp wbudowany w Pythonie ma podwójną precyzję (to C doublew CPythonie, Java doublew Jythonie). Jeśli potrzebujesz większej precyzji, zdobądź NumPy i użyj jego numpy.float128.
numpy.float128czę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
Decimalgdy chcesz pracować z przybliżonymi liczbami, które mają stałą (ale konfigurowalną) precyzję. Używaj, Fractiongdy 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)/100do skrócenia liczby ado dwóch miejsc po przecinku.