假设我有三个数字。其中两个在它们之间形成一个范围。最后一个数字,我想检查它是否在该范围内。这是一个简单的警告:定义范围开始和结束的数字可能大于或小于另一个。这是针对我正在努力提高其性能的物理算法,所以我也想避免使用条件语句。
double inRange(double point, double rangeStart, double rangeEnd){
// returns true if the 'point' lies within the range
// the 'range' is every number between 'rangeStart' and 'rangeEnd'
// rangeStart can be greater than or less than rangeEnd
// conditional branches should be avoided
return ?; // return values [0.0 - 1.0] are considered 'in range'
}
是否有一个数学方程式可以在不使用条件逻辑的情况下完成此操作?
编辑:
它返回 double 而不是 bool 的原因是因为我也需要知道比率;0.0 最接近一个边缘,而 1.0 最接近另一边缘。
我原来的算法是这样的:
double inRange(double point, double rangeStart, double rangeEnd){
if(rangeStart > rangeEnd){
double temp = rangeStart;
rangeStart = rangeEnd;
rangeEnd = temp;
}
return (point - rangeStart) / (rangeEnd - rangeStart);
}
我的分析器显示程序运行的大约 16% 的时间都花在了这个函数上,并启用了优化。它经常被调用。不确定条件语句是否完全归咎于,但我想尝试一个没有的函数,看看。