C++에서 음수 무한대 정의 및 사용
이 문서에서는 C++에서 음의 무한대를 나타내는 문제에 대해 설명하고 몇 가지 가능한 솔루션을 나열합니다.
C++는 IEEE-754 표준을 사용하여 부동 소수점 숫자를 나타냅니다. 세 가지 부동 소수점 데이터 유형이 있습니다: float
, double
및 long double
.
이러한 모든 변수 유형은 int
데이터 유형에 저장할 수 없는 숫자 값의 저장을 허용합니다.
Infinity는 C++에서 inf
로 작성되며 양수 값을 null 값으로 나누거나 64비트에 저장할 수 있는 것보다 큰 숫자 값을 계산합니다.
무부호 또는 양의 부동 무한대 값은 cmath
및 limits
와 같은 다양한 C++ 라이브러리에 정의되어 있지만 C++에는 음의 무한대에 대한 표준이 없습니다.
C++에서 음의 무한대를 나타내는 표준 방법이 없기 때문에 다음은 C++에서 음의 무한대를 나타내고 사용하는 몇 가지 신뢰할 수 있는 방법입니다.
C++에서 numeric_limits::infinity()
의 음수 곱 사용
C++에서 limits
라이브러리를 사용하십시오.
#include <iostream>
#include <limits>
using namespace std;
int main() {
float f = numeric_limits<float>::infinity();
float negInf = f * -1;
cout << "The value of f is = " << f << endl;
cout << "The value of negInf is = " << negInf << endl;
cout << "The value of f + negInf is = " << f + negInf << endl;
return 0;
}
위의 코드 조각에서 limits
라이브러리의 infinity
메서드는 양의 무한대 값을 반환합니다.
구문은 다음과 같습니다.
numeric_limits<T>::infinity()
위의 정의에서 각괄호 사이의 T
는 템플릿 클래스를 나타내며 실제 구현에서는 numeric_limits
메서드를 사용하려는 데이터 유형으로 대체됩니다. 위의 코드 스니펫에서는 float
데이터 유형이 사용되지만 double
도 유사하게 사용될 수 있습니다.
그러나 infinity()
메서드는 int
및 bool
과 같은 정수 데이터 유형이 본질적으로 유한하므로 비정수 데이터 유형에만 유효합니다.
위 코드의 출력은 다음과 같습니다.
The value of f is = inf
The value of negInf is = -inf
The value of f + negInf is = nan
위의 예에서 보듯이 infinity()
메서드를 사용하여 양의 무한대 값을 float
유형 변수 f
에 할당합니다. 그런 다음 f
에 -1을 곱하는 매우 간단하고 직관적인 접근 방식이 사용되며 그 결과는 negInf
라는 변수에 저장되며 음의 무한대 값은 negInf
에 저장됩니다.
위의 출력에서 볼 수 있듯이 이 유효한 메서드는 변수에 음의 무한대 값을 할당합니다. 이 메서드를 추가로 테스트하기 위해 f
와 negInf
가 함께 추가되어 nan
이 반환됩니다. 이는 Not-a-Number
를 나타내며 계산할 수 없는 값을 나타냅니다.
이 결과는 무한대 값에 대한 IEEE-754 규칙과 일치하므로 계산상 안전합니다.
cmath
라이브러리에서 INFINITY
정의 사용
cmath
라이브러리는 일반적인 수학 연산 및 변환을 처리하기 위한 많은 유용한 메서드와 함수가 있는 또 다른 C++ 라이브러리입니다.
라이브러리에는 INFINITY
라는 무한대 값의 정의도 포함되어 있으며 numeric_limits<T>::infinity()
와 거의 동일한 방식으로 사용할 수 있으며 float
및 모두에 직접 할당할 수 있습니다. 더블
데이터 유형.
이전 예제와 동일한 방법을 사용하여 부호 없는 무한대 또는 양의 무한대의 값을 음의 값으로 곱하면 음의 무한대 값으로 돌아갑니다.
#include <cmath>
#include <iostream>
using namespace std;
int main() {
long double f = INFINITY;
long double negInf = f * -1;
cout << "The value of f is = " << f << endl;
cout << "The value of negInf is = " << negInf << endl;
cout << "The value of f + negInf is = " << f + negInf << endl;
return 0;
}
위 코드의 출력은 다음과 같습니다.
The value of f is = inf
The value of negInf is = -inf
The value of f + negInf is = nan
알 수 있듯이 두 방법 모두 동일한 출력을 생성하며 둘 다 C++에서 음의 무한대를 구현하는 데 안전하게 사용할 수 있습니다.