만약 소수 두 개가 주어진다고 하자.
소수는 각각 반드시 소수점 아래 셋째 자리까지 주어진다.
예를 들어 5343.212와 3894.139 같은 식이다.
두 소수의 합을 구하려고 한다.
이런 문제를 머리로 푼다면 굉장히 쉽다.
그러나 만약 프로그래밍으로 푼다면 조금 얘기가 달라진다.
프로그래밍 언어에는 C나 C++로 제한한다.
(꼭 프로그램을 짜야하는 문제가 아니므로 큰 상관은 없다. 그러나 파이썬은 정확도가 높기 때문에 제외했다.)
#include
using namespace std;
int main(void)
{
double var1, var2;
cin >> var1 >> var2;
cout << var1 + var2;
return 0;
}
이런 식으로 짰다고 하자.
코드는 C++ 기준이며, cin이 있는 줄은 var1과 var2를 입력받는다는 뜻이며 cout이 있는 줄은 var1 + var2를 출력한다는 뜻이다.
또 double은 단순히 소수형 자료이며, float와 기능이 거의 같다.
그런데 저렇게 했을 때 안되는 경우가 간혹 있다.
이것이 바로 소수점 오차인데, 소수를 소수로(소수형 자료로) 입력받았을 때 오차가 생기는 것을 말한다.
예를 들어 444.444 를 입력했는데 작은 오차가 생겨 444.443999999 이런 식으로 저장되는 일이다.
만약 이런 오차가 생긴다면 두 소수의 합을 정확하게 더하는데 어려움이 생긴다.
따라서 이 문제를 해결하는 방안을 제안하는 것이 이 문제의 목적이다.
단 C와 C++은 정수로 입력받을 경우 오차가 없다고 가정한다.
즉, 만약 444를 입력받았는데 443이 저장되는 경우는 없다고 가정한다.
다른 말로 정수는 정확하다라는 뜻이다.
만약 코드를 짤 수 있다면 코드도 짜보자.
코드를 짤 경우 위 예시 코드와 같이 콘솔에서 입/출력을 받는 형태로 짜면 된다.
C/C++을 모르지만 파이썬 등 다른 언어를 할 수 있다면 그 언어를 이용해 짜보자.
문제에서 파이썬을 제외한 이유는 단순히 파이썬의 고성능때문이며 파이썬을 이용해서 짜면 안된다는 의미는 아니다.
만약 그럴 수 없다면, 어떤 원리로 두 소수의 합을 구할지 서술해보자.
좋아요
0
글쎄요
0
어려워요
0