In welchem Segment liegt eine bestimmte Zahl? [Duplikat

Diese Frage hat hier bereits eine Antwort:

Ist Gleitkomma-Mathematik kaputt? 28 answers

ngenommen, 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?"

Antworten auf die Frage(10)

Ihre Antwort auf die Frage