c++ - 给定的 float 位于哪个段?

标签 c++ algorithm

<分区>

假设有 n(整数)个长度为 l( float )的连续段。即:

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

给定一个数字x( float ),我想写一个函数

int getSegmentId(double x, double l, int n)

它返回 x 所在的段的 id。

我想通过检查 x 是否位于每个区间内来在 O(1) 中执行此操作,而不是 O(log(n))。

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

附录

问题不在于像之前的 question 中那样该算法的特定实现基于浮点运算。我只是想问哪个最好 一个好的和稳健的方法来实现这个。

最佳答案

我没有看到问题,如果每个段都从 i*l 开始并在 (i+1)*l 结束,那么

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

应该足够了。

关于c++ - 给定的 float 位于哪个段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38106891/

相关文章:

c++ - 消除 "conversion to std::vector<int>::size_type to int"警告

algorithm - 使用递归查找数组中的第二大元素

c++ - 使用图像传输压缩和 boost 库 C++

c++ - 同时调用 ASIO 对象的 API 是否安全?

php - 人气算法

arrays - 零和最小子数组

algorithm - 图中的路线问题 : minimize average edge cost instead of total cost

jquery - 为二维区域中不同大小的非重叠四边形生成随机位置

c++ - 解锁对 STL vector::size 安全性的访问

android - Android中c语言将文件从sdcard位置复制到另一个位置