탐색시간의 블로그


처음에 이 문제를 접했을때


당연히 48÷2(12) 에서


나누기, 곱하기에서 먼저 나온것 부터 계산하면


24(12) = 288 이네. 단순하게 생각 했다.



그런데, 오늘 아침 신문에 보니깐

이대 수학과 출신 곽현화씨가 정답이 2라고 한다.


수학문제 48÷2(9+3)의 답이 2

곽현화의 설명에 따르면 2(9+3)은 곧 2에 12를 곱한 값과 등가 관계이므로 결과는 24이다. 따라서 문제는 48÷24로 나타낼 수 있고 답은 2가 된다. 다시 말해 문제에서 곱하기가 생략돼 있어 2(9+3)을 한 덩어리로 봐야 한다는 것.

48÷2*(9+3)의 답은 48을 2로 나눈 값인 24에 12를 곱해야 하므로 288이다. 이 문제와 같이 곱하기 모습이 있으면 순차적으로 계산해서 288이 된다는 설명이다


     

그래서, 우리직원에게 물어 봤다.

48÷2(9+3) = 2, 48÷2*(9+3) = 288 이라고 하는데,

분배의 법칙, 치환의 법칙을 사용하면 그때 그때 2 또는 288이 다르게 나온다는 것이다.


일종의 이것도 유사하다.

1/3은 0.33333... 무한대이다.  1/3+1/3+1/3 = 1이다. 하지만, 0.33333...+0.3333...0.3333=0.999999

결국 1 = 0.99999...는 같아진다는..




그런데, 이때 우리 개발팀에서 하는 말이다.

컴퓨터는 분배법칙, 치환법칙 모른다. 다만, 가감승제에 의거한 연산자 우선의법칙에 따라 연산할 뿐이라고

 [ 컴퓨터 자료 구조의 개념 ]

# Infix 표기를 Prefix로 바꾸기

X = A / B * (C + D) + E

--> (X = ((A / B) * (C + D)) + E))   연산 우선순위에 따라 괄호로 묶는다.

--> = (X +( *( /(A B) + (C D)) E)    연산자를 해당 괄호의 앞으로 옮긴다.

--> = X + * / A B + C D E               괄호를 제거한다.


# Infix 표기를 Postfix로 바꾸기

X = A / B * (C + D) + E

--> (X = ((A / B) * (C + D)) + E))   연산 우선순위에 따라 괄호로 묶는다.

--> (X ((A B) / (C D) +) * E) +)=    연산자를 해당 괄호의 앞으로 옮긴다.

--> X A B / C D + * E + =               괄호를 제거한다.


# Postfix 표기를 Infix로 바꾸기

A B C - / D E F + * + 

--> ( (A (B C -) /) (D (E F +) *) +) 인접한 피연산자 두 개와 오른쪽의 연산자를 괄호로 묶는다.

