고정소수점과 부동소수점의 차이점 정리

고정소수점은 소수점의 위치를 미리 정해 두고, 정수와 같은 비트열과 연산기로 소수를 다루는 방식입니다. 회로가 작고 전력도 적어서 DSP, 부동소수점 연산기가 없는 마이크로컨트롤러, AI 추론의 정수 연산에 사용됩니다. 부동소수점은 부호, 지수부, 가수로 수를 나타내고 지수부로 소수점의 위치를 움직이므로, 매우 넓은 범위의 값을 거의 일정한 상대 정밀도로 다룰 수 있습니다. 연산기는 커지지만 자릿수 맞춤을 신경 쓰지 않고 쓸 수 있어 범용 계산과 AI 학습의 표준이 되었습니다.

비교 항목고정소수점부동소수점
표현 방식정수 비트열에 정해 둔 스케일(2의 −n제곱)을 곱해 읽습니다. Q15 등으로 표기합니다부호, 지수부, 가수의 세 부분으로 (−1)^부호 × 1.가수 × 2^(지수 − 바이어스)로 나타냅니다. IEEE 754에서 규정
표현 범위(예)Q15(16비트)에서는 −1~1 − 2⁻¹⁵단정밀도(32비트)에서는 대략 10⁻³⁸~10³⁸. 비정규화 수로 0 근처까지 더 확장
정밀도간격이 일정(절대 오차가 일정). 작은 값일수록 상대 오차가 큽니다상대 정밀도가 거의 일정(단정밀도에서 약 7자리). 값이 클수록 간격도 큽니다
연산기정수 가산기와 곱셈기를 그대로 사용지수 비교, 가수 자릿수 맞춤, 정규화, 반올림 회로가 필요
회로 규모와 전력작음. 같은 비트 폭이라면 부동소수점보다 훨씬 적습니다큼. 같은 비트 폭의 정수 연산기보다 면적도 에너지도 몇 배 이상이 되는 경우가 많습니다
오버플로 처리2의 보수에서는 반대쪽 값으로 넘어갑니다(랩어라운드). 포화 연산이나 여유 비트(가드 비트)를 가진 누산기로 막습니다표현 가능한 최댓값을 넘으면 ±무한대가 됩니다. 0÷0 등은 NaN
스케일링프로그래머가 값의 범위를 추정하고 각 연산의 시프트와 자릿수 위치를 설계합니다지수부가 자동으로 조정하므로 거의 신경 쓰지 않아도 됩니다
결과의 재현성비트 단위로 같은 결과가 나오기 쉽습니다덧셈 순서에 따라 결과가 조금 달라집니다(결합 법칙이 성립하지 않음)
사용처DSP, 부동소수점 연산기가 없는 소형 마이크로컨트롤러, FPGA나 ASIC의 신호 처리, AI 추론의 정수 연산(INT8 등)PC와 서버의 범용 계산, 과학기술 계산(배정밀도), 그래픽스, AI 학습(FP32·BF16·FP16·FP8)

수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.

상황별 선택 기준

고정소수점
값의 범위를 미리 알고 있는 신호 처리를 작은 회로와 적은 전력으로 하고 싶을 때. 음성이나 통신의 필터, 모터 제어, FPGA 구현, 양자화한 AI 모델의 추론.
부동소수점
값의 범위가 넓거나 미리 알 수 없는 계산. 과학기술 계산, 물리 시뮬레이션, 그래픽스, AI 학습 등 개발 편의성과 수치 안정성을 우선하고 싶을 때.
함께 사용
AI에서는 학습을 부동소수점으로 하고, 추론에서는 스케일을 곱한 정수(INT8 등)로 양자화하여 고정소수점과 같은 정수 연산기로 계산하는 경우가 많아지고 있습니다.

자주 묻는 질문

고정소수점은 왜 회로가 작은가요?

소수점 위치가 정해져 있으므로 정수 가산기와 곱셈기를 그대로 쓸 수 있기 때문입니다. 부동소수점에서는 덧셈할 때마다 지수를 비교해 가수의 자릿수를 맞추고, 결과를 정규화해 반올림하는 회로가 필요하므로 면적과 전력이 커집니다.

고정소수점에서 오버플로가 일어나면 어떻게 되나요?

2의 보수 정수와 마찬가지로 최댓값을 넘으면 최솟값 쪽으로 넘어가, 큰 양수가 음수가 되는 것 같은 큰 오차가 됩니다. DSP에서는 최댓값이나 최솟값에 머무르게 하는 포화 연산이나 가드 비트를 가진 넓은 누산기로 이를 막습니다.

부동소수점이면 오차가 없나요?

아닙니다. 부동소수점도 비트 수가 유한하므로 0.1처럼 2진수로 정확히 나타낼 수 없는 값에는 반올림 오차가 있고, 자릿수 손실이나 정보 손실도 일어납니다. 표현 범위가 넓고 상대 정밀도가 거의 일정하다는 것이 장점입니다.

AI 추론에서 INT8을 쓰는 것은 고정소수점인가요?

개념은 비슷합니다. 부동소수점 값을 스케일로 나누어 INT8 정수로 만들고, 정수 곱셈-누산 연산을 한 뒤 마지막에 스케일을 곱해 되돌립니다. 고정소수점과의 차이는 스케일이 2의 거듭제곱에 한정되지 않고, 층이나 채널마다 정할 수 있다는 점입니다.

이해도 확인

