C++에서 음수 무한대 정의 및 사용

Faiq Bilal 2023년10월12일
  1. C++에서 numeric_limits::infinity()의 음수 곱 사용
  2. cmath 라이브러리에서 INFINITY 정의 사용
C++에서 음수 무한대 정의 및 사용

이 문서에서는 C++에서 음의 무한대를 나타내는 문제에 대해 설명하고 몇 가지 가능한 솔루션을 나열합니다.

C++는 IEEE-754 표준을 사용하여 부동 소수점 숫자를 나타냅니다. 세 가지 부동 소수점 데이터 유형이 있습니다: float, doublelong double.

이러한 모든 변수 유형은 int 데이터 유형에 저장할 수 없는 숫자 값의 저장을 허용합니다.

Infinity는 C++에서 inf로 작성되며 양수 값을 null 값으로 나누거나 64비트에 저장할 수 있는 것보다 큰 숫자 값을 계산합니다.

무부호 또는 양의 부동 무한대 값은 cmathlimits와 같은 다양한 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() 메서드는 intbool과 같은 정수 데이터 유형이 본질적으로 유한하므로 비정수 데이터 유형에만 유효합니다.

위 코드의 출력은 다음과 같습니다.

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에 저장됩니다.

위의 출력에서 볼 수 있듯이 이 유효한 메서드는 변수에 음의 무한대 값을 할당합니다. 이 메서드를 추가로 테스트하기 위해 fnegInf가 함께 추가되어 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++에서 음의 무한대를 구현하는 데 안전하게 사용할 수 있습니다.