C++의 경우 타입이 T
이고 정수 또는 부동 소수점 유형이 있다고 가정 해 봅시다. y < x
에 대해 T
유형의 가장 큰 숫자 y
을 찾고 싶습니다. 정수와 부동 소수점 숫자 모두를 투명하게 처리하려면 솔루션을 템플릿으로 만들어야합니다. x
이 이미 T
에 표시 될 수있는 가장 작은 숫자 인 경우를 무시할 수 있습니다.가장 큰 번호 <x?
사용 가능 사례 :이 질문은 현지화 된 것으로 표시되어 더 일반적이라고 생각되는 사용 사례를 제공하고자합니다. 저는 OP의 원작자가 아닙니다.
struct lower_bound {
lower_bound(double value, bool open) : value(open? value+0.1 : value) {}
double value;
bool operator()(double x) { return x >= value; }
};
이 클래스는 개방 또는 폐쇄 될 수있는 하나 하한 시뮬레이션 :
이러한 구조를 고려한다. 물론, 실제 (말장난 의도) 삶에서 우리는 이것을 할 수 없습니다. S을 계산하는 것은 불가능합니다 (또는 최소한 까다 롭습니다). S 부동 소수점 숫자의 집합입니다 때 우리는 기본적으로 셀 수있는 집합으로 취급되기 때문에그러나, 이것은 매우 유효한 원칙이다; 그런 다음 열린 경계 또는 닫힌 경계와 같은 것이 없습니다. 즉,> =는 lower_bound 클래스에서 수행되는 것과 같이 정의 될 수 있습니다.
코드 단순화를 위해 +0.1을 사용하여 열린 하한을 시뮬레이션했습니다. 물론, 부동 소수점 표현에서 값 < z < = value + 0.1 또는 값 + 0.1 == 값과 같은 값 z가있을 수 있으므로 0.1은 원가 값입니다.
struct lower_bound {
lower_bound(double value, bool open) : open(open), value(value) {}
bool open;
double value;
bool operator()(double x) { return (open ? x > value : x>=value); }
};
그러나,이 sizeof의 (LOWER_BOUND가), 큰 및 연산자로 덜 효율적이다() 필요 : 따라서 @ 브렛 - 헤일 대답은 매우 유용합니다 :)
당신은 또 다른 간단한 해결책에 대해 생각할 수 있습니다입니다 보다 복잡한 문장을 실행합니다. 첫 번째 구현은 실제로 효율적이며 구조가 아닌 이중으로 구현 될 수도 있습니다. 기술적으로, 두 번째 구현을 사용하는 유일한 이유는 이중이 연속적이라고 가정하기 때문입니다. 그렇지 않은 경우에는 예측 가능한 미래에 아무 것도 없을 것입니다.
유효한 사용 사례를 만들고 설명하고 원래 작성자에게 불쾌감을주지 않았기를 바랍니다.
는이 지점 유형을 부동 일 것입니다 무슨의 예를 들어 주실 수 있습니까? 그것은'y'의 가수가 1 비트 작고 지수가 같음을 의미합니까? – angelatlarge
나는 27.5k 사용자로부터 더 많은 것을 기대한다. –
너 .. 뭐하려고 했니? – Rapptz