--> ( (A / (B - C) + (D * (E + F) ) ) 연산자를 해당 피연산자의 가운데로 이동시킨다.

--> A / (B - C) + D * (E + F)          필요 없는 괄호를 제거한다.


# Prefix 표기를 Infix로 바꾸기

+ / A - B C * D + E F

--> (+ (/ A (- B C)) (* D (+ E F))) 인접한 피연산자 두 개와 왼쪽의 연산자를 괄호로 묶는다.

--> ((A / (B - C)) + (D * (E + F))) 연산자를 해당 피연산자의 가운데로 이동시킨다.

--> A / (B - C) + D * (E + F)        필요 없는 괄호를 제거한다. 



[ 연산자 우선순위 ]

연산자      연산자의 역할         수행 방향

---------------------------------------------------------------

()        우선 순위           Left -> Right
++        전위 증분           Left -> Right
--        전위 감량           Left -> Right
++        후위 증분           Right -> Left
--        후위 감량           Right -> Left
~         보수              Right -> Left
!          Not              Right -> Left
&         Address            Right -> Left
*        Indirection            Right -> Left
*         곱셈             Left -> Right
/         나눗셈            Left -> Right
%          나머지            Left -> Right
+         덧셈             Left -> Right
-         뺄셈             Left -> Right
<< , >>      Shift             Left -> Right
==,!=       비교              Left -> Right
& , ^,|       bit 연산자           Left -> Right
&& , ||      논리 연산자          Left -> Right
=         할당            Right -> Left
*=        곱셈 후 할당         Right -> Left
/=        나눗셈 후 할당        Right -> Left
+=        덧셈 후 할당         Right -> Left
-=        뺄셈 후 할당         Right -> Left
<< =, >>=     shift 후 할당           Right -> Left
& =, |=, ^=      bit 연산 후 할당        Right -> Left
,          comma          Left -> Right



 위에 표와 같이 컴퓨터는

48÷2(12) 의 의미는 48 연산자 2 괄호 12 괄호 하고 판단하다고, 따라서 결과는 2로 출력될 가능성이 높다고

간단히  말해 2(12) 사이에는 명확한 연산자가 없는 버그를 어떻게 처리하냐가 관건이라고..





제가 보유한 공학용 계산기로 테스트한 결과는 

Casio FX-570ES  48÷2(9+3), 48÷2*(9+3) 모두 288이 정답이라고 나타납니다.
Sharp EL-509V   48÷2(9+3)의 답은 2, 48÷2*(9+3)의 답은 288로 다르게 출력된다.

 

 

 

 


 


또한 엑셀의 경우 48÷2(9+3) 입력하면,

 


수식 오류가 나타면서 48÷2*(9+3) = 288로 출력해준다.

(개발팀에서 말한 연산자 버그를 표시하는 것 같은 모습니다.)


종합적인 내용으로 내가 판단하는 결론은

48÷2(9+3)의 답은 2   <- 사람들은 2(9+3)을 한묶음로 생각하는 경우가 많다.

48÷2*(9+3)의 답은 288이다.

다만, 사람이 볼때와 컴퓨터가 연산할때 가감승제 우선순위는 틀리다는 것이다.

Posted by 씨크타임

추천도서

목숨걸고일한다
카테고리 시/에세이 > 인물/자전적에세이 > 기업가
지은이 오카노 마사유키 (세종서적, 2003년)
상세보기


일본의 중소 하청업체 이지만, 미국 나사와 인텔 등에게서 까지

주문제작을 의뢰하는 금형, 프레스 전문 업제 내용입니다.

지금 우리는 너무 빠른 변화와 첨단 기기들로 둘러 쌓여져

금세 실증내고, 급한 성격을 갖게 됩니다.

뭐든 하나라도 열심히 남들이 따라 오지 못하는 기술이 있다면 성공할 수 있다는 내용입니다.

다들 알고 있지만, 실천하지 못하는 내용들이 많이 있어 새롭운 노하우를 전수해주는 책은 아닙니다.




목숨걸고 일한다 (오카노 마사유키, 세종서적)

[ 본문 중 일부를 발췌합니다. ] 

내가 하는 일을 다른 기업들이 못하는 이유는 뻔하다. 유행만 쫒아가다가 정작 소중한 기본적인 기술은 소홀히 해버렸기 때문이다. 그런 기업들은 당장은 돈도 잘 벌릴테니 즐거울 것이다. 하지만 기본 기술에 숨겨진 깊은 원리를 모른다면 수준 높은 창조는 불가능하다. ...  ... 진짜 멋쟁이는 유행을 창조한다. 돈만 뿌리며 손쉽게 남의 흉내만 내는 것은 가짜다.


유곽에 있던 누라들로부터는 "대접받았으면 네 번은 답을 하라"고 배웠던 것이 기억난다. 음식을 다 먹은 후에 "잘 먹었습니다.", 다음날에 "어제는 잘 먹었습니다", 다음주가 되면 "전 주에는 잘 먹었습니다", 다음달이 되면 "지난달에는 잘 먹었습니다."라고 네 번은 얘기하라고 누나들은 얘기해주었다. ... ... 고마워한다는 것은 곧 가치를 알아본다는 것이다. 정성과 피땀어린 노력을 알아준다는 것이다. 일도 마찬가지다. 일이 왜 중요한지, 무엇이 그 일의 핵심인지, 그리고 일하는 사람의 기분이 어떨지 아는 사람이 감사할 줄도 안다. 나는 그런 사람과 일을 해야 신명이 난다.




요즘도 참으로 혼란 스러운 세상입니다. 구제역이다. 조류독감, 그리고 일본 대지진에 이은 방사능 비 까지...

인간의 욕심이 너무 많아서 그런것 일까요. 우리 모두 초심으로 돌아가야 할 것 같습니다.

살아 있음에 감사함을 느끼고, 가족이 있음에 기쁘하고, 건강함에 즐거워 합시다.



Posted by 씨크타임