2016-11-04 11 views
1

Kann jemand bitte erklären, warum das Folgende passiert?Warum wird -0.0 gedruckt?

print(-1 * (605 % 11))  #-> 0 
print(-1 * (0.5*1210 % 11)) #-> -0.0 
print(-1 * (0.5*1210) % 11) #-> 0.0 

Vor allem die -0.0 ist rätselhaft ..

+5

Warum sollte nicht -0.0 gedruckt werden? Das bekommst du, wenn du 0.0 mit -1 multiplizierst. – Kevin

+1

Schritt durch die Reihenfolge der Operationen, Operator Vorrang, usw. – davedwards

+0

weil es einen Gleitkommawert und keine ganze Zahl? – Olian04

Antwort

6
print(-1 * (605 % 11))  #-> 0 

Integer-Arithmetik. Keine Überraschungen hier.

print(-1 * (0.5*1210 % 11)) #-> -0.0 

Hier können Sie überrascht werden. 0.5*1210 % 11 wertet den Gleitkomma-Nullwert aus, und dann -1 * 0.0 Ergebnisse in negative Null, die eine Sache in Fließkomma ist. Es existiert, weil es Edge-Fälle einiger numerischer Algorithmen einfacher zu implementieren macht.

Hier ist jemand, der mit Floating-Point vertrauter ist als mit Python. -1 * (0.5*1210) wertet -605.0, aber dann in -605.0 % 11, definiert Python die % Operation als Rückgabe eines Ergebnisses des gleichen Zeichens wie der Nenner, anstatt den Zähler, so dass 0.0 anstelle von -0.0 zurückgegeben wird.

Verwandte Themen