Anomalie der Gleitkommadivision: Warum ergibt (3/5) Null in doppelter Genauigkeit?
Bei der Durchführung arithmetischer Operationen auf Gleitkommazahlen Zahlen stoßen Programmierer oft auf überraschende Ergebnisse. Eine solche Anomalie tritt beim Divisionsoperator (/) auf. Obwohl Zahlen als Gleitkommawerte mit doppelter Genauigkeit gespeichert werden, kann eine einfache Division wie (3/5) zur unerwarteten Ausgabe von Null führen.
Dieses Verhalten ergibt sich aus der Tatsache, dass sowohl 3 als auch 5 ganze Zahlen sind standardmäßig in C . Wenn ganze Zahlen in einem arithmetischen Ausdruck verwendet werden, führt der Divisionsoperator eine ganzzahlige Division durch, bei der der Bruchteil des Ergebnisses verworfen wird.
Korrigieren der Divisionsoperation
Um die zu erhalten Um ein korrektes Gleitkomma-Divisionsergebnis zu erhalten, muss sichergestellt werden, dass mindestens ein Operand ein Gleitkommawert ist. Dies kann erreicht werden, indem eine der Ganzzahlen in eine Gleitkommazahl doppelter Genauigkeit umgewandelt wird. Beispielsweise kann man den folgenden Code verwenden:
double f = 3.0 / 5;
In diesem Fall ist 3.0 eine Gleitkommazahl mit doppelter Genauigkeit, die sicherstellt, dass der Compiler eine Gleitkommadivision durchführt, die den Bruchteil beibehält des Ergebnisses.
Durch die Umwandlung eines der Operanden in einen Gleitkommawert erzeugt der Divisionsoperator nun das erwartete Ergebnis, das in diesem Fall 0,6 beträgt. Mit dieser Technik können Programmierer arithmetische Operationen an Gleitkommazahlen korrekt ausführen und unerwartete Nullausgaben vermeiden.
Das obige ist der detaillierte Inhalt vonWarum führt die Ganzzahldivision in C zu Null, wenn 3 durch 5 als Doppel dividiert wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!