ich hatte festgestellt, dass der Vergleich von großen float-Werten, deren Differenz gering ist, nicht wie erwartet abläuft. (Siehe hier meine Frage auf stackoverflow.)
Ein Unterschied wird offenbar erst dann bemerkt, wenn er genügend groß ist.
Code: Alles auswählen
import sys
m = sys.float_info.max # type 'float'
m == m # True
m < m # False
m > m # False
m == m-1.0 # True
m < m-1.0 # False
m > m-1.0 # False
m == m-1e100 # True
m < m-1e100 # False
m > m-1e100 # False
m == m-1e300 # False
m > m-1e300 # True
m < m-1e300 # False
- Erst wenn die Differenz zweier Werte größer als ein Mindestwert ist, wird ein Unterschied bemerkt.
- Dieser Mindestwert hängt von den zu vergleichenden Werten ab.
Code: Alles auswählen
import sys
m = sys.float_info.max # type 'float'
eps = sys.float_info.epsilon
# Mindestwert ist 'm*eps'
m == m-(m*(eps/10)) # True
m == m-(m*eps) # False
Eben das ist aber nicht der Fall!
Code: Alles auswählen
import sys
m = 1000000.0
eps = sys.float_info.epsilon
min_dif = m * eps # 0.000000000222044.....
m == m - min_dif # False
m == m - (min_dif/2) # False
m == m - (min_dif/10) # True
m == m - 0.00000000021 # False
Obiger Code wurde mit Python 3.5.2 auf einem 64-Bit System ausgeführt.
Mit freundlichen Grüßen
AFoeee