1

ゼロの下限を取得する最も効率的な (最速の) 方法は何ですか?

Math.max(0, x) は機能し、x の負の値に対して 0 を返します。ただし、Math.* に関する私の経験では、多くの場合、より高速に実行するためのはるかにパフォーマンスの高いトリックが存在します。この場合、誰か知っていますか?

ビット単位のトリックは問題ありません。私は常に、これらの演算子の実際の用途を見つけるのが好きです。x が負の場合、false を返すものは何でも問題ありません。

編集明確にするために、xが0より大きい場合、その値が必要です。したがって、x < 0 を実行することはできません。これは、x ではなく、true を返すだけだからです。

4

3 に答える 3

2

Math.Max(x, y)基本的には例えばと同じですx > y ? x : yfalseが負の場合に返すxことも同様に簡単です。return x < 0 ? false : x

于 2012-07-02T04:59:30.653 に答える
2

要件の1つの方法は次のとおりです。

x > 0 && x

falsewhenxが 0 または負の場合に評価される式に問題がなければ、問題ありません。falsewhenが負の場合だけが必要な場合xは、次のことができます。

x >= 0 && x

例:

3 > 0 && 3;     // result: 3
-1 > 0 && -1;   // result: false
0 > 0 && 0;     // result: false

0 >= 0 && 0;    // result: 0
于 2012-07-02T05:08:06.113 に答える
1

min/maxのBitTwiddlingHacksセクションをチェックしてください。

これがCでの例です...

int x;  // we want to find the maximum of x and y
int y;   
int r;  // the result goes here 

r = x ^ ((x ^ y) & -(x < y)); 

JavaScriptに適応するのは簡単です...

var x, y, r;

r = x ^ ((x ^ y) & -(x < y));

jsFiddle

ただし、タイトなループ(ゲームループなど)Math.max()にいて、そのためにパフォーマンスが低下していない限り(そして、単純な3値インラインに相当するものでは必要なパフォーマンスが得られなかった場合)、このちょっとしたトリックは使用しません。コードを読んでいる人にはそれが何をしているのかは明らかではなくMath.max()、その名前は自己文書化されていますが(ほとんどのプログラマーにとって)、説明するためのコメントがほぼ確実に必要です。

于 2012-07-02T05:00:28.970 に答える