Wenn vor kurzem in einem Stück Code suchen, stieß ich auf eine Linie, die mir zu denken hatte:Kann das Produkt zweier positiver Schwimmer negativ sein?
if a*b > 0:
# do stuff
Es wird angenommen werden, dass a
und b
Schwimmer sind.
Frage:
Ist es möglich, dass es existiert (sehr klein, positiv, und wahrscheinlich nahe an ~ eps_mach) Werte vona
undb
so dass ihr Produkt negativ ist? Wenn nicht, könnte es sein, dass wira*b==0
wedera==0
nochb==0
haben.
keine vollständige slouch sein, hier sind meine Gedanken:
Nein, es ist möglich, da in FP das Produkt arithmetische wahrscheinlich so definiert ist, dass die Vorzeichenbits von
a
undb
bestimmen Sie das Vorzeichenbit vona*b
. Daher läuft die Berechnung auf einer Basisebene "Das Vorzeichenbit vona
ist positiv. Das Vorzeichenbit vonb
ist positiv. Setze das Vorzeichenbit vona*b
auf positiv." Ich stelle mir vor, diese Konvention ist spezifiziert und universell irgendwo vorausgesetzt, es existiert.Die
a*b==0
mita!=0
undb!=0
scheint sicherlich möglich.Die Antwort wird computerabhängig und sprachabhängig sein.
Dies führt mich zu einer Teilfrage:
Frage:
Wäre es sicherer sein, den Code wie unten zu implementieren? Wenn es nicht sicherer ist, wie sollte es dann gemacht werden?
if (a>0 and b>0) or (a<0 and b<0):
# do stuff
@old_timer Warum würden Sie eine NaN eher als positive Unendlichkeit erwarten? –
@old_timer IEEE754 fordert die Unendlichkeit, ebenso wie die Java-Sprachspezifikation. Andere Sprachen mögen etwas Seltsames tun, aber ich würde generell Unendlichkeit erwarten. Es macht einen Unterschied, denn NaN> 0 ist wie alle NaN-Vergleiche falsch. –
Ich lösche meine Kommentare. –