정의
부동은 "不動"이 아니라 "浮動" 입니다.컴퓨터에서 실수를 표현할 때 사용하며, 소수점을 나타내기 위해 대표적으로 사용하는 표현 방식입니다.
아주 큰 수(3.0 × 10⁸)나 아주 작은 수(1.2 × 10⁻⁶) 그리고 소수점 이하의 수를 표기할때, 고정 소수점와 다르게 소수점의 위치가 유동적으로 가수 × 밑^지수 형태로 저장하는 방식입니다.
구조
컴퓨터는 2진수를 사용합니다.10진수 123.123이라는 수를 m x 10ⁿ 꼴로 나타내면, 1.23123 x 10²나 1231.23 x 10⁻¹으로 표현할 수 있습니다.
여기서 제곱으로 표현된 2와 -1은 지수이고, 1.23123, 1231.21는 가수입니다.
지수가 양수이면 소수점을 왼쪽으로 이동한 횟수이고, 음수이면 오른쪽으로 이동한 횟수라고 생각하면 됩니다.
컴퓨터는 2진수 체계이며, 2진수 체계에서는 m x 2ⁿ의 꼴로 나타냅니다.
오늘날 대부분의 컴퓨터는 2진수의 지수와 가수를 m x 2ⁿ 형태로 저장합니다.
이 방식은 IEEE754라는 국제 표준으로 정해져 있습니다.
비트 구성
부호, 지수, 가수로 이루어져 있습니다.📌 부호
0이면 양수, 1이면 음수를 의미합니다.
📌 지수
크기를 정하는 부분으로, 바이어스 값이 더해져 저장됩니다.
📌 가수
정밀도(유효숫자) 를 결정하며, 가수의 정수부에는 1로 통일된 정규화한 수가 저장됩니다.
1.xxx 형태를 띄어 컴퓨터는 xxx에 해당하는 소수부분만 저장합니다.
한계
정밀도 손실 가능성이 있습니다.// 소수와 실제 저장된 소수 간에 오차가 존재할 수 있습니다.
double a = 0.1;
double b = 0.2;
double c = 0.3;
if(a + b == c){
System.out.println('Equal');
}else{
System.out.println('Not Equal');
}
// result: 'Not Equal'
10진수를 2진수로 표현할 때, 10진수 소수와 2진수 수소의 표현이 다를 수 있습니다.
m x 10ⁿ 의 꼴을 1.m x 2ⁿ 형태로 표현할려면 무한한 소수점이 필요하게 될 수 있습니다.
이때 컴퓨터는 저장공간이 한정적이기 때문에 일부 소수점을 생략하게 되므로, 오착가 발생할 수 있습니다.

위쪽 그래프는 0.1을 100번 더한 값(주황색)과 이상적으로 정확해야 할 값(점선)을 비교한 표입니다.
겉보기에 거의 동일해 보이지만, 내부적으로는 미세한 오차가 존재합니다.
아래쪽 그래프는 각 단계에서 누적된 오차를 나타나며 0.1은 이진 부동 소수점에서 정확히 표현할 수 없어, 더할 때마다 근사값 오차가 누적됩니다.
이처럼 부동 소수점은 범위가 넓어 실수(소수점이 있는 수)를 표현할 때 효과적이지만 정밀도 손실 가능성이 있습니다.