Vergleiche Gleitkommawerte mit Präzisionsschutz
Floating-Punkt-Vergleich stellt eine Herausforderung aus, die aufgrund des Präzisionsverlusts eine Herausforderung darstellt. Einfach Doppel oder Schwimmkörper mit == ist unzuverlässig.
epsilon-basierte Vergleich
Ein Ansatz beinhalten die Verwendung eines Epsilon (ε) -Hresholds, um den Präzisionsverlust zu berücksichtigen:
bool CompareDoubles2(double A, double B) { double diff = A - B; return (diffDieser Ansatz kann jedoch ineffizient sein.
kontextabhängige Überlegungen
Die Wahl der Vergleichsmethode hängt vom Kontext und den erwarteten Werten ab. Betrachten Sie die folgenden potenziellen Fallstricke:
std :: numeric_limits
verwenden, um Doppelwerte zu halten, um ganzzahlige Werte zu halten, um korrekte Arithmetik zu führen, so lange, wie es außerhalb der Reichweite der Reichweite der Reichweite einer Integer avoiided sind. Zum Beispiel wird 4.0/2.0 1.0 1.0 entsprechen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3