늦은 프로그래밍 이야기
실수의 표현 방식 본문
실수의 표현 방식
- 실수를 표현하기 위한 방식
- 고정 소수점(fixed point) 방식
- 부동 소수점(floating point) 방식
고정 소수점(fixed point) 방식
- 정수부와 소수부로 나눈다.
* 정수부 : 소수점 이하의 수를 뺀 정수 부분.
* 소수부 : 대소수에서 소수점 오른쪽에 놓인 수의 부분.
- 소수부의 자릿수를 미리 정하여, 고정된 자릿수의 소수를 표현.
- 정수부와 소수부의 자릿수가 크지 않으므로, 표현할 수 있는 범위가 매우 적다.

부동 소수점(floating point) 방식
- 가수부와 지수부로 나눈다.
* 가수부 : 상용로그의 값에서 0과 같거나 0보다 크고 1보다 작은 소수.
* 지수부 : 부동 소수점 형태로 표현된 숫자에서, 2의 거듭제곱을 표시하는 부분.
수식 : ±(1.가수부)×2지수부-127
- 대부분의 시스템에서 부동 소수점 방식으로 실수를 표현하고 있다.
IEEE 부동 소수점 방식
- 부동 소수점 방식은 대부분 IEEE 754 표준을 따르고 있다.


부동 소수점 방식의 오차
- 부동 소수점 방식을 사용하면 고정 소수점 방식보다 훨씬 많은 범위까지 표현할 수 있지만 부동 소수점 방식에 의한 표현은 항상 오차가 존재한다.
- 오차는 위의 수식에 의해 발생한다.
- 표현할 수 있는 범위는 늘어나지만, 10진수를 정확하게 표현할 수 없다.
- 따라서 컴퓨터의 실수 표현 방법은 정확한 표현이 아닌 언제나 근사치를 표현한 것이다.
- 부동 소수점 방식이 실수를 표현할 때 발생할 수 있는 오차.
double num = 0.1;
for(int i = 0; i < 1000; i++) {
num += 0.1;
}
System.out.print(num);
// 100.09999999999859
- 0.1을 1000번 곱하면 100이 되어야 하는데, 위 코드에서는 100.09999999999859로 출력되고 있다.
- double형과 float형의 정밀도 차이
float num3 = 1.23456789f; // 1.2345679
double num4 = 1.23456789; // 1.23456789
- float 타입 : 소수 6자리까지는 정확하게 표현하나, 그 이상은 정확하지 표현하지 못한다.
- double 타입 : 소수 15자리까지 오차없이 표현할 수 있다.
'내일배움캠프 > Java 기초' 카테고리의 다른 글
| 연산자의 우선순위와 결합방향 (0) | 2022.11.17 |
|---|---|
| 타입 변환 (0) | 2022.11.17 |
| 기본 자료형의 메모리 크기와 데이터 표현 범위 (0) | 2022.11.17 |
| 컬렉션, 제네릭스 (0) | 2022.11.16 |
| 객체지향 (3) 추상클래스, 인터페이스 (0) | 2022.11.16 |