NaN과 Infinity에 대한 탐색

koreanhole·2021년 4월 30일
0

들어가는 말

JSON 객체는 NaN과 Infinity값을 담을 수 없다고 한다. 이 과정에서 NaN과 Infinity값이 어떤 특징을 갖고 있기에 JSON 객체에 담고 있는지 궁금해져서 NaN과 Infinity에 대한 간략한 정보를 찾아보았다.

IEEE 754는 실수 표현을 위한 부동소수점 표준을 정의한다. 실수 표현 뿐만 아니라 Infinity, NaN을 정의한다.

Infinity

무한대를 표함하는 산술 표현은 표현 가능한 숫자의 범위를 벗어난 값으로 정의된 무한값을 사용한다. 산술의 제한 케이스로 사용된다.

−∞ < representable numbers < +∞

NaN

NaN은 부동소수점 형식으로 인코딩된 기호화 항목이다. Not a Number를 가리키며 숫자가 아니라는 뜻이다. NaN은 다음과 같은 두가지 유형이 있다.

Signalling NaN

잘못된 연산의 예외의 신호를 알리는 NaN이다.

Quiet NaN

예외의 신호없이 거의 모든 산술 연산을 통해 전파되는 NaN이다.

NaN값의 생성

NaN은 다음과 같은 연산을 통해 만들어진다.

∞ − ∞, −∞ + ∞, 0 × ∞, 0 ÷ 0, ∞ ÷ ∞

Infinity와 NaN의 표현

두가지 형태의 NaN과 Infinity는 부동소수점 형식에 의해 표현되는데 그 형식(Single / Double Precision)에 따라 값이 달라진다.

  • Single Precision
    • Positive Infinity: 7F800000
    • Negative Infinity: FF800000
    • Signaling NaN: 7F8000001과 7FBFFFFF사이 또는 FF800001과 FFBFFFFF사이
    • Quiet NaN: 7FC00000과 7FFFFFFF사이 또는 FFC00000과 FFFFFFFF사이
  • Double Precision
    • Positive Infinity: 7FF0000000000000
    • Negative Infinity: FFF0000000000000
    • Signaling NaN: 7FF0000000000001과 7FF7FFFFFFFFFFFF사이 또는 FFF0000000000001과 FFF7FFFFFFFFFFFF사이
    • Quiet NaN: 7FF8000000000000과 7FFFFFFFFFFFFFFF사이 또는 FFF8000000000000과 FFFFFFFFFFFFFFFF사이

JavaScript의 Infinity와 NaN

그렇다면 JavaScript에서 Infinity와 NaN값을 다르는 방법에 대해 알아보자

Infinity

Infinity는 전역 스코프의 변수이며 초기값은 Number.POSITIVE_INFINITY이다. NaN과 마찬가지로 [[Writable]], [[Enumerate]], [[Configurable]] 의 설정값이 false이다.

어떤 숫자가 Infinity인지 확인하기 위해 isFinite() 을 사용하는 것이 간편하다.

NaN

자바스크립트에서 NaN은 전역 스코프의 변수이며 값의 설정과 쓰기가 불가능하다.

초기값은 Number.NaN과 같다. 하지만 NaN은 다른 모든 값과 비교할 때 같지 않다. 위에서 알아본 NaN의 부동소수점값을 보면 알 수 있다. 또한 NaN은 다른 NaN의 값과도 다르다.

NaN의 판별은 Number.isNaN()이나 isNaN()을 사용하는것이 간편하다. 또한 NaN만이 자기 자신과 다르다는 성질을 이용할 수도 있다.

참고자료

Inifinity and NaNs

IEEE Floating Point Standard from FOLDOC

Number.POSITIVE_INFINITY

0개의 댓글