C float 비교 기능은 언제 사용합니까?
최신 C++ 표준에서는 다음과 같은 매크로를 발견했습니다.
bool isgreater(float x, float y);
bool isgreaterequal(float x, float y);
bool isless(float x, float y);
bool islessequal(float x, float y);
bool islessgreater(float x, float y);
bool isunordered(float x, float y);
이러한 매크로는 C(7.12.14 및 7.12.14)의 것입니다.
그렇다면, 왜 누군가가 연산자 대신에 이러한 매크로를 사용했을까요?이러한 매크로가 수행하는 특별한 작업이 있습니까(예: 확인).inf
) 또는 해당 연산자와 동일합니까?
C++ 예제:
#include <iostream>
#include <cmath>
int main()
{
float x=0.2;
float y=0.5;
std::cout << x << " < " << y << " : " << std::boolalpha << std::islessequal( x, y ) << std::endl;
std::cout << x << " < " << y << " : " << std::boolalpha << ( x <= y ) << std::endl;
}
관계 연산자와 달리 이러한 매크로는 실제로 부울 값만 반환하고 부동 소수점 예외를 발생시키지 않습니다.
간단히 말해서, 당신은 오직 당신이 처리하기만 하면 됩니다.true
/false
그리고 그 외 아무것도 없다.
참조:
오픈 그룹 설명(C 또는 C++ 표준은 아니지만 유닉스/리눅스 세계에서 관련성이 높고 거의 항상 표준과 유사함):
- http://pubs.opengroup.org/onlinepubs/009695399/functions/islessgreater.html
- http://pubs.opengroup.org/onlinepubs/009695399/functions/isgreater.html
- http://pubs.opengroup.org/onlinepubs/009695399/functions/isgreaterequal.html
- http://pubs.opengroup.org/onlinepubs/009695399/functions/isless.html
- http://pubs.opengroup.org/onlinepubs/009695399/functions/islessequal.html
- http://pubs.opengroup.org/onlinepubs/009695399/functions/islessgreater.html
- http://pubs.opengroup.org/onlinepubs/009695399/functions/isunordered.html
C++ 표준:
C 라이브러리 [c.math]:
분류/비교 기능은 C 표준의 7.12.3, 분류 매크로 및 7.12.14, 비교 매크로에 정의된 이름을 가진 C 매크로와 동일하게 작동합니다.다음과 같이 세 가지 부동 소수점 유형에 대해 각 함수가 오버로드됩니다 [...]
C 표준:
7.12.14 비교 매크로
[...] 순서가 지정된 숫자 값 쌍에 대해 관계 중 하나(작은 것, 큰 것, 같은 것)가 정확하게 참입니다.관계 연산자는 인수 값이 NaN인 경우 ''잘못된'' 부동 소수점 예외를 발생시킬 수 있습니다.NaN과 숫자 값 또는 두 NaN의 경우 순서가 지정되지 않은 관계만 참입니다.다음 하위 절은 관계 연산자의 조용한(부동점 예외 발생) 버전인 매크로와 ''비활성''부동점 예외를 겪지 않고 NaN을 설명하는 효율적인 코드 작성을 용이하게 하는 기타 비교 매크로를 제공합니다.이 하위 절의 시놉스에서 실제 부동은 인수가 실제 부동 유형의 표현이어야 함을 나타냅니다.
isgreater
등은 C99에서 C++11로 통합되었습니다.다음과 같은 경우 잘못된 부동 소수점 예외를 발생시키지 않도록 정의됩니다.x
및/는y
신호를 보내고 있습니다.NaN
가치.
제시된 근거는 다음과 같습니다.
이 매크로는 관계 연산자의 조용한(부동점 제외 상승) 버전입니다.유효하지 않은 부동 소수점 예외를 겪지 않고 NaN을 설명하는 효율적인 코드를 쉽게 작성할 수 있습니다.
행 인 매 값 숫에 있는 값NaN
; 항상동함일;;NaN
은 값 다 포 을 모 값 거 짓 비 교 과 든을 포함한 다른 합니다.NaN
모든 관계형 연산자 및 새 매크로 아래의 값.
언급URL : https://stackoverflow.com/questions/11826314/when-to-use-c-float-comparison-functions
'programing' 카테고리의 다른 글
jQuery를 사용하여 리디렉션을 따르도록 Ajax 요청을 방지하는 방법 (0) | 2023.07.31 |
---|---|
페이지 새로 고침 시 선택한 부트스트랩 탭을 유지하려면 어떻게 해야 합니까? (0) | 2023.07.31 |
PHP의 메모리 제한을 2GB 이상으로 늘리는 방법은 무엇입니까? (0) | 2023.07.31 |
구성 요소를 사용하지 않고 angular2 경로에서 외부 URL로 리디렉션하는 방법은 무엇입니까? (0) | 2023.07.31 |
파이썬에서 numpy 유형을 식별하는 방법은 무엇입니까? (0) | 2023.07.31 |