Gibt es Datentypen mit besserer Genauigkeit als float?
Gibt es Datentypen mit besserer Genauigkeit als float?
Antworten:
Wenn Sie unter Leistungsproblemen leiden, schauen Sie sich GMPY an
float
-s sind doppelte Präzision"
Der in Python integrierte float
Typ hat die doppelte Genauigkeit (es ist ein C double
in CPython, ein Java double
in Jython). Wenn Sie mehr Präzision benötigen, holen Sie sich NumPy und verwenden Sie es numpy.float128
.
numpy.float128
oft 64-Bit-Genauigkeit auf einem 64-Bit-System. numpy.float128(1) + numpy.float128(2**-64) - numpy.float128(1)
kehrt zurück 0.0
. Siehe stackoverflow.com/a/29821557/420755
Decimal
Sie diese Option, wenn Sie mit ungefähren Zahlen arbeiten möchten, die eine feste (aber konfigurierbare) Genauigkeit haben. Verwenden Fraction
Sie diese Option, wenn Sie mit genauen Verhältnissen arbeiten möchten und bereit sind, die unbegrenzten Speicheranforderungen zu erfüllen.
Möglicherweise benötigen Sie Dezimal
>>> from decimal import Decimal
>>> Decimal(2.675)
Decimal('2.67499999999999982236431605997495353221893310546875')
Hier ist meine Lösung. Ich erstelle zuerst Zufallszahlen mit random.uniform, formatiere sie mit doppelter Genauigkeit in Zeichenfolgen und konvertiere sie dann zurück in float. Sie können die Genauigkeit anpassen, indem Sie '.2f' in '.3f' usw. ändern.
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)