티스토리 뷰

반응형
 

1008번: A/B

두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

[백준/python] 1000번 - A+B / 새싹

https://www.acmicpc.net/problem/1000 1000번: A+B 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net A,B = map(int,input().split()) print(A+B) python에서 사용자의 입력을 받는 방법은

sikaro.tistory.com

a,b = map(int,input().split())
print(a/b)

a와 b를 입력받아 a/b를 출력해주면 된다.

자세한 입력방법에 대한 설명은 위의 1000번 문제를 참고하자.

 

여기서 주의할 점이 있는데, 상대오차가  10^(-9) 이하이면 정답이라는 말이다.

10^(-9) 이하의 오차를 허용한다는 말은 꼭 소수 9번째 자리까지만 출력하라는 뜻이 아니다.

python은 기본적으로 일반 연산을 할 때 정말 컴퓨터의 한계 끝까지 연산한다. 이때 소수점 자리에 따라 쓸모있는 수와 쓸모 없는 수가 생기는데, 어느 자릿수까지 쓸모있는 수를 수치해석에서는 유효한 의미를 가지는 수라고 해서 유효숫자라고 한다.

 

예를 들어 지금 당장 자(ruler)를 들어 숫자를 본다고 해보자, 1cm를 3으로 나눈다고 할때, 0.3mm까지는 어느정도 눈에 보이니까 유효하다. 하지만 0.03mm라면 어떨까? 3 마이크로미터는? 3 나노미터는 사람이 구분할 수 있는가? 상황에 따라 다르지만, 어느정도 범위까지 내가 오차를 허용할 수 있는가에 따라 이 유효숫자가 정해진다.

 

그렇기에 오차를 결정하는 건 중요하다. 컴퓨터는 이런 판단을 내리지 못하니까. 

 

한마디로 이 문제에서는 '이 유효숫자를 포함한 수'와 '진짜 수'와의 '오차'를 10^(-9) 이하로 설정하라는 말로, 즉, 이 말대로라면 10^(-10) 이하로 출력해도 되고, 10^(-11) 이하로 출력해도 된다는 말이다. 한마디로 '오차'를 그 이하로 만들라는 말이 되는 것이다.

 

예를 들어 내가 생각한 수가 0.3이라면, 오차가 10^(-9) 이하일려면 오차는 0.3에 10^(-9)을 곱한 0.0000000003이하이면 된다.

하지만 진짜 수는 0.33333333333333이므로, 0.00000000033333333333333 이하의 오차를 낼 수 있도록 그냥 소숫점 아래 9자리 이하의 수까지 전부 출력해주면 되는 것이다.

 

잘 모르겠다면 오차의 개념에 대해서 수치해석을 공부하는 것을 추천한다. 이것은 거대한 시스템을 만들 때 매우 의미있는 소수점 처리 능력을 기를 수 있는 방법이 된다.

반응형