내가 보려고 만든 CS지식

스케일 팩터(scale factor)와 오버플로(overflow)

study note 2025. 8. 3. 18:46
반응형

❰오버플로우와 스케일 팩터❱

-오버플로우와 스케일 팩터에 대해 알아보겠습니다.

 

▶스케일팩터란? 

여기서, 설명하는 스케일 팩터(scale factor) 란 

고정소수점에서만 사용되는 개념으로 실수를 정수로 표현하기 위해 곱하는 기준 값이며, 이 값이 클수록 더 높은 정밀도로 수를 표현할 수 있습니다. 그러나 스케일 팩터가 커질수록 정수값이 빠르게 커지기 때문에, 비트로 표현할 수 있는 범위를 초과하는 오버플로우(overflow)가 발생할 위험도 그만큼 커집니다. 따라서, 고정소수점 시스템에서는 정밀도와 오버플로우 사이의 균형이 매우 중요합니다

스케일 팩터 의미 정밀도 단위 소수부 비트 수 설명 사용 예
2⁴ = 16 낮은 정밀도 1/16 ≈ 0.0625 4비트 정밀도보다
속도 우선
빠른 계산,
단순 센서
2⁶ = 64 보통 1/64 ≈ 0.0156 6비트 제한된 메모리 환경
2⁸ = 256 중간 1/256 ≈ 0.0039 8비트 일반적인 소수 표현 표준적으로 많이
사용(계산기)
2¹⁰ = 1024 정밀 1/1024 ≈ 0.00098 10비트 오차를 줄이고
싶을 때
오디오, 제어시스템
2¹² = 4096 고정밀 1/4096 ≈ 0.00024 12비트 정밀 제어,
고속 통신
2¹⁶ = 65536 매우 고정밀 1/65536 ≈ 0.000015 16비트 매우 작은 수 표현 금융/그래픽 연산

위의 표는 2의 거듭 제곱으로 스케일 팩터를 설명 했으나 꼭 2의 거듭제곱일 필요는 없습니다.

자주 사용하는게 2의 거듭 제곱이라고 하여 2의 거듭제곱으로 정리한 것 입니다.

스케일 팩터(예시) 설명 사용예
10 소수점 첫째 자리 정밀도 화폐 단위
100 소점 둘째 자리 정밀도 원화/달러
256 이진수 정렬, 연산 효율 좋음 표준적으로 많이 사용(계산기)
65536 매우 정밀, 16비트 고정소수점 금융/그래픽 연산

위 표처럼 정수이기만 하면 어떤 값도 사용 가능합니다.

근데 '왜 2의 거듭제곱을 자주 사용할까?'라는 의문을 가질 수 있으신데 그 이유는 아래표로 정리하겠습니다.

이유 설명
연산 효율 256, 1024처럼 2의 거듭제곱이면 비트 쉬프트(shift)로 빠르게 계산 가능합니다.
메모리 정렬 하드웨어 구조가 2진수 기반이라 정렬, 배치, 버스 처리 효율 높습니다.
고정폭 표현 비트 수 기준으로 범위 예측 쉬우며 오버플로 감지가 쉽습니다.
정밀도 관리
1/256, 1/1024 같은 균등한 분할 단위 사용이 가능합니다.

예외적으로 10진수 스케일을 쓰는 경우가 있는데

금융 시스템/ 통화 계산시 100의 스케일 팩터를 이용해 1234=12.34달러 같은 계산을 할 때 즉, 사용자에게 보이는 금액 단위와 일치하게 설계해야 할 때, 소수점 단위가 "자리 수 기준"일 때 (1.23처럼)사용 합니다.

 

▶오버 플로우 (overflow) 란?

오버플로 는 값이 변수나 비트 수가 표현 할 수 있는 최대 범위를 초과 할 때 발생하는 현상입니다.

고정소수점에서는 정수를 이용해 실수를 표현하므로, 정수 저장값이 범위를 넘으면 오버플로가 발생합니다.

예를 들어, 8비트 정수형은 -128 ~ 127까지만 표현 가능한데, 여기에 128 이상이 들어가면 오버플로입니다.

오버플로는 잘못된 계산 결과를 만들어내며, 프로그램 오류나 버그, 보안 취약점으로 이어질 수 있습니다.

고정소수점에서는 스케일 팩터가 클수록 오버플로가 더 쉽게 발생합니다.

그럼 이게 왜 위험한지는 아래 표를 통해 설명 드리겠습니다.

문제 설명
잘못된 계산 8bit 정수형으로 127 + 1이라는 결과를 얻으려 하면 -128처럼 엉뚱한 결과가 발생합니다.
무한 루프 반복문의 탈출 조건이 무너집니다.
보안 취약점 버퍼 오버플로(메모리의 경계를 넘어서 다른 데이터를 덮어쓰는 것)처럼 메모리 침범 가능성이 있습니다.
디버깅 난이도 실수(소수)로 인한 오버플로는 찾기 어렵습니다.

 

반응형