라벨이 IEEE 754인 게시물 표시

JavaScript와 IEEE 754

JavaScript는 표준에서 숫자 타입은 IEEE 754-2008, 64 bit format을 따른다고 명시돼있다. 따라서 숫자 타입의 연산도 IEEE 754-2008을 따를 거로 생각했다. 하지만 ECMAScript 명세에서 NaN이나 Infinity를 포함한 연산에 대해 다른 결과를 내도록 정의한다.그 대표적인 경우가 1∞과 -1∞이다. IEEE 754-2008는 지수를 계산하는 방법을 3가지 정의한다. 첫 번째는 pown으로 지수가 정수인 경우에 대해 정의돼있고, 두 번째 pow는 밑과 지수가 모든 실수인 경우 사용할 수 있도록 정의돼 있고, 마지막은 powr으로 밑이 0 이상의 실수인 경우에 대해서 정의돼 있다. 우선 첫 번째인 pown는 지수가 ∞가 되지 못하므로 관심 대상이 아니다. 다른 두 지수 함수인 pow와 powr은 1∞에 대해 다른 결과를 내도록 정의한다. pow는 1을 리턴하고, powr는 invalid operator exception을 발생하도록 정의했다. 사실 이는 양쪽 다 이상한 것은 아니다. limx→∞1x은 1에 수렴하지만 1∞ 자체는 부정이기 때문에 1인 경우와 invalid operator exception이 발생하는 경우 양쪽 모두 말이 되기 때문이다. 그렇다면 IEEE 754-2008은 -1∞를 어떻게 정의할까?이 경우 밑이 0보다 작으므로 pow만이 유효한 함수고, 이에 대해서 1을 리턴하도록 정의했다. limx→∞-1x는 발산하고, -1∞는 부정이기 때문에 이는 수학적으로 올바른 정의가 아니고, IEEE 754에서 어떻게 이렇게 정했는지는 모르겠다. 역사적인 이유이거나 이렇게 할 경우 구현이 편해지기 때문일 것인데 혹시 정확한 이유를 알고 있는 사람이 있으면 알려주기 바란다.ECMAScript에서는 1∞와 -1∞의 연산에 대해서 NaN을 리턴하도록 정의했다. 이는 ECMAScript는 1997년 만들어졌다. 즉, 아직 IEEE 754-2008이 나오기 전이었고 그 당시는 ∞가 지수인 것에 대해 어떻게 계산해야 하는…