정수를 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과 같은 특수 상황을 메모리 값 자체로 구분할 수 있지만
정수형에는 그런 예약 비트 패턴이 없기 때문에 예외 처리가 발생하게 됩니다.
'개발, IT > C#' 카테고리의 다른 글
| [유니티 / C#] 비주얼 스튜디오 유용한 단축키 (0) | 2025.09.04 |
|---|---|
| [유니티 / C#] readonly와 const (0) | 2025.09.03 |
| [유니티 / C#] CLR(Common Language Runtime) 알아보기 (0) | 2025.09.03 |
| [유니티 / C#] C, C#과 C++의 차이점 (0) | 2025.09.03 |
| [유니티 / C#] 부동소수점의 원리 (0) | 2025.09.03 |