두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.
첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)
첫째 줄에 A/B를 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-9 이하이면 정답이다.
1 3 / 0.33333333333333333333333333333333
정답 코드
#include <iostream>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
cout.precision(10);
cout<<(double)a/b<<endl;
}
1번째 제출
#include <iostream>
using namespace std;
int main(){
int A,B;
float x;
cin>>A>>B;
x = A/B;
cout << x <<endl;
return 0;
}
출력 값 : 0
단순히 실수에 나눗셈 값을 저장하면 나눗셈 값일 나올 거라고 생각했다...
2번째 제출
#include <iostream>
using namespace std;
int main(){
int A,B;
cin>>A>>B;
cout << (float)A/B <<endl;
return 0;
}
출력값: 0.333333
A/B 결과를 다른 변수에 저장하지 않고 바로 출력했더니 원하는 형식으로 담겼지만 오차가 10^-9보다 커서 실패
3번째 제출
#include <iostream>
using namespace std;
int main(){
int A,B;
cin>>A>>B;
cout.precision(10); //출력값을 소수점 10자리로 하기 위해
cout << (float)A/B <<endl;
return 0;
}
출력값 : 0.3333333433
소수점 10자리로는 나왔지만 원하는 출력 값과 아주 조금 다르다
왜?!!
[https://www.simplilearn.com/tutorials/cpp-tutorial/cpp-double]
double이 float 보다 두배의 정밀도를 가지고 있다는 것!
앞으로도 문제에서 '상대오차가 10-9 이하이면 정답' 같은 조건이 주어질 땐 double을 사용할 것!