В каком сегменте находится данное число? [Дубликат]

На этот вопрос уже есть ответ:

Математика с плавающей точкой нарушена? 28 ответов

Предположим, что естьn (целое число) непрерывных отрезков длиныl (плавающая точка). То есть

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

Дай номерx (с плавающей точкой) Я хочу определить идентификатор сегмента, внутри которого он находится.

Моя первая идея заключается в следующем:

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

Во всяком случае, это иногда не работает. Например, рассмотрим

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

Конечно, из-за конечной арифметики это не очень хорошо работает. Возможно, для надежной реализации требуются дополнительные проверки, но я действительно не знаю, как действовать дальше.

Вопрос в том как бы ты решил проблему "в каком сегменте находится данное число?"

Ответы на вопрос(5)

Ваш ответ на вопрос