Verwirrung beim Gleitkommavergleich
Im angegebenen Codeausschnitt sind die Vergleichsprüfungen zwischen Gleitkommazahlen nicht so einfach, wie man erwarten könnte . Beim Umgang mit Gleitkomma-Vergleichen ist es wichtig, die Gleitkomma-Darstellung und die potenziellen Fallstricke zu verstehen.
Die Gleitkomma-Fallstricke
Das Problem mit Der Code liegt im Vergleich von Gleitkommazahlen. Gleitkommazahlen werden in einem Binärformat gespeichert, das eine endliche Anzahl von Bits verwendet, um sowohl den Betrag als auch den Exponenten darzustellen. Dies bedeutet, dass die Genauigkeit, mit der Gleitkommazahlen bestimmte Werte darstellen können, inhärente Einschränkungen aufweist, was zu Rundungsfehlern führt.
Im bereitgestellten Code sind die Variablen a und b beide als Gleitkommazahlen definiert. Beim Vergleich von a mit 0,7 stuft der Compiler den Float für den Vergleich auf ein Double hoch. Diese Typheraufstufung kann zu einem Verlust an Präzision führen, da die doppelte Darstellung von a möglicherweise nicht genau 0,7 entspricht. Darüber hinaus ist 0,5 eine exakte Potenz von 2, die im Gleitkommaformat präzise dargestellt werden kann.
Als Ergebnis ist der Vergleich a < 0,7 wird aufgrund der Umwandlung von a in ein Double und der ungenauen Darstellung von 0,7 als wahr ausgewertet. Dies erklärt die unerwartete Ausgabe von „1 ist richtig“ anstelle der erwarteten „0 ist richtig“.
Gewährleistung korrekter Vergleiche
Um solche Probleme zu vermeiden, gibt es zwei Mögliche Ansätze:
Das obige ist der detaillierte Inhalt vonWarum sind Gleitkommavergleiche ungenau und wie kann ich korrekte Ergebnisse sicherstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!