본문 바로가기

JAVA/DAY 05 _ 23.08.23

정밀도

 Q. 1개의 사과를 10piece로 나눴다 (흔하지 않은 case라 예제가 다 똑같다)

// 세밀한 연산을 하려면 double 연산을 최대한 피해야 한다!!

{
int apple = 1;
double piece = 0.1;
int number = 7;  // 7명이 1piece씩 먹었다

double result = apple - (number * piece);
System.out.println(result);  // 0.29999999999999993이 출력
}

// 컴퓨터가 실수를 이진 부동소수점으로 표현하는 과정에서
// 정확한 값을 표현하기 어려운 경우가 발생할 수 있다.
// 0.1과 같은 십진 소수는 이진 부동소수점으로 완벽하게 표현되지 않아 작은 차이가 발생할 수 있다.



A. 최대한 정수 연산을 하고, 마지막에 자릿수만큼 나누면 된다

int apple = 10;
int piece = 1;
int number = 7;

double result = (apple - (number * piece))/10.0;
// 10으로 나누면 0이나와 -> 정수연산이 돼서그래.
// 10.0으로 나눠야 하나라도 실수니까, 실수연산이 되겠지!
System.out.println(result);

'JAVA > DAY 05 _ 23.08.23' 카테고리의 다른 글

Operator 3. 부호 연산  (0) 2023.08.29
Operator 2. 문자열 연산  (0) 2023.08.29
Operator1. 산술 연산  (0) 2023.08.29
java 단축키  (0) 2023.08.29
memory  (1) 2023.08.29