Es ist richtig. Beachten Sie, dass Java nichts damit zu tun hat, das Problem liegt in der Fließkommamathematik in ANY Sprache.
Bei Problemen im Klassenzimmer kommt man oft damit durch, aber in der realen Welt wird das nicht funktionieren. Manchmal funktioniert es auch nicht im Klassenzimmer.
Ein Vorfall aus der Schulzeit, der lange zurückliegt. Der Lehrer eines Einführungskurses wies ein Problem für die Abschlussprüfung zu, das für viele der besseren Schüler ein echtes Problem darstellte - es funktionierte nicht und sie wussten nicht, warum. (Ich habe das als Laborassistent gesehen, ich war nicht in der Klasse.) Schließlich begannen einige, mich um Hilfe zu bitten, und nach einigem Nachforschen kam das Problem ans Licht: Sie waren nie über die inhärente Ungenauigkeit der Fließkommamathematik unterrichtet worden.
Es gab zwei grundsätzliche Herangehensweisen an dieses Problem, eine Brute-Force-Methode (die in diesem Fall zufällig funktionierte, da sie jedes Mal dieselben Fehler verursachte) und eine elegantere Methode (die verschiedene Fehler verursachte und nicht funktionierte.) Jeder, der die elegante Methode ausprobierte, stieß auf eine Mauer, ohne eine Ahnung zu haben, warum. Ich half einigen von ihnen und fügte einen Kommentar ein, in dem ich erklärte, warum das so war, und dass er sich bei Fragen an mich wenden sollte.
Natürlich erfahre ich im nächsten Semester von ihm, dass ich die gesamte Abteilung mit einem einfachen kleinen Programm in den Ruin getrieben habe:
10 X = 3000000
20 X = X + 1
30 If X < X + 1 goto 20
40 Print "X = X + 1"
Entgegen der Meinung aller Lehrer in der Abteilung, ist dies WILL terminieren. Der 3-Millionen-Seed ist einfach dazu da, dass er schneller beendet wird. (Falls Sie die Grundlagen nicht kennen: Es gibt hier keine Spielereien, sondern nur die Ausschöpfung der Genauigkeit von Fließkommazahlen).