给定浮点数在哪个段中?

时间:2016-06-29 17:56:01

标签: c++ algorithm

假设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))。

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

附录

问题不在于此算法的特定实现,就像之前基于浮点运算的question一样。我只是问一下最好的 一个好的和强大的方式来实现它。

2 个答案:

答案 0 :(得分:2)

如果每个细分受众群从i*l开始,到(i+1)*l结束,则我看不到问题

int s = static_cast<int>(std::floor(x / l));

应该足够了。

答案 1 :(得分:1)

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