부동소수점에서 inf와 NaN을 표현하기

JellyPower·2024년 2월 15일
0

나만 몰랐던 C++

목록 보기
11/11
post-thumbnail

아래 코드의 결과값을 예측하시오

#include<cstdio>
#include<cmath>

using namespace std;

int main() {

	float e = 0.0f;
	float a = 0.0f / e;
	float b = 0.0f / e;
	float c = 1.0 / e;
	float d = 2.0 / e;
	printf("%d\n", a==b);
	printf("%d\n", c==d);

	return 0;
}
/**
정답:
0
1
-nan(ind)
inf
*/
  1. 0을 0으로 나누는건 불가능하기에 0/0은 NaN을 출력합니다.

    • NaN끼리는 비교가 불가능하기때문에 비교값의 결과는 0입니다.
  2. 0이 아닌 수를 0으로 나누는 것은 수학적으로는 불가능하지만 극한값을 가정한다면 무한대가 나올 수 있기에 무한대를 출력합니다.

    • inf끼리는 같은 inf면 같다고 판단하여 비교값의 결과는 1입니다.
    • 단, 1.0 / e- 1.0 / e 를 비교한다면 0이 나옵니다. float의 inf값은 +inf-inf를 구분합니다.

해당 값들을 바이너리로 살펴보면?

  1. NaN
    • HEX: ffc00000
    • Binary: 1 11111111 10000000000000000000000
  2. Inf
    • HEX: 7f800000
    • Binary: 0 11111111 00000000000000000000000
  3. -Inf
    • HEX: ff800000
    • Binary: 1 11111111 00000000000000000000000

레퍼런스

NaN과 Infinity에 대한 탐색

https://teus.me/677

profile
게임엔진코드싸개(진)

0개의 댓글