❰오버플로우와 스케일 팩터❱
-오버플로우와 스케일 팩터에 대해 알아보겠습니다.
▶스케일팩터란?
여기서, 설명하는 스케일 팩터(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처럼 엉뚱한 결과가 발생합니다. |
무한 루프 | 반복문의 탈출 조건이 무너집니다. |
보안 취약점 | 버퍼 오버플로(메모리의 경계를 넘어서 다른 데이터를 덮어쓰는 것)처럼 메모리 침범 가능성이 있습니다. |
디버깅 난이도 | 실수(소수)로 인한 오버플로는 찾기 어렵습니다. |
'내가 보려고 만든 CS지식' 카테고리의 다른 글
연산자의 종류 (3) | 2025.08.15 |
---|---|
고정소수점과 부동소수점, 정규화,비정규화 (0) | 2025.08.03 |
비트단위 와 용량 (1) | 2025.08.02 |
비트연산(bitwise operation)과 비트 마스킹(bit Masking) (3) | 2025.08.02 |
진법과 진수 (1) | 2025.07.20 |