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

C# Single.IsInfinity() 메서드 완벽 정리: 무한대 판별 방법과 예제 코드

C#의 Single.IsInfinity() 메서드는 지정된 숫자가 양의 무한대(+∞) 또는 음의 무한대(-∞)로 평가되는지 여부를 나타내는 bool 값을 반환합니다. 값이 무한대이면 true, 유한한 값이면 false를 리턴합니다.

문법(Syntax)

public static bool IsInfinity (float val);

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

예제 1: 일반 값과 MaxValue 테스트

먼저 일반적인 float 값과 Single.MaxValue(float 타입이 표현할 수 있는 최댓값)를 각각 확인해 보겠습니다.

using System;
public class Demo {
    public static void Main(){
        float f1 = 19.3f;
        float f2 = Single.MaxValue;
        Console.WriteLine("Value1 = "+f1);
        Console.WriteLine("Hashcode for Value1 = "+f1.GetHashCode());
        Console.WriteLine("TypeCode for Value1 = "+f1.GetTypeCode());
        Console.WriteLine("Is Value1 value is positive or negative infinity? = "+Single.IsInfinity(f1));
        Console.WriteLine("\nValue2 = "+f2);
        Console.WriteLine("Hashcode for Value2 = "+f2.GetHashCode());
        Console.WriteLine("TypeCode for Value2 = "+f2.GetTypeCode());
        Console.WriteLine("Is Value2 value is positive or negative infinity? = "+Single.IsInfinity(f2));
    }
}

출력 결과

Value1 = 19.3
Hashcode for Value1 = 1100637798
TypeCode for Value1 = Single
Is Value1 value is positive or negative infinity? = False
Value2 = 3.402823E+38
Hashcode for Value2 = 2139095039
TypeCode for Value2 = Single
Is Value2 value is positive or negative infinity? = False

실행 결과를 보면 알 수 있듯이, 19.3f는 물론이고 float가 나타낼 수 있는 최댓값인 Single.MaxValue조차도 여전히 '유한한 값'이기 때문에 두 경우 모두 False가 반환됩니다.

예제 2: 0으로 나누기 연산 테스트

이번에는 0으로 나누는 연산의 결과와 Single.MinValue 값을 비교해 보겠습니다.

using System;
public class Demo {
    public static void Main(){
        float f1 = 5.0f/0.0f;
        float f2 = Single.MinValue;
        Console.WriteLine("Value1 = "+f1);
        Console.WriteLine("Hashcode for Value1 = "+f1.GetHashCode());
        Console.WriteLine("TypeCode for Value1 = "+f1.GetTypeCode());
        Console.WriteLine("Is Value1 value is positive or negative infinity? = "+Single.IsInfinity(f1));
        Console.WriteLine("\nValue2 = "+f2);
        Console.WriteLine("Hashcode for Value2 = "+f2.GetHashCode());
        Console.WriteLine("TypeCode for Value2 = "+f2.GetTypeCode());
        Console.WriteLine("Is Value2 value is positive or negative infinity? = "+Single.IsInfinity(f2));
    }
}

출력 결과

Value1 = ∞
Hashcode for Value1 = 2139095040
TypeCode for Value1 = Single
Is Value1 value is positive or negative infinity? = True
Value2 = -3.402823E+38
Hashcode for Value2 = -8388609
TypeCode for Value2 = Single
Is Value2 value is positive or negative infinity? = False

핵심 정리

  • 0으로 나누기: C#에서 부동 소수점 숫자를 0으로 나누면 예외가 발생하지 않고 무한대(∞)로 평가됩니다. 따라서 5.0f / 0.0f의 결과에 대해 IsInfinity()를 호출하면 True가 반환됩니다.
  • MinValue vs 무한대: Single.MinValue(약 -3.402823E+38)는 float가 표현할 수 있는 '최솟값'일 뿐, 수학적 의미의 무한대가 아니므로 False가 반환됩니다.
  • 활용 팁: 연산 오버플로우나 잘못된 나눗셈으로 인해 무한대 값이 발생했는지 런타임에 검사할 때 유용하게 사용할 수 있습니다.