¿En qué segmento se encuentra un número dado? [duplicar

Esta pregunta ya tiene una respuesta aquí:

Las matemáticas de punto flotante están rota 28 respuestas

Supongamos tenern (entero) segmentos contiguos de longitudl (punto flotante). Es decir

Segment 0 = [0, l)
Segment 1 = [l, 2*l)
Segment 2 = [2*l, 3*l)
... 
Segment (n-1) = [(n-1)*l, n*l) 

Dado un númerox (coma flotante) Quiero determinar la identificación del segmento en el que se encuentra.

Mi primera idea es la siguiente:

int segmentId = (int) floor(x/l);

e todos modos, esto a veces no funciona. Por ejemplo, considere

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!!!

Por supuesto, debido a la aritmética finita, esto no funciona bien. Tal vez se requieren algunas comprobaciones adicionales para tener una implementación robusta, pero realmente no sé cómo continuar.

La pregunta es ¿cómo resolvería el problema "¿En qué segmento se encuentra un número dado?"

Respuestas a la pregunta(5)

Su respuesta a la pregunta