1.정밀도
float : 7자리 0.1234567xxxx (단정도 정밀도)
double : 15자리 0.123456789012345xxxxx... (배정도 정밀도)
3.14
3.141592 -> 더 정밀한 표현이다.
지수(E : 8) 가수(M : 23)
float [S][1][2][3] [4][5][6][7] [8][1][][] [][][][] [][][][] [][][][] [][][][] [][][][]
기저법(특정수) 127 + 3 == 130
지수(E : 11) 가수(M : 52)
double [S][1][2][3] [4][5][6][7] [8][9][10][11] [1][][][] [][][][] [][][][] [][][][] [][][][]
[][][][] [][][][] [][][][] [][][][] [][][][] [][][][] [][][][] [][][][]
S 부호 : 0이면 양수, 1이면 음수
E 지수 : 부호있는 정수
M 가수 : 실제값을 저장하는 부분
2. 실수형의 저장형식
실수형은 값은 [부동소수점] 형태로 저장한다.
└ +-M * 2^E 실수를 표현한 것
예) 10진소수 9.1234567 (유한소수)
2진소수 9 -> 1001
0..1234567 -> 000111111001101011011011...
1001.000111111001101011011011... : 오차가 있는 값으로 저장됨. (2진수로는 무한소수)
정규화 : 소수점 위치가 다르기 때문에 고정 해주는 작업
└ 1.XXX * 2^E
1.001000111111001101011011011... * 2^3
가수 M E
2진수로 표현했을때 무한 소수 & 자리수를 벗어나면 오차 범위가 생긴다.
BigDecimal (실무자는 오차 범위를 줄이기 위해 이 명령어 사용)
BigDecimal?
- BigDecimal은 Java 언어에서 숫자를 정밀하게 저장하고 표현할 수 있는 유일한 방법이다.
- 소수점을 저장할 수 있는 가장 크기가 큰 타입인 double은 소수점의 정밀도에 있어 한계가 있어 값이 유실될 수 있다.
- Java 언어에서 돈과 소수점을 다룬다면 BigDecimal은 선택이 아니라 필수이다.
- BigDecimal의 유일한 단점은 느린 속도와 기본 타입보다 조금 불편한 사용법 뿐이다.
'Backend > JAVA' 카테고리의 다른 글
래퍼 클래스(Wrapper Class) - java (0) | 2021.08.23 |
---|---|
형 변환 - java (0) | 2021.08.23 |
정수형의 오버플로우 - java (0) | 2021.08.23 |
음수, 실수 진법 변환 - java (0) | 2021.08.23 |
210819 java 수업 - day2 (0) | 2021.08.19 |