나는 하한값과 상한값으로 얻은 범위에 대해 각각 테스트하기 위해 여러 개의 숫자 (적어도 3 개)를 가지고 있습니다 (나는 lower <= upper
조건이 항상 만족). 이제조건에서 복수 a <= b <= c를 테스트하는 가장 효율적인 방법
낮은 ... 1 N]가, X [1 ... N]와 위 [1 ... N] 여기 내 목표는 내가 ...
성능을 최적화하고자하는 내가 this other Q&A here on StackOverflow에보고 한 후, 나는lower[n] <= x[n] && x[n] <= upper[n]
나는이 기회에 자바 스크립트와 함께 갈 필요가있는 "고전"에 비해
(unsigned)(x[n]-lower[n]) <= (upper[n]-lower[n])
형태
으로 갈 수 알고
, 그리고 내가 같은 것을 얻을 수 있다는 것을 안다. 이 언어 사용에 "트릭"
또는 내가 두 번째 방법은 너무 성능에 나쁜 영향을 미칠 것이라고 확신 해요 JavaScript Uint32Array object
를 사용함으로써 제외 출발시에만 첫 번째 고려 만하면됩니다.
// Example 1
function everything_is_in_range(lower, x, upper) {
return (((x[0]-lower[0]) >>> 0) <= (upper[0]-lower[0]) &&
((x[1]-lower[1]) >>> 0) <= (upper[1]-lower[1]) &&
...
((x[n-1]-lower[n-1]) >>> 0) <= (upper[n-1]-lower[n-1]));
}
내가 1,363,210
또는를 할 수있는 :
// Example 2
function everything_is_in_range(lower, x, upper) {
if (((x[0]-lower[0]) >>> 0) > (upper[0]-lower[0])) return false;
if (((x[1]-lower[1]) >>> 0) > (upper[1]-lower[1])) return false;
...
return (((x[n-1]-lower[n-1]) >>> 0) <= (upper[n-1]-lower[n-1]));
}
내 질문
은 : 내가 할 목적으로 "고전"lower[n] <= x[n] && x[n] <= upper[n]
형태로 유지되어야 있도록
가 서명되지 않은 이동이 일반적인 성능에하지 편리 할 것 ?
내 첫 번째 답변에 대한 답변이 '아니오'인 경우 가장 효율적인 방법은 무엇입니까? 그러나 더 중요한 사실은 당신이 어쩌면 당신이 제안 할 수있는 더 나은 것을 아십니까?
P.S.
// Loop example
function everything_is_in_range(lower, x, upper) {
for (i=0; i<n; ++i) if (((x[i]-lower[i]) >>> 0) > (upper[i]-lower[i])) return false;
return true;
}
하지만
그것은 나를 더 적은 코드를 작성시키는 경우에만 편리 할 것입니다하지만이 두 번째 코드 접근 방식에 뭔가 매우 아날로그입니다 : 나는 다음과 같은 방법으로 for 루프와 함께 할 수있는 알고 결국, 안돼?
모든 값이 하나의 분리 된 매개 변수로 전달 될 수 있기 때문에이 양식을 사용하고 싶지 않습니다 (실제 사례 인 3 또는 4 숫자 + 바운드 범위 변수 집합 그리고 나는 이것을 바꿀 수 없다.) (이 예제에서와 같이) 값의 배열이 아니다.
Javascript에는 부호없는 숫자 개념이 없으므로 특정 트릭을 활용할 수 없습니다. – Hamms
function withinRange (num, begin, end) {if (num> = begin && num) <= end) {true를 반환합니다. } else {return false; }}' – PHPglue
을 "unsigned"로 설정하면 추가 변환 단계로 인해 약간 느려질 수 있습니다. https://stackoverflow.com/questions/14890994/javascript-c-style-type-cast-from-signed- to-unsigned하지만 내 생각에 함수 호출 자체가 비교보다 큰 오버 헤드를 갖습니다. – Slai