1008. A/B 본문
문제링크 : https://www.acmicpc.net/problem/1008
간단한 문제지만 확실히 알아야하는 문제이다. Codeforces 라운드에서 많이 틀렸던 유형이기도 하다.
정수형의 수들은 알고리즘 문제를 해결하며 많이 다뤄보지만 소수점은 많이 다뤄보지 않는다. 그래서 확실하게 알아놓지 않으면 갑작스럽게 문제가 생겼을 때 당황하기 쉽다.
먼저, 오답이다.
- 소스 코드(오답) -
#include<iostream>using namespace std;int main(void) {float a, b;cin >> a >> b;float c = a / b;printf("%.9f", c);}
소수점을 계산하기 위해 float으로 입력을 받았다. 그리고 10^-9 이하의 오차만 허용하므로 .9f를 사용해 아홉번 째 자리까지 출력하였다.이제 결과를 보자.
?!
예상하지도 못한 4가 나왔다. 이러한 현상이 왜 발생하는가?
컴퓨터에서 10진수를 2진수로 바꾸면서 발생한 구조적인 문제이다.
이런 오차없이 실수를 사용하고 싶다면
float의 가수는 6~7자리
double의 가수는 15~16자리라는 것을 기억하자.
즉, 이 문제는 double을 이용해서 해결해야 한다.
자세한 설명은 아래 링크의 블로그를 확인하면 된다.
http://karmainearth.tistory.com/143
- 소스코드 -
#include<iostream>using namespace std;int main(void) {double a, b;scanf("%lf %lf", &a, &b);printf("%.9lf", a/b);}
'알고리즘 문제풀기 > 백준(Acmicpc)' 카테고리의 다른 글
14720. 우유 축제 (0) | 2019.01.15 |
---|---|
11727. 2×n 타일링 2 (0) | 2019.01.15 |
1967. 트리의 지름 (0) | 2019.01.14 |
3111. 검열 ( 오답노트 ) (0) | 2018.12.20 |
16510. Predictable Queue (0) | 2018.11.30 |
Comments