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가 반환됩니다. 즉, 값의 크기가 아무리 크더라도 표현 가능한 범위 내에 있다면 무한대로 간주되지 않습니다.