Der Vergleich über == ist bei Fließkommazahlen nicht zu empfehlen, denn die gespeicherten Zahlen sind nicht exakt so wie sie theoretisch sein müssten. Das liegt ganz einfach an der Art, wie floats und doubles gespeichert werden. Da gibt es immer einer Abweichung, wodurch der direkte Vergleich nicht funktioniert. Wenn du mehr darüber wissen willst ist sicher https://en.wikipedia.org/wiki/IEEE_754 ein guter Einstieg. Umgehen kannst du das Problem auf vielen Wegen. Der einfachste wäre über die Toleranzen, wie du richtig festgestellt hast. Du vergleichst dann nicht die Zahlen direkt miteinander, sondern schaust ob die Differenz der Zahlen innerhalb einer Toleranz ist.
Du machst also statt
a == b
jetzt
(a - b) < TOLERANZ
Sagen wir mal du hast a=5 und b=5, durch die Ungenauigkeit ist aber tatsächlich b=4.999999999 und a=5.0000000000001 gespeichert. Wenn du deine Toleranzgrenze jetzt auf z.B. 0.0001 festlegst bekommst du über (a-b) < TOLERANZ trotzdem true, obwohl die Zahlen nicht exakt gleich sind.
Bei dir wäre das also
(c2 - (a2+b2)) < TOLERANZ
Wichtig: Beachte die Vorzeichen. Wenn a < b ist wird dein Ergebnis negativ, deine Bedingung wird dann immer true. Um auf Nummer sicher zu gehen solltest du von der Differenz den Betrag nehmen, um das Vorzeichen zu eliminieren. Hierfür gibt es die abs() Funktion aus Math.abs().
Math.abs(c2 - (a2+b2)) < TOLERANZ
die Toleranz kannst du frei wählen, basierend auf deiner gewünschten Genauigkeit.
Punkte: 160