给定浮点数所在的段

In which segment a given floating point number lies in?

本文关键字:浮点数      更新时间:2023-10-16

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 getSegmentId(double x, double l, int n)

返回x所在段的id。

我想通过检查x是否在每个区间内来在O(1)而不是O(log(n))内做到这一点。

我认为这是一个非常普遍和常见的问题,我想有一个解决方案。你能给我点提示吗?

附录

这个问题不是关于这个算法的特定实现,就像前面的问题基于浮点运算一样。我只是想问哪一个是最好的一个好的和健壮的方法来实现这个

我看不出问题,如果每个片段从i*l开始,在(i+1)*l结束,那么

int s = static_cast<int>(std::floor(x / l));
int getSegmentId(double x, double l, double n)
{
    if(x>=n*l){
        //cout>> "Not in any segments! ";
        return -1;
    else
        return (int) x/l ;
}