고정 소수점 & 부동 소수점 그리고 자바

조현근·2022년 12월 13일
0
post-thumbnail

실수를 표현하는 방법인 고정 소수점부동 소수점 두 가지 방식에 대해 알아보고, 자바에서는 어떤 방법을 제공하는지 알아보자.

고정 소수점(Fixed Point)

소수점이 찍힐 위치를 미리 정해놓고 소수를 표현하는 방식

-3.141592
부호(+, -)를 나타내는 1비트, 정수를 나타내는 15비트(3), 실수를 나타내는 16비트로 이루어저 있음(0.141592)

장점: 실수를 정수부와 소수부로 표현해 단순하다.
단점: 표현의 범위가 너무 적어서 활용하기 힘들다.

부동 소수점(Floating Point)

실수를 가수부 + 지수부로 표현
가수: 실수의 실제값 표현
지수: 크기를 표현. 가수의 어디쯤에 소수점이 있는지 나타냄

부호(1비트) + 지수부(8비트) + 가수부(23비트)로 이루어져 있음

지수의 값에 따라 소수점이 움직이는 방식을 활용한 실수 표현 방법이다.

장점: 표현할 수 있는 수의 범위가 넓어진다.
단점: 오차가 발생할 수 있다.

자바에서의 실수(real number)

자바에서 제공하는 실수형 데이터 타입에는 floatdouble이 있다. 두 방식 모두 부동 소수점 방식을 사용함으로 오차가 발생한다.

double value1 = 12.23;
double value2 = 34.45;

value1 + value2;

value1 + value2는 실제론 46.68000000000001가 출력된다.
따라서 금융 관련 프로그램에선 BigDecimal이란 것을 사용해야 한다.

출처
https://madplay.github.io/post/the-need-for-bigdecimal-in-java
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Computer%20Architecture/%EA%B3%A0%EC%A0%95%20%EC%86%8C%EC%88%98%EC%A0%90%20%26%20%EB%B6%80%EB%8F%99%20%EC%86%8C%EC%88%98%EC%A0%90.md

profile
안녕하세요!

0개의 댓글