2016-07-10 9 views
2

Mit WinPython 3.4.4.2, erhalte ich das folgende seltsame Ergebnis:Python: kleinster denormalisierter Doppelfehler

>>> 2**-1075 
5e-324 

Das heißt, die gleichen wie 2**-1074, während 2**-1075 sollte Null in Doppelschwimmer Darstellung sein. Mit Python 3.5.1 unter der Adresse https://www.python.org/shell/ bekomme ich 0 wie erwartet.

Darf mir jemand helfen zu verstehen, was schief läuft?

Danke

+0

Ich kann Ihr Ergebnis nicht duplizieren Python 3.4.3 (Standard, 14. Oktober 2015, 20:28:29) [GCC 4.8.4] unter Linux Geben Sie "Hilfe", "Copyright", "Kredite" oder ein "Lizenz" für weitere Informationen. >>> 2 ** - 1075 0.0 >>> –

+0

Haben Sie etwas gemacht, das mit Fließkomma-Rundungsmodi verschraubt werden könnte? Was passiert, wenn Sie noch niedrigere Exponenten versuchen? – user2357112

+0

Ich habe nichts gemacht, nur WinPython installiert und sofort solche Tests gemacht. Ich habe die richtige 0.0 für niedrigere Exponenten: nur dieser gibt eine falsche Antwort! –

Antwort

1

Die kleinste Wieder vorzeigbar denormalisierter schwebt größer und kleiner, als Null sind: 5e-324 und -5E-324.

5e-324 ist das denormalisierte Minimum, das durch die Multiplikation mindestens Gleitkommazahl (2.2250738585072014e-308) mit Gleitkomma-epsilon (2.220446049250313e-16) erreicht werden kann.

import sys 
print(sys.float_info.min*sys.float_info.epsilon) 

Ausgang:

5e-324 

ich auch das gleiche Ergebnis in meiner Schale bekommen (Python 3.5.1). Die Adresse https://www.python.org/shell/ verwendet die Konsole von http://www.pythonanywhere.com/, die einen solchen Vorgang in ihrem System steuern könnte.

+0

Das beantwortet meine Frage nicht. –