본문바로가기
함께 풀고 싶은 문제
창의력을 기를 수 있는 수학 문제 또는 퍼즐을 내는 곳입니다.
[창의 퍼즐] [아이디어] 두 소수의 합 구하기
원파 2020.10.22 09:28 조회 639

만약 소수 두 개가 주어진다고 하자.

소수는 각각 반드시 소수점 아래 셋째 자리까지 주어진다. 

예를 들어 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

  • 폴리매스 문제는 과학기술진흥기금 및 복권기금의 재원으로 운영되고, 과학기술정보통신부와 한국과학창의재단의 지원을 받아 수행된 성과물로 우리나라의 과학기술 발전과 사회적 가치 증진에 기여하고 있습니다.

  • ☎문의 02-6749-3911