소형 마이컴이나 DSP에서 부동소수점이 아니라 고정소수점 연산이 자주 사용되는 주된 이유는 무엇입니까?

  1. A정수 연산 회로로 계산할 수 있어 회로가 작고 소비 전력도 적기 때문
  2. B고정소수점이 부동소수점보다 항상 넓은 범위를 나타낼 수 있기 때문
  3. C고정소수점에서는 반올림 오차가 전혀 생기지 않기 때문
정답과 해설 보기

정답: A. 정수 연산 회로로 계산할 수 있어 회로가 작고 소비 전력도 적기 때문

고정소수점은 소수점의 위치를 정해 두기만 하고 내용은 정수이므로, 덧셈이나 곱셈을 정수 회로로 수행할 수 있습니다. 부동소수점 연산기처럼 지수를 맞추거나 정규화하는 회로가 필요 없어 칩의 면적과 소비 전력을 줄일 수 있으며, 저비용 마이컴이나 신호 처리용 DSP에서 유용하게 쓰입니다. 그 대신 표현 범위가 좁아 오버플로와 정밀도 부족에 주의하여 설계해야 합니다. 범위는 부동소수점이 더 넓고, 고정소수점에서도 반올림 오차는 생깁니다.

16비트 부호 있는 고정소수점의 Q15 형식(소수부 15비트)으로 나타낼 수 있는 값의 간격(분해능)과 범위의 조합으로 올바른 것은 무엇입니까?

  1. A간격 2⁻¹⁶, 범위 0~1
  2. B간격 2⁻¹⁵, 범위 −1~1 − 2⁻¹⁵
  3. C간격 2⁻¹⁵, 범위 −32768~32767
정답과 해설 보기

정답: B. 간격 2⁻¹⁵, 범위 −1~1 − 2⁻¹⁵

Q15는 16비트 중 1비트가 부호, 15비트가 소수부이며, 정수로 읽은 값을 2¹⁵ = 32768로 나눈 값을 나타냅니다. 정수의 범위 −32768~32767을 32768로 나누면 −1~32767/32768 = 1 − 2⁻¹⁵가 되고, 간격은 1/32768 = 2⁻¹⁵ ≈ 3.05 × 10⁻⁵입니다. 정확히 +1은 나타낼 수 없다는 점에 주의해야 합니다. −32768~32767은 소수점을 고려하지 않고 정수로 읽었을 때의 범위입니다. 음성 등의 신호 처리에서 자주 사용되는 형식입니다.

소수부 8비트의 고정소수점수끼리를 정수 곱셈기로 곱했을 때 결과의 처리로 올바른 것은 무엇입니까?

  1. A결과도 그대로 소수부 8비트 형식이 되므로 아무것도 하지 않아도 된다
  2. B결과의 소수부는 4비트가 되므로 왼쪽으로 4비트 이동한다
  3. C결과의 소수부는 16비트가 되므로 원래 형식으로 되돌리려면 오른쪽으로 8비트 이동한다
정답과 해설 보기

정답: C. 결과의 소수부는 16비트가 되므로 원래 형식으로 되돌리려면 오른쪽으로 8비트 이동한다

소수부 8비트의 수는 실제 값을 2⁸배 한 정수로 기록되어 있습니다. 둘을 곱하면 2⁸ × 2⁸ = 2¹⁶배 된 값이 되어 결과의 소수부는 16비트가 됩니다. 원래의 소수부 8비트 형식으로 되돌리려면 2⁸으로 나누는 것, 즉 오른쪽으로 8비트 이동하고 필요하면 반올림합니다. 곱셈 결과는 자릿수가 늘어나므로 중간에는 넓은 비트 폭으로 계산하는 것이 보통입니다. 덧셈이라면 소수부의 비트 수는 변하지 않지만, 곱셈에서는 더해집니다.

  1. IEEE 754 단정밀도(32비트) 부동소수점수에서 부호·지수부·가수에 할당되는 비트 수의 조합은 무엇입니까?
  2. bfloat16이 AI 학습에서 사용되는 주된 이유는 무엇입니까?
  3. AI 추론에서 가중치를 FP32에서 INT8로 변환(양자화)하는 주된 이점은 무엇입니까?

컴퓨터 산술 문제 풀기

주요 용어 설명

고정 소수점(Fixed-point)
소수점의 위치를 정해 두고 정수와 같은 비트열로 소수를 나타내는 방식. 정수 연산 회로로 계산할 수 있고 회로가 작고 소비 전력도 낮지만 표현 범위는 좁다. Q15처럼 소수부 비트 수로 나타내기도 한다.
IEEE 754
부동소수점 수의 표현 방식과 연산 규칙을 정한 국제 규격. 단정밀도(32비트)·배정밀도(64비트) 등의 형식, 반올림 방법, 무한대와 NaN 같은 특수값을 정하여 계산 결과가 컴퓨터에 관계없이 일치하도록 한다.
포화 연산(Saturating Arithmetic)
계산 결과가 표현 범위를 넘을 때 오버플로로 반대쪽 값으로 되돌아가지 않고 최댓값 또는 최솟값에 머무르게 하는 연산. 음성과 영상의 신호 처리에서 큰 오차를 막기 위해 사용된다.
bfloat16
부호 1비트, 지수 8비트, 가수 7비트의 16비트 부동소수점 형식. 지수가 FP32와 같아 표현 범위가 넓고, 정밀도는 낮지만 AI 학습에 쓰인다. FP16은 지수 5비트·가수 10비트로 정밀도는 높지만 범위가 좁다.
INT8
8비트 부호 있는 정수(−128~127). AI 추론에서 가중치와 활성화 값에 스케일을 곱해 INT8로 변환(양자화)하면 연산과 메모리가 크게 줄고 정수 소형 회로에서 고속으로 처리할 수 있다.

관련 비교