처음에 이 문제를 접했을때
당연히 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이다.
다만, 사람이 볼때와 컴퓨터가 연산할때 가감승제 우선순위는 틀리다는 것이다.
'도움되는상식' 카테고리의 다른 글
실업급여 모의계산 (수령액 알아보기) (0) | 2011.07.04 |
---|---|
자동차 이름의 유래, 자동차 이름의 숨은 뜻 (0) | 2011.05.06 |
디카 사진 삭제파일 복구(파일 복구 프로그램, Recuva) (0) | 2011.04.05 |
MAC address 용어 정리 (0) | 2010.11.25 |