如何确定浮子应该放在哪个仓中?C++

How to determine what bin a float should be in? C++

本文关键字:C++ 何确定      更新时间:2023-10-16

我有一个浮动Float_t xbins[41]数组,它定义了40个仓,即浮动范围。例如,如果y > xbins[7] && !(y > xbins[8]),则y在仓7中。

在没有40 if语句的情况下,如何确定给定浮点值应属于哪个bin?

请用C++回答,因为我不会说其他语言。

如果数组已排序,则执行二进制搜索以找到正确的bin。您需要std::sort的组合(如果未排序),然后是类似std::lower_bound的组合来定位。您需要确保operator<对于Float_t得到了正确的实现。

事实证明,bin不是均匀间隔的,而是有整数边界的,最快的方法可能是使用一个(反向)查找表,该表显然有大约100个条目。对于较低的&更高的界限。

如果数组边界是用公式推导的,那么可以编写一个优于LUT方法的反公式。

对于一般情况,二进制搜索是一种方法——即使这样,也可以通过线性插值而不是将范围精确细分为一半来改进。与二进制搜索的O(logn)相比,速度(如果数据不是病态的)将是O(loglogn)。