2017-02-01 9 views
1

Welche Genauigkeit haben die Gleitkommazahlen in Python? Ist es immer doppelt präzise oder ist es Implementierung oder plattformspezifisch? Unterscheidet es sich beispielsweise in CPython und PyPy?Genauigkeit von Gleitkommazahlen

+0

Gute Frage. (Bitte nicht runter!). Um Farbe hinzuzufügen, ist es in C und C++ implementierungsspezifisch. In Java muss es IEEE754 sein. Was python angeht, habe ich keine Ahnung. Ein kurzes Google beleuchtet dies (für mich) auch nicht. – Bathsheba

+0

Überprüfen Sie dies für CPython2: https://docs.python.org/2/tutorial/floatingpoint.html – MYGz

+0

Es gibt einen Hinweis hier http://floating-point-gui.de/languages/python/. Die oberste Zeile "Fast alle Plattformen zuordnen Python schwebt nach IEEE 754 doppelte Genauigkeit.". Es sieht also so aus, als wäre es dasselbe wie C und C++. – Bathsheba

Antwort

3

Von Python Dokumentation:

Gleitkommazahlen werden in der Regel implementiert Doppel in C; Informationen über die Präzision und interne Darstellung von Gleitkommazahlen für die Maschine, auf der das Programm Laufen ist in sys.float_info verfügbar.

sys.float_info ist eine Struktursequenz, die Informationen über den Float-Typ enthält. Es enthält Informationen auf niedriger Ebene über die Genauigkeit und die interne Darstellung.

import sys 

print(sys.float_info.mant_dig) 

mant_dig Attribut auf Schwimmers Präzision: die Anzahl der basen radix Ziffern in der Mantisse eines Schwimmers

fast allen Plattformen Karte Python zu IEEE 754 Doppel Präzision schwimmt.

+0

Danke! Ja, ich kenne 'sys.float_info', das Problem ist das" normalerweise ". Ich könnte die Frage umkehren, wann ist es nicht C-Double? –

+0

@EcirHana: Für CPython ist es * immer * C doppelt. Das ist in der [CPython-Quelle] fest programmiert (https://github.com/python/cpython/blob/3.6/Include/floatobject.h#L17). –

+0

Ja, das ist gut genug für mich. (Obwohl es nett wäre, einen Link zu einer offiziellen Python-Dokumentation zu haben). Habe eine Verbesserung. – Bathsheba

1
import sys 
sys.float_info 

sys.float_info (max = 1.7976931348623157e + 308 = 1024 max_exp, max_10_exp = 308 min = 2.2250738585072014e-308, min_exp = -1021, min_10_exp = -307, dig = 15, mant_dig = 53 Radix, epsilon = 2.220446049250313e-16, = 2, Runden = 1)

hier gefunden: https://docs.python.org/3/library/stdtypes.html#typesnumeric Sec 4.4

Hilft Ihnen das?

Verwandte Themen