- Visual C++에서 NaN과 Inf의 사용
- 컴퓨터야그/컴퓨터 일반
- 2011. 9. 12. 00:46
double/float에서 NaN(Not-a-Number)과 Inf(Infinite)는 간단하게 쓸 수 있다고 생각했는데, 그리 간단하지만은 않아 포스팅.
1. NaN/Inf인지 판단
2. NaN/Inf 값 대입
1. NaN/Inf인지 판단
_isnan()과 _finite()라는 함수를 사용하면 된다.
그런데, 이게 (내 기대와 달리) math.h가 아닌, float.h에 정의되어 있는 게 함정.
게다가, 두 함수는 이름 지정 방식도 다르고, 개념도 다르다. 이거 대체 뭥미.
_isinfinite()나 _isfinite()가 아니라 _finite()로 이름 지은 네이밍 센스는 정말 뭥미...
그런데, 이 함수들은 간단하게 구현을 해볼 수도 있다.
_isnan()은
그런데, 이게 (내 기대와 달리) math.h가 아닌, float.h에 정의되어 있는 게 함정.
게다가, 두 함수는 이름 지정 방식도 다르고, 개념도 다르다. 이거 대체 뭥미.
_isinfinite()나 _isfinite()가 아니라 _finite()로 이름 지은 네이밍 센스는 정말 뭥미...
그런데, 이 함수들은 간단하게 구현을 해볼 수도 있다.
_isnan()은
BOOL bIsNan(double d)로 구현할 수 있으며, _finite()는
{ return (d)!=(d); }
BOOL bIsFinite(double d)로 구현할 수 있다.
{ return ((d+1)!=d) && (d==d); }
2. NaN/Inf 값 대입
이게 더 골때린다. 쿨 하게
NaN을 대입하려면 0/0.0으로 대입해야 된다. 즉,
따라서,
Inf도 비슷하게,
double d=NaN;과 같은 방식으로 대입할 수는 없다.
NaN을 대입하려면 0/0.0으로 대입해야 된다. 즉,
double d=0/0.0;과 같은 형식을 사용해야 되는데, 이게 또 이대로 쓰면 컴파일러가 오류를 뿜어낸다. 1
따라서,
double dZero=0.0;과 같이 복잡하게 써야 된다.
double d=0/dZero;
Inf도 비슷하게,
double dZero=0.0;과 같이 쓰면 된다.
double d=1/dZero;
- divide by zero [본문으로]
'컴퓨터야그 > 컴퓨터 일반' 카테고리의 다른 글
유명(?) 압축 알고리즘들의 간단한 성능 비교 (4) | 2011.09.15 |
---|---|
Modified Haar Wavelet 변환에 대한 간단한 고찰 (2) | 2011.09.15 |
Windows 7용 manifest 삽질기 (3) | 2010.12.17 |
멀고도 험했던 코딩용 글꼴 선택기 (3) | 2010.12.02 |
한글 풀어쓰기→모아쓰기를 통해 얻은 지식들 (5) | 2010.09.26 |
Recent comment