Python epsilon ist nicht die kleinste Zahl

8

Was gibt sys.float_info.epsilon zurück?

Auf meinem System bekomme ich:

%Vor%

Wie ist das möglich?

BEARBEITEN:

Es geht Ihnen gut, ich dachte, Epsilon tut was min tut. Also ich meinte eigentlich sys.float_info.min .

EDIT2

Jeder und besonders John Kugelman, danke für deine Antworten!

Einige herumspielend habe ich getan, um Dinge zu mir selbst zu klären:

%Vor%

Also epsilon * min gibt die Zahl mit der kleinsten positiven Signifikanz (oder Mantisse) und dem kleinsten Exponenten an.

    
Ella Shar 17.04.2015, 21:26
quelle

6 Antworten

3

epsilon ist die Differenz zwischen 1 und dem nächsten darstellbaren Float. Das ist nicht das Gleiche wie der kleinste Gleitkommawert, der der Anzahl von 0 und nicht von 1 am nächsten kommt.

Es gibt zwei kleinste Floats, abhängig von Ihren Kriterien. min ist der kleinste normalisierte Float. Die kleinste subnormale Float ist min * epsilon .

%Vor%

Beachten Sie den Unterschied zwischen normalisierten und subnormalen Gleitkommazahlen: min ist nicht der kleinste Gleitkommawert, sondern nur der kleinste mit voller Genauigkeit. Subnormale Zahlen decken den Bereich zwischen 0 und min ab, verlieren aber sehr viel Genauigkeit. Beachten Sie, dass 5e-324 nur eine signifikante Ziffer hat. Subnormale arbeiten auch langsamer, bis zu 100x langsamer als normalisierte Floats.

%Vor%

Diese Tests bestätigen, dass 5e-324 wirklich der kleinste Float ist. Division durch zwei Unterläufe auf 0.

Siehe auch: Was ist der Wertebereich, den ein Float in Python haben kann?

    
John Kugelman 17.04.2015, 21:31
quelle
1

Sie wollen eigentlich sys.float_info.min ("minimum positive normalized float"), was mir auf der Maschine .2250738585072014e-308 gibt.

epsilon ist:

  

Unterschied zwischen 1 und dem kleinsten Wert größer als 1, der als Float dargestellt werden kann

Weitere Informationen zu den Feldern von sys.float_info . Dokumenten / p>     

Isaac 17.04.2015 21:31
quelle
0

Ihr letzter Ausdruck ist möglich, denn für jede echte, positive Zahl, 0 < num/2 < num .

Von den Dokumenten :

  

Unterschied zwischen 1 und dem kleinsten Wert größer als 1, der als Float dargestellt werden kann

    
A.J. Uppal 17.04.2015 21:29
quelle
0

sys.float_info ist als

definiert
  

Unterschied zwischen 1 und dem kleinsten Wert größer als 1 ist   darstellbar als Float

auf dieser Seite .

    
Mike Pelley 17.04.2015 21:29
quelle
0

Die Dokumentation definiert sys.float_info.epsilon als

  

Unterschied zwischen 1 und dem kleinsten Wert größer als 1, der als Float dargestellt werden kann

Allerdings ist die Lücke zwischen aufeinanderfolgenden Floats für größere Floats größer, so dass die Lücke zwischen epsilon und dem nächstkleineren Float viel kleiner ist als epsilon . Insbesondere ist der nächst kleinere Float nicht 0.

    
user2357112 17.04.2015 21:31
quelle
0

Wie jede Antwort sagt, ist es der Unterschied zwischen 1 und dem nächstgrößeren Wert, der dargestellt werden kann. Wenn Sie versuchen, die Hälfte davon zu 1 hinzuzufügen, erhalten Sie 1 zurück

%Vor%

Wenn Sie zusätzlich versuchen, zwei Drittel davon zu 1 hinzuzufügen, erhalten Sie den gleichen Wert:

%Vor%     
Ryan Haining 17.04.2015 21:35
quelle

Tags und Links