2012-07-02 2 views
1

0의 하한을 얻는 가장 효율적인 (가장 빠른) 방법은 무엇입니까?Javascript : 0의 하한을 얻는 가장 효율적인 방법은 무엇입니까?

Math.max (0, x)는 작동하며 x의 음수 값이 0이면 반환됩니다. 그러나 Math. *를 사용한 나의 경험은 더 빨리 수행하는 훨씬 더 뛰어난 트릭입니다. 이 경우 어떤 사람이라도 알고 있습니까?

비트 단위 트릭이 좋습니다. 나는 항상 그 연산자에 대한 실제 사용을 찾는 것을 좋아합니다. x가 음수이면 false를 반환하는 것도 괜찮습니다.

편집 분명히하기 위해 x가 0보다 큰 경우 그 값을 원합니다. 그래서 나는 단지 x< 0을 할 수 없습니다, 그것은 x가 아닌 사실 만 제공 할 것입니다.

+3

는 방법, 성능보다 훨씬 더 중요합니다. 다른 사람들이 지금부터 코드를 읽거나 (또는 ​​심지어 1 년 후에 다시 보았을 때) 코드를 읽으 려 할 때 대답으로 제안 된 약간의 twiddling 예제는 매우 읽기 쉽지 않습니다. – jfriend00

답변

2

한 가지 방법은 다음과 같습니다

x > 0 && x 

x가 0 또는 음수 때 false로 평가 식으로 확인됩니다 주어진. x 부정적인 때 그냥 false을 원하는 경우에, 당신은 할 수 있습니다 :

x >= 0 && x 

예 : 대부분의 경우, 가독성과 코드의 유지 보수에

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

0 >= 0 && 0; // result: 0 
2

Math.Max(x, y)은 기본적으로 예를 들어, x > y ? x : y. x이 음수 일 때 false을 반환하면 똑같이 간단해야합니다. return x < 0 ? false : x

1

최소/최대에서 Bit Twiddling Hacks 섹션을 확인하십시오.

여기 ... 자바 스크립트에 적응할 사소한

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)); 

...

var x, y, r; 

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

jsFiddle C에서의 예이다.

그러나 (게임 루프와 같은) 빡빡한 루프에 있고 Math.max()으로 인해 성능이 저하되고 (간단한 삼자 인라인으로 성능이 필요하지 않음) 않는 한, 이 비트 피딩 트릭. 코드를 읽는 사람은 누구에게도 명확하지 않으며, 설명을하기 위해서는 거의 확실하게 설명이 필요하며, 대부분의 프로그래머에게는 Math.max()이 자체 문서화됩니다. 당신의 요구 사항을

+0

이것은 아마도이 케이스를 마이크로 최적화하는 좋은 방법 일 수 있지만 대상 브라우저에서 프로파일 링을 실행하여 실제로이 코드를 코드에 혼란스럽게할만한 긍정적 인 효과가 있다는 것을 확신하는 것이 좋습니다. –

+0

@JaniHartikainen 정확히 마지막 단락을 확인하십시오. – alex

+0

알기는하지만 매우 사실입니다. : D – BrianFreud

관련 문제