3 つの数字があるとします。それらのうちの 2 つがそれらの間に範囲を形成します。最後の数字、その範囲内かどうかを確認したい。これは簡単な注意点です: 範囲の開始と終了を定義する数値は、他の数値より大きくても小さくてもかまいません。これは、パフォーマンスの改善に取り組んでいる物理アルゴリズム用であるため、条件ステートメントの使用も避けたいと考えています。
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'
}
条件ロジックを使用せずに、これを達成する数式はありますか?
編集:
bool ではなく double を返す理由は、比率も知る必要があるためです。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% を示しており、最適化が有効になっているこの関数で費やされています。かなり頻繁に呼ばれます。条件ステートメントが完全に原因かどうかはわかりませんが、条件ステートメントがない関数を試して確認したいと思います。