세 개의 숫자가 있다고 가정합니다. 그 중 두 가지는 그들 사이의 범위를 형성합니다. 마지막 숫자, 그 범위 내에 있는지 확인하고 싶습니다. 범위의 시작과 끝을 정의하는 숫자는 다른 것보다 크거나 작을 수 있습니다. 이것은 성능 향상을 위해 노력하고있는 물리 알고리즘을위한 것이므로 조건문을 사용하지 않는 것이 좋습니다.숫자가 다른 두 숫자 사이에 떨어지는 지 확인하는 가장 간결한 방법은 무엇입니까?
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'
}
조건 논리를 사용하지 않고이를 수행 할 수식이 있습니까?
편집 :
가 대신 부울의 두 배를 반환 나도 비율을 알 필요가 있기 때문입니다 이유; 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 %가 활성화 최적화로,이 기능에 소요 보여줍니다. 그것은 꽤 자주 불린다. 조건문이 전적으로 책임이 있는지는 잘 모르겠지만 하나도 가지고 있지 않은 함수를 시험해보고 싶습니다.
왜 '이중'을 반환합니까? – Barry
조건문을 쓰면 속도가 느려지는 이유는 무엇입니까? –
배리 - 범위 내의 비율도 알아야합니다. 0.0은 rangeStart에 가장 가깝고 1.0은 rangeEnd에 가장 가깝습니다. –