[유니티 / C#] DivideByZero 예외처리

 

정수를 0으로 나누면?

프로그래밍에서 정수를 0으로 나누면 어떻게 될까요?

 

//변수 생성 및 초기화
int a = 8;
int b = 0;
int result = a / b;

Console.WriteLine(result);

=> 처리되지 않은 예외: System.DivideZeroException: 0으로 나누려 했습니다.

 

DivideByZero 예외처리가 뜨면서 에러가 발생합니다.

 

 

 

 

 

부동 소수점을 0으로 나누면?

그렇다면 부동 소수점을 0으로 나누는 경우에도 똑같이 예외처리가 발생할까요?

 

//변수 생성 및 초기화
float a = 0.0f;
float b = 0.0f;
float result = a / b;

Console.WriteLine(result);

=> NaN(숫자가 아님)
//변수 생성 및 초기화
float a = 8.0f;
float b = 0.0f;
float result = a / b;

Console.WriteLine(result);

=> ∞ (무한대)

 

정수를 0으로 나누었을 때와 달리 0.0f / 0.0f는 NaN, nf / 0.0f는 ∞가 출력되며 예외처리는 발생하지 않았습니다.

 

 

 

 

이유가 뭘까?

그렇다면 정수를 0으로 나눌 때는 DivideByZero라는 예외처리가 발생하고

부동 소수점을 0으로 나누었을 때는 예외처리가 발생하지 않는 이유는 뭘까요?

 

정수의 경우 연산 과정에서 사용할 수 있는 비트 패턴이 없지만 부동 소수점 숫자에는 이러한 경우 사용 가능한 NaN, 또는 Infinity(무한대)와 같은 값이 있습니다.

 

쉽게 말해 부동 소수점은 0, Infinity(무한대) NaN과 같은 특수 상황을 메모리 값 자체로 구분할 수 있지만

정수형에는 그런 예약 비트 패턴이 없기 때문에 예외 처리가 발생하게 됩니다.