In welchem Segment liegt eine bestimmte Zahl? [Duplikat
Diese Frage hat hier bereits eine Antwort:
Ist Gleitkomma-Mathematik kaputt? 28 answersngenommen, Sie habenn
(Integer) zusammenhängende Segmente der Längel
(Gleitkomma). Das ist
Segment 0 = [0, l)
Segment 1 = [l, 2*l)
Segment 2 = [2*l, 3*l)
...
Segment (n-1) = [(n-1)*l, n*l)
Gegeben eine Nummerx
(Gleitkomma) Ich möchte die ID des Segments bestimmen, in dem es liegt.
Meine erste Idee ist die folgende:
int segmentId = (int) floor(x/l);
Anyway, das funktioniert manchmal nicht. Betrachten Sie zum Beispiel
double l = 1.1;
double x = 5.5;
int segmentId = (int) floor(x/l); //returns 5
double l = 1.1;
double x = 6.6;
int segmentId = (int) floor(x/l); //returns 5!!!
Natürlich funktioniert dies aufgrund endlicher Arithmetik nicht gut. Möglicherweise sind einige zusätzliche Überprüfungen erforderlich, um eine stabile Implementierung zu erhalten, aber ich weiß wirklich nicht, wie ich weiter vorgehen soll.
Die Frage ist Wie würden Sie das Problem lösen? "In welchem Segment liegt eine bestimmte Zahl?"