Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Single.IsNegativeInfinity() 메서드 완벽 정리 – 예제 코드와 실행 결과로 배우기

C#의 Single.IsNegativeInfinity() 메서드는 지정된 숫자가 음의 무한대(-∞)로 평가되는지 여부를 나타내는 부울 값을 반환합니다. 값이 음의 무한대이면 true, 그렇지 않으면 false를 반환합니다.

구문

메서드의 기본 구문은 다음과 같습니다.

public static bool IsNegativeInfinity (float val);

여기서 매개변수 val은 검사할 단정밀도(single-precision) 부동 소수점 숫자입니다.

참고 사항

float 형식에서는 0으로 나누더라도 정수형과 달리 예외가 발생하지 않습니다. 대신 양의 무한대()나 음의 무한대(-∞), 또는 0÷0처럼 정의할 수 없는 경우에는 NaN(Not a Number)이 결과로 반환됩니다. 이러한 특수한 상태를 확인할 때 IsNegativeInfinity() 메서드가 유용하게 사용됩니다.

예제 1

양의 무한대와 NaN(숫자 아님)이 각각 어떻게 판별되는지 확인해 보겠습니다.

using System;
public class Demo {
   public static void Main() {
      float f1 = 5.0f/0.0f;
      float f2 = 0.0f/0.0f;
      Console.WriteLine("값1 = "+f1);
      Console.WriteLine("값1의 해시코드 = "+f1.GetHashCode());
      Console.WriteLine("값1의 TypeCode = "+f1.GetTypeCode());
      Console.WriteLine("값1이 양의 무한대 또는 음의 무한대인가요? = "+Single.IsInfinity(f1));
      Console.WriteLine("값1이 NaN인가요? = "+Single.IsNaN(f1));
      Console.WriteLine("값1이 음의 무한대인가요? = "+Single.IsNegativeInfinity(f1));
      Console.WriteLine("\n값2 = "+f2);
      Console.WriteLine("값2의 해시코드 = "+f2.GetHashCode());
      Console.WriteLine("값2의 TypeCode = "+f2.GetTypeCode());
      Console.WriteLine("값2가 양의 무한대 또는 음의 무한대인가요? = "+Single.IsInfinity(f2));
      Console.WriteLine("값2가 NaN인가요? = "+Single.IsNaN(f2));
      Console.WriteLine("값2가 음의 무한대인가요? = "+Single.IsNegativeInfinity(f2));
   }
}

실행 결과

값1 = ∞
값1의 해시코드 = 2139095040
값1의 TypeCode = Single
값1이 양의 무한대 또는 음의 무한대인가요? = True
값1이 NaN인가요? = False
값1이 음의 무한대인가요? = False

값2 = NaN
값2의 해시코드 = -4194304
값2의 TypeCode = Single
값2가 양의 무한대 또는 음의 무한대인가요? = False
값2가 NaN인가요? = True
값2가 음의 무한대인가요? = False

결과 분석

f1 = 5.0f/0.0f는 양의 무한대()가 되므로 IsInfinity()True를 반환하지만, 음의 무한대가 아니기 때문에 IsNegativeInfinity()False를 반환합니다. 반면 f2 = 0.0f/0.0f는 정의되지 않은 연산이므로 NaN이 되며, 이 경우 무한대 여부 검사와 음의 무한대 검사 모두 False를 반환하고 IsNaN()True를 반환합니다.

예제 2

이번에는 실제로 음의 무한대가 되는 경우와, 매우 작지만 유한한 값(Single.MinValue)의 차이를 살펴보겠습니다.

using System;
public class Demo {
   public static void Main() {
      float f1 = -25.0f/0.0f;
      float f2 = Single.MinValue;
      Console.WriteLine("값1 = "+f1);
      Console.WriteLine("값1의 해시코드 = "+f1.GetHashCode());
      Console.WriteLine("값1의 TypeCode = "+f1.GetTypeCode());
      Console.WriteLine("값1이 양의 무한대 또는 음의 무한대인가요? = "+Single.IsInfinity(f1));
      Console.WriteLine("값1이 NaN인가요? = "+Single.IsNaN(f1));
      Console.WriteLine("값1이 음의 무한대인가요? = "+Single.IsNegativeInfinity(f1));
      Console.WriteLine("\n값2 = "+f2);
      Console.WriteLine("값2의 해시코드 = "+f2.GetHashCode());
      Console.WriteLine("값2의 TypeCode = "+f2.GetTypeCode());
      Console.WriteLine("값2가 양의 무한대 또는 음의 무한대인가요? = "+Single.IsInfinity(f2));
      Console.WriteLine("값2가 NaN인가요? = "+Single.IsNaN(f2));
      Console.WriteLine("값2가 음의 무한대인가요? = "+Single.IsNegativeInfinity(f2));
   }
}

실행 결과

값1 = -∞
값1의 해시코드 = -8388608
값1의 TypeCode = Single
값1이 양의 무한대 또는 음의 무한대인가요? = True
값1이 NaN인가요? = False
값1이 음의 무한대인가요? = True

값2 = -3.402823E+38
값2의 해시코드 = -8388609
값2의 TypeCode = Single
값2가 양의 무한대 또는 음의 무한대인가요? = False
값2가 NaN인가요? = False
값2가 음의 무한대인가요? = False

결과 분석

f1 = -25.0f/0.0f는 음수를 0으로 나눈 연산이므로 음의 무한대(-∞)가 되고, 따라서 IsNegativeInfinity()True를 반환합니다. 반면 Single.MinValue(약 -3.402823E+38)는 float 형식이 표현할 수 있는 가장 작은 유한한 값일 뿐 무한대가 아니므로, 모든 무한대 관련 검사에서 False가 반환됩니다. 즉, 값의 크기가 아무리 크더라도 표현 가능한 범위 내에 있다면 무한대로 간주되지 않습니다.