본문으로 바로가기

[JavaScript] 부동소수점. 소수점 n자리 최대값 계산

부동소수점 표현하기

자바스크립트 뿐만이 아니라 C, C++, Java 등 컴퓨터 언어에서 소수점을 표현하는데 한계가 있다. 이 내용은 학창시절에 한번쯤은 들어보았을 내용이고, 아마 시험으로도 1문제 정도 접했을 수도 있을 것 같다. 그런데 소수점 n자리인 경우 안전하게 나타낼 수 있는 최대 값을 구해본 적이 있는가? 예를들어 소수점 3자리인 경우 나태낼 수 있는 최대 값이 무엇일까? 한번 알아보도록 하자.

■ 64비트

64비트 기준으로 계산해보자. 64비트은 경우 부호 1비트, 지수부 11비트, 가수부 52비트를 사용한다. 가수부의 비트 수를 기억하고 다음 내용으로 넘어가자.

■ 소수점 나타내기

소수점 1자리를 나타내려면 어떻게 하면 될까? 0.1을 표현할 수 있으면 된다. 그럼 2자리는 0.01, 3자리는 0.001을 나타낼 수 있으면 된다. 해당 개념을 이해하면 규칙을 파악할 수 있을 것이다. 10^-n 을 확인할 수 있다.

■ 소수점 n자리 최대값 확인하기

컴퓨터는 비트로 이루어져있다. 따라서 0.5씩 계속 곱하면 몇 비트를 사용해야 0.1을 표현할 수 있는 지 알 수 있다. 0.1을 표현하려면 몇 비트를 사용해야할까? 계산해보자.

위 결과를 확인해보면 3비트면 0.1을 표현할 수 있다. 그럼 52-3 = 49로 정수는 49비트를 사용할 수 있는 것이다. 즉 2^49에서는 0.1 ~ 0.9까지 모두 표현 가능하다. 그럼 소수점 3자리 최대값은 무엇일까? 이것도 동일하다.

위 결과를 확인해보면 0.001을 표현하기 위해 9비트가 필요하다. 그럼 52-9 = 43으로 43비트만큼 정수를 사용할 수 있다. 2^43인 경우 0.001 ~ 0.999까지 값을 표현할 수 있다.

■ 결과

소수점 1자리 최대값 : 0b1111111111111111111111111111111111111111111111111 + 0.9

소수점 3자리 최대값 : 0b1111111111111111111111111111111111111111111 + 0.999

위와 같은 공식으로 소수점 n자리로 나타낼 수 있는 최대값을 구하면 된다.

마지막

해당 내용은 틀릴 수도 있다는 것을 감안하여 봐주세요. 틀린 내용 및 오탈자 수정 요청 환영입니다.

반응형