Avatar ·

Vergleich von float und double in C++: Wie vermeide ich Fehler durch Genauigkeitsverlust?

Hallo zusammen. Ich bin ein C++-Anfänger und habe ein Problem beim Vergleich von Gleitkommazahlen. Ich schreibe ein Programm zur Simulation physikalischer Prozesse und muss überprüfen, ob zwei Zahlen vom Typ float oder double gleich sind.\n\nDas Problem ist, dass aufgrund von Rechenungenauigkeiten (z. B. 0.1 + 0.2 ist nicht gleich 0.3) ein direkter Vergleich mit `==` fast nie funktioniert:\n\n```cpp\n#include \nint main() {\n double a = 0.1 + 0.2;\n double b = 0.3;\n if (a == b) {\n std::cout << "Gleich" << std::endl;\n } else {\n std::cout << "Nicht gleich" << std::endl; // Dies wird ausgegeben\n }\n return 0;\n}\n```\n\nIch habe gelesen, dass man mit einem "Epsilon" (Toleranz) vergleichen soll, verstehe aber nicht, wie man diesen Wert richtig wählt. Zum Beispiel passt `1e-6` für manche Zahlen, aber für