-1

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% を示しており、最適化が有効になっているこの関数で費やされています。かなり頻繁に呼ばれます。条件ステートメントが完全に原因かどうかはわかりませんが、条件ステートメントがない関数を試して確認したいと思います。

4

2 に答える 2