ABOUT

성능과 운영 안정성을 함께 끌어올리는 개발자입니다.

92% Positional Error Reduction
79% p95 Latency Improvement
90%+ Long Tasks Reduction

2022.02 · 한국장학재단

우수 멘티

한국장학재단 사회 리더 대학생 멘토링 IT

2022.10 · 동작구청

우수 인재상

동작구청 우수 SW 인재

2025.05 · (주) 그랩

프로그래밍 우수상

(주) 그랩 우수 프로그램 개발

2025.05 · AWSKRUG

AWS한국사용자모임 발표

AI agent 스크립트 튜닝 관련 발표

ComputerScience

Development

Engineering

Trouble Shooting

GUESTBOOK

첫 마음부터
함께 나누는 온기

방명록 작성하러 가기

SUBSCRIBE

최신소식을
편하게 만나보세요.

부동소수점

정의

부동은 "不動"이 아니라 "浮動" 입니다.

컴퓨터에서 실수를 표현할 때 사용하며, 소수점을 나타내기 위해 대표적으로 사용하는 표현 방식입니다.

아주 큰 수(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은 이진 부동 소수점에서 정확히 표현할 수 없어, 더할 때마다 근사값 오차가 누적됩니다.

이처럼 부동 소수점은 범위가 넓어 실수(소수점이 있는 수)를 표현할 때 효과적이지만 정밀도 손실 가능성이 있습니다.

 


 

728x90