궁금증이 생긴 건 백준 1008번, 사칙연산 알고리즘의 나누기 문제에서였다. ▶ 문제 링크

허용되는 오차범위에 제한이 있는데, 절대오차와 상대오차라는 게 뭘까?
절대오차란 실제의 값과 측정한 값의 오차이다.
예를 들어 내 키의 실제 길이는 155cm인데, 측정했을 때 152cm로 나왔을 경우의 절대오차는 155(cm)-153(cm), 즉 2(cm)이다.
상대오차는 절대오차를 실제의 값으로 나눈 값이다. 백분율이나 천분율로도 표현한다.
2(cm)/155(cm) = 0.0129032258064516
여기에 100을 곱해 백분율(%)로 바꾸면 1.2%의 상대오차가 발생하게 되는 것이다.
아하! 이런 의미였구나.
개념은 이해했지만, 문제가 원하는 값의 조건은 절대오차나 상대오차가 10⁻⁹(0.000000001) 보다 작아야 했다.
여기서 함정! float은 4바이트로 오차범위를 10⁻⁹까지 줄일 수 없다. 10⁻⁷까지는 된다. 소숫점 7번째 자리까지다.
그러나 double은 8바이트로 오차범위가 10⁻¹⁵까지 가능하다. 그렇기에 자료형으로 double을 사용해야 한다.
그렇게 나온 풀이는...
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double A = sc.nextDouble();
double B = sc.nextDouble();
double C = A/B;
System.out.println(C);
}
}
코드 자체는 간단하게 풀이될지도 모르겠지만... 문제를 잘못 해석하지 않기 위해 이해해야 하는 부분들이 있었고, 모르는 개념들을 알게 되어서 좋았다.

덧붙여 이 문구 때문에 String.format("%.9f", C)로 처리하려 했는데, 유심히 읽어보니 억지로 소숫점 9번째 자리에서 절삭하거나 강제로 늘리는 건 아니어 보여서 패스했다.
이렇게 처리해도 정답은 되었지만....
풀이 후 QNA를 찾아본 결과, 출력되는 부분만 인지해 채점하기 때문이라고 한다.