맨위로가기

연산의 우선순위

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

연산의 우선순위는 수식에서 연산이 수행되는 순서를 정의하는 규칙이다. 일반적으로 괄호 안의 연산, 거듭제곱과 제곱근, 곱셈과 나눗셈, 덧셈과 뺄셈 순으로 계산하며, 괄호는 우선순위를 무효화할 수 있다. 나눗셈은 역수의 곱셈으로, 뺄셈은 음수의 덧셈으로 간주할 수 있다. 특수한 경우로 시그마 기호, 팩토리얼, 중첩된 지수 연산 등이 있으며, 혼합된 나눗셈과 곱셈, 단항 마이너스 부호, 직렬 지수 연산 등에서 모호성이 발생할 수 있다. 프로그래밍 언어는 각 언어마다 연산자 우선순위 규칙을 가지며, C 언어의 영향을 받은 많은 언어들이 이를 따른다. 연산 순서를 기억하기 위한 기억술(PEMDAS, BODMAS 등)이 존재하며, 계산기마다 연산 우선순위와 암묵적 곱셈의 해석이 다를 수 있다. 연산 순서는 대수 표기법의 발달과 함께 점진적으로 발전해 왔으며, 암묵적 곱셈의 우선순위에 대한 모호함은 아직 완전히 해결되지 않았다.

더 읽어볼만한 페이지

  • 기억술 - 오른손 법칙
    오른손 법칙은 3차원 공간에서 좌표축 방향, 회전 방향, 자기장 방향 등을 정의하는 규칙으로, 해밀턴이 처음 도입하고 기브스가 발전시켜 물리학, 공학 등에서 벡터 외적, 전자기학적 현상 설명에 활용된다.
  • 기억술 - 메모리아
    메모리아는 고대부터 중요하게 여겨진 기억, 기억술, 기억 시스템을 포괄하는 용어로, 수사학에서 연설 내용 암기 기술로 사용되었고 교육 시스템을 거쳐 현대의 전자 기억 시스템으로 발전해왔다.
  • 연산자 (프로그래밍) - 중위 표기법
    중위 표기법은 사람이 이해하기 쉬운 연산자 표기 방식이지만, 컴퓨터가 구문 분석하기 어렵고 연산 순서를 위해 괄호나 연산자 우선순위 규칙이 필요하다.
  • 연산자 (프로그래밍) - 형 변환
    형 변환은 프로그래밍에서 변수의 데이터 타입을 변경하는 것으로, 암시적 형 변환과 명시적 형 변환으로 나뉘며, 객체 지향 프로그래밍에서는 업캐스팅과 다운캐스팅이 발생하고, 각 언어는 고유한 규칙과 방법을 제공하며 잘못된 형 변환은 오류를 유발할 수 있다.
  • 대수학 - 다항식
    다항식은 변수, 계수, 상수항으로 구성되어 덧셈, 뺄셈, 곱셈, 거듭제곱 연산으로 결합된 항들의 유한한 합으로 표현되는 식이며, 대수 방정식 해를 구하는 데 중요하고 현대 수학에서 폭넓게 활용된다.
  • 대수학 - 상수
    상수는 변하지 않는 일정한 값을 가지는 수로, 함수에서 변수와 대비되며 수식 내에서 고정된 값을 갖고, 원주율, 자연로그의 밑, 허수 i 등이 대표적인 예시이다.
연산의 우선순위
개요
산술 연산 순서 다이어그램
산술 연산 순서 다이어그램
연산 순서
일반적인 순서괄호 → 지수 → 곱셈/나눗셈덧셈/뺄셈
약어PEMDAS
BODMAS
GEMDAS
MDAS
상세 내용
종류수학
목적수식의 모호성 제거
관련 개념결합 법칙, 분배 법칙, 교환 법칙

2. 표준적인 연산의 우선순위

일반적으로 사용하는 수식에서는 다음과 같은 우선순위를 따른다. 목록의 위쪽에 있는 연산일수록 우선순위가 높다.[2]

# 괄호 안의 수식

# 거듭제곱(지수) 및 제곱근(근호)

# 곱셈나눗셈

# 덧셈뺄셈

이는 수식을 계산할 때 가장 먼저 괄호 안의 내용을 계산해야 함을 의미한다. 괄호가 여러 겹일 경우 가장 안쪽의 괄호부터 계산한다. 괄호 안팎을 불문하고, 위 목록에서 더 높은 순위의 연산을 먼저 수행해야 한다. 같은 우선순위를 가진 연산들이 연속될 경우, 일반적으로 왼쪽에서 오른쪽 순서로 계산한다.

계산의 편의를 위해 나눗셈을 역수를 이용한 곱셈으로, 뺄셈을 음수를 이용한 덧셈으로 바꾸어 생각할 수 있다. 예를 들어, `3 ÷ 4`는 `3 × (1/4)`과 같고, `3 - 4`는 `3 + (-4)`와 같다. 이렇게 바꾸면 덧셈의 결합 법칙과 교환 법칙에 따라 항의 순서를 자유롭게 바꾸어 더하거나, 곱셈의 결합 법칙과 교환 법칙에 따라 인수의 순서를 바꾸어 곱할 수 있다. 다만, 덧셈/뺄셈과 곱셈/나눗셈이 섞여 있을 때는 반드시 위의 우선순위 규칙을 따라야 한다.

제곱근 기호 √는 그 안에 포함되는 수식(피개수)을 하나의 그룹으로 묶는 역할을 한다. 보통 피개수 위에 그어지는 가로선(빈쿨럼)이 그룹화 기호 역할을 한다. 다른 함수들의 경우, 입력값을 명확히 하기 위해 괄호를 사용하는 것이 일반적이다. 하지만 입력값이 하나의 숫자나 변수, 또는 단항식일 경우에는 괄호를 생략하기도 한다. 예를 들어 `sin x`는 `sin(x)`와 같이 해석될 수 있다. 그러나 `sin x + y`는 `sin(x) + y`를 의미하며, `x + y` 전체가 sin 함수의 입력이 아님에 유의해야 한다. 혼동을 피하기 위해 명시적으로 괄호를 사용하는 것이 권장되며, 일부 계산기나 프로그래밍 언어는 함수 입력에 괄호를 필수로 요구하기도 한다.

지수가 여러 번 중첩된 경우(예: a^{b^c}), 가장 위쪽의 지수부터 계산한다.

괄호와 같은 그룹화 기호는 일반적인 연산 순서를 바꿀 수 있다. 그룹화된 부분은 하나의 독립된 식으로 간주하여 먼저 계산한다. 그룹화 기호는 분배 법칙 등을 이용하여 제거할 수 있으며, 안의 수식이 충분히 간단해져 모호함이 없다면 생략할 수도 있다.

2. 1. 예

괄호 안의 수식은 다른 어떤 연산보다 먼저 계산된다.

:3 \div (2-1) = 3 \div 1 = 3

:(1 + 2) \times 3 = 3 \times 3 = 9

곱셈나눗셈덧셈뺄셈보다 먼저 계산된다.

:2+3 \times 4 = 2 + 12 = 14

:1 + 2 \times 3 = 1 + 6 = 7

거듭제곱 (지수)은 부호 연산보다 우선순위가 높다. 즉, 단항 연산자인 음수 부호 '-'보다 지수를 먼저 계산한다.

:-3^2 = -(3\times3) = -9

이는 아래와 같이 괄호로 묶인 음수의 거듭제곱과 다르다.

:(-3)^2 = (-3)\times(-3) = 9

또한, 거듭제곱은 곱셈이나 뺄셈보다 먼저 계산된다.

:1 - 2 \times 3 ^ 4 = 1 - 2 \times 81 = 1 - 162 = -161

제곱근 기호나 분수 막대 안에 포함된 수식은 묶인 것으로 간주하여 먼저 계산한다.

:\sqrt{3+1} \times 2 = \sqrt{4} \times 2 = 2 \times 2 = 4

:\sqrt{1 + 3} + 5 = \sqrt 4 + 5 = 2 + 5 = 7

:\frac{4+2}{1+2} + 4 = \frac{6}{3} + 4 = 2 + 4 = 6

:\frac{1 + 2}{3 + 4} + 5 = \frac{3}{7} + 5

같은 우선순위를 가지는 연산들이 연이어 나타날 경우, 일반적으로 왼쪽에서 오른쪽 순서로 계산한다.

:2 \div 3 \times 5 = \frac{2}{3} \times 5 = \frac{10}{3}

거듭제곱의 지수 위치에 또 다른 거듭제곱이 오는 경우(첨자 형태), 위쪽에 있는 지수부터 계산한다.

:2^{3^2} = 2^{(3^2)} = 2^9 = 512

이는 아래와 같이 괄호로 묶어 밑을 먼저 계산하는 경우와 다르다.

:(2^3)^2 = 8^2 = 64

표현식이 위 첨자로 쓰여진 경우, 위 첨자는 그 자체로 묶인 것으로 간주될 수 있다.

:1+2^{3+4} = 1+2^7 = 1+128 = 129

괄호는 중첩될 수 있으며, 가장 안쪽의 괄호부터 계산한다.

:\bigl[ (1 + 2) \div (3 + 4) \bigr] + 5 = [3 \div 7] + 5 = \frac{3}{7} + 5

:[(1+2)-3]-(4-5) = [3-3]-(-1) = 0 - (-1) = 1

3. 특수한 경우

시그마 기호는 덧셈이나 뺄셈보다 우선순위가 높게 계산되지만, 문맥에 따라 해석이 달라질 수 있어 주의가 필요하다.

예를 들어, 다음과 같이 상수가 포함된 경우 괄호가 없으면 모호함이 발생할 수 있다.

:\sum_{k=1}^{3}k^2 + 1

위 식은 ( \sum_{k=1}^{3} k^2 ) + 1 로 해석될 수도 있고, \sum_{k=1}^{3} (k^2 + 1) 로 해석될 수도 있다. 실제로 두 계산 결과는 다르다.

: (1^2 + 2^2 + 3^2) + 1 \ne (1^2 + 1) + (2^2 + 1) + (3^2 +1)

따라서 혼동을 피하기 위해 다음과 같이 괄호를 사용하여 의도를 명확히 밝혀주는 것이 좋다.

: \sum_{k=1}^{3} (k^2 + 1)

그러나 아래처럼 변수만으로 구성된 경우에는 괄호가 없어도 \sum_{k=1}^{3} (k^2 + k) 와 같이 해석되어 모호하지 않다고 여겨져 괄호를 생략하는 경우도 있다.

:\sum_{k=1}^{3}k^2 + k = (1^2 + 1) + (2^2 + 2) + (3^2 +3)

3. 1. 혼합 나눗셈과 곱셈

'÷' 기호로 표시되는 나눗셈과 '×' 기호로 표시되는 곱셈이 함께 있는 수식을 해석하는 데 보편적으로 통용되는 단일 규칙은 없다. 몇 가지 제안된 규칙이 있는데, 연산에 동일한 우선순위를 부여하고 왼쪽에서 오른쪽으로 계산하거나, 나눗셈을 역수의 곱셈으로 간주하여 순서에 상관없이 계산하는 방식, 또는 모든 곱셈을 먼저 계산한 뒤 나눗셈을 왼쪽에서 오른쪽으로 계산하는 방식 등이 있다. 하지만 이러한 모호성을 피하기 위해 항상 명시적인 괄호를 사용하는 것이 권장된다.

초등 교육 과정을 넘어서면 나눗셈 기호 '÷'는 거의 사용되지 않고, 보통 분자를 분모 위에 배치하는 분수 형태로 표현한다. 이렇게 하면 그룹화가 명확해져 모호함이 줄어든다. 때로는 한 줄로 표기하기 위해 슬래시 기호 '/'를 사용하기도 한다.

숫자나 변수가 연산 기호 없이 바로 옆에 붙어 있는 곱셈(이를 생략 곱셈이라고도 한다)은 시각적으로 하나의 단위처럼 보이며, 다른 연산보다 우선순위가 높게 취급되는 경우가 많다. 학술 문헌에서는 괄호 없이 생략 곱셈과 함께 한 줄로 표기된 분수가 사용될 때, 곱셈이 나눗셈보다 더 높은 우선순위를 갖는 것으로 해석하는 경향이 있다. 예를 들어, 1/2''n''은 (1/2) × ''n''이 아니라 1/(2 × ''n'')을 의미하는 것으로 해석된다. 실제로 물리학 저널 ''Physical Review''의 투고 지침은 곱셈이 나눗셈보다 우선한다고 명시하고 있으며, 이는 란다우와 리프시츠의 ''Theoretical Physics 강좌''나 그레이엄, 커누스, 파타슈닉의 ''Concrete Mathematics'' 같은 교과서에서도 확인되는 규칙이다. 그러나 일부 저자들은 ''a''/''bc''와 같은 표현 대신 명확하게 괄호를 사용한 ''a''/(''bc'') 형태를 선호한다.

더 복잡한 표현에서는 모호성이 더욱 커질 수 있다. 예를 들어, 1/2''π''(''a'' + ''b'')는 1/[2''π'' × (''a'' + ''b'')]를 의미할 수도 있고, [1/(2''π'')] × (''a'' + ''b'')를 의미할 수도 있다. 해석은 문맥에 따라 달라지기도 한다. ''Physical Review'' 투고 지침에서는 ''a''/''b''/''c'' 같은 형태의 표현을 권장하지 않으며, 대신 (''a''/''b'')/''c'' 또는 ''a''/(''b''/''c'')처럼 괄호를 사용하여 명확히 표현할 것을 권장한다.

6÷2(1+2)는 ''fx-82MS'' 계산기(위)에서는 6÷(2×(1+2))로 해석되어 결과가 1이지만, ''TI-83 Plus'' 계산기(아래)에서는 (6÷2)×(1+2)로 해석되어 결과가 16이다.


이러한 해석의 모호성은 "8 ÷ 2(2 + 2)"와 같은 인터넷 밈의 주제가 되었으며, 이에 대해 두 가지 상반된 해석, 즉 8 ÷ [2 × (2 + 2)] = 1과 (8 ÷ 2) × (2 + 2) = 16이 존재한다. 수학 교육 연구원 훙시 우(Hung-Hsi Wu)는 "실생활에서 이러한 유형의 계산을 하는 경우는 결코 없다"고 지적하며, 이러한 조작된 예시를 "불합리하게 복잡한 규칙의 집합으로 표현하여 의심하지 않는 사람을 함정에 빠뜨리도록 설계된 일종의 속임수! 게임"이라고 부른다.

3. 2. 단항 마이너스 부호

단항 연산자 '-' (보통 '마이너스'라고 읽음)의 취급에 대해서는 서로 다른 관례가 존재한다. 수학적 표기법에서는 일반적으로 -32와 같은 표현식을 -(32)으로 해석하여 -9라는 결과를 얻는다.[3] 즉, 거듭제곱 연산을 먼저 수행한 후 부호를 적용하는 것이다.

그러나 일부 애플리케이션이나 프로그래밍 언어, 특히 마이크로소프트 엑셀, PlanMaker 및 bc 같은 경우, 단항 연산자의 우선순위를 이항 연산자보다 높게 설정하는 경우가 있다. 이러한 시스템에서는 단항 마이너스 연산이 거듭제곱 연산보다 우선순위가 높아, -32를 (-3)2으로 해석하여 결과적으로 9가 된다.[4] 이는 이항 연산자인 마이너스(-)와는 다르게 취급된다. 예를 들어, 마이크로소프트 엑셀에서 수식 `=-2^2`, `=-(2)^2`, `=0+-2^2`는 모두 4를 반환하지만, `0-2^2`나 `=-(2^2)`와 같은 수식은 -4를 반환한다.

이처럼 해석 방식의 차이는 혼란을 야기할 수 있으므로, 의도한 계산 순서를 명확히 하기 위해서는 괄호를 사용하여 `-(32)` 또는 `(-3)2`와 같이 명시적으로 표현하는 것이 좋다. 우선순위 규칙에 의존하기보다는 괄호를 사용하여 모호성을 제거하는 것이 바람직하다.

3. 3. 직렬 지수 연산

지수 연산이 위첨자 표기를 사용하여 쌓인 형태로 표시될 경우, 일반적으로 위에서 아래로 계산하는 규칙을 따른다.[2]

: a^{b^c} = a^{(b^c)}

이 계산 방식은 (a^b)^c와는 일반적으로 다르다. (a^b)^c = a^{bc}라는 지수 연산의 성질이 있기 때문에, 위에서 아래로 계산하는 규칙은 거듭제곱이 여러 번 중첩될 때 유용하게 사용된다.

하지만 캐럿 기호(^)나 화살표(↑)와 같은 명시적인 기호를 사용하여 지수 연산을 표현할 때는 통일된 표준이 없다. 예를 들어, 마이크로소프트 엑셀이나 프로그래밍 언어 MATLAB에서는 'a^b^c'를 (a^b)^c로 계산한다. 반면, 구글 검색이나 울프럼 알파에서는 같은 식을 a^{(b^c)}로 계산한다.

이 때문에 '4^3^2'라는 식은 엑셀이나 MATLAB에서는 (4^3)^2 = 64^2 = 4096으로 계산되지만, 구글 검색이나 울프럼 알파에서는 4^{(3^2)} = 4^9 = 262,144로 계산되어 결과값이 달라진다.

4. 프로그래밍 언어

프로그래밍 언어는 각 언어마다 고유한 연산자 우선순위 규칙을 가지고 있다. 많은 프로그래밍 언어는 수학에서 일반적으로 사용되는 연산 순서를 따르지만, APL, Smalltalk, Occam, Mary와 같이 연산자 우선순위 규칙이 없는 언어도 존재한다. APL에서는 연산이 엄격하게 오른쪽에서 왼쪽으로, Smalltalk에서는 엄격하게 왼쪽에서 오른쪽으로 수행된다.

연산자 우선순위 외에도 연산자의 결합성 규칙이 중요하다. 대부분의 이항 연산자는 왼쪽 결합성(left-associative)을 가지므로, 같은 우선순위의 연산자는 왼쪽에서 오른쪽으로 평가된다. 예를 들어, 16 / 4 / 4(16 / 4) / 4와 같이 계산되어 결과는 1이 된다. 오른쪽 결합성(right-associative)을 갖는 연산자도 있는데, 예를 들어 Haskell의 리스트 구성 연산자 :는 오른쪽 결합성을 가져 1:2:3:[]1:(2:(3:[]))와 같이 평가된다.

C 언어는 많은 후대 언어에 영향을 주었으며, 그 연산자 우선순위는 다음과 같다.

C 언어에서의 연산자 우선순위
우선순위연산자기능
1()   []   ->   .   :: (C++)함수 호출, 배열 첨자, 멤버 접근 (., ->), 범위 결정 (C++)
2!   ~   +(단항)   -(단항)   ++(전위)   --(전위)   &(주소)   *(역참조)   sizeof   (형변환)논리 NOT, 비트 NOT, 단항 플러스/마이너스, 전위 증가/감소, 주소 참조, 역참조, 크기 계산, 형변환 (오른쪽에서 왼쪽 결합)
3*   /   %곱셈, 나눗셈, 나머지
4+   -덧셈, 뺄셈
5<<   >>비트 단위 시프트
6<   <=   >   >=관계 연산자 (크기 비교)
7==   !=등가/비등가 비교
8&비트 단위 AND
9^비트 단위 XOR (배타적 OR)
10|비트 단위 OR (포함적 OR)
11&&논리 AND
12||논리 OR
13?:조건 연산자 (삼항 연산자, 오른쪽에서 왼쪽 결합)
14=   +=   -=   *=   /=   %=   &=   |=   ^=   <<=   >>=할당 연산자 (오른쪽에서 왼쪽 결합)
15,쉼표 연산자



예시:


  • !A + !B(!A) + (!B) 로 해석된다.
  • ++A + !B(++A) + (!B) 로 해석된다.
  • A + B * CA + (B * C) 로 해석된다.
  • A || B && CA || (B && C) 로 해석된다.
  • A && B == CA && (B == C) 로 해석된다.
  • A & B == CA & (B == C) 로 해석된다. (단, Python, Ruby 등 일부 언어에서는 (A & B) == C 로 해석된다.)




C 언어의 우선순위 규칙 중 특히 비트 연산자 (&, ^, |)의 우선순위가 비교 연산자 (==, != 등)보다 낮다는 점은 주의가 필요하다. 이로 인해 x & mask == y와 같은 코드는 프로그래머의 의도((x & mask) == y)와 다르게 x & (mask == y)로 해석되어 버그의 원인이 되기도 한다.

C 언어의 창시자인 데니스 리치는 이러한 우선순위가 C 언어의 전신인 B 언어에서 유래했으며, 당시에는 비트 연산자와 논리 연산자가 명확히 구분되지 않았기 때문이라고 설명했다. 예를 들어 if (a==b & c==d) ... 와 같은 코드가 이미 널리 사용되고 있었기에, 이후 논리 연산자 &&||를 도입할 때 기존 코드와의 호환성을 위해 ==, != 등의 우선순위를 비트 연산자보다 높게 유지했다고 한다. 리치는 나중에 이 결정이 실수였으며, 우선순위를 변경했다면 "비트 연산은 반드시 괄호로 묶으라"는 관용구를 사용할 필요가 없었을 것이라고 회고했다.[11][12]

C++, Perl, PHP, Java, C#, JavaScript 등 C의 영향을 받은 많은 언어들이 이러한 우선순위를 그대로 따르고 있다. 하지만 Python, Ruby, Go와 같은 최신 언어들은 비트 연산자의 우선순위를 비교 연산자보다 높게 수정하여 이러한 혼란의 여지를 줄였다. Java나 C#의 경우, 논리 연산의 결과가 boolean 타입이고 정수형으로의 암묵적 변환이 없어 x & mask == y와 같은 실수는 대부분 컴파일 시 타입 오류로 발견된다. 또한 최신 컴파일러[13]나 정적 코드 분석 도구는 이러한 잠재적 오류를 경고하기도 한다.

여러 프로그래밍 언어로 코드를 변환하는 소스-대-소스 컴파일러는 언어 간의 연산자 우선순위 차이를 명시적으로 처리해야 한다. 예를 들어 Haxe는 표준화된 순서를 정하고 필요한 곳에 괄호를 삽입하여 이 문제를 해결한다.

소프트웨어 개발자들이 특정 이항 연산자의 우선순위를 얼마나 정확하게 알고 있는지는 해당 연산자가 소스 코드에 얼마나 자주 나타나는지와 밀접한 관련이 있다는 연구 결과도 있다.[14]

5. 기억술

기억술은 연산 순서를 쉽게 기억하기 위해 사용하는 방법으로, 주로 두문자어 형태를 띤다. 특히 초등학교에서 학생들에게 연산 순서를 가르칠 때 자주 활용된다.

여러 종류의 기억술 두문자어가 사용되는데, 대표적인 예는 다음과 같다.


  • '''PEMDAS''' : 미국프랑스 등에서 주로 사용된다. 각 글자는 '''P'''arentheses(괄호), '''E'''xponents(지수), '''M'''ultiplication(곱셈)/'''D'''ivision(나눗셈), '''A'''ddition(덧셈)/'''S'''ubtraction(뺄셈)을 의미한다. 때로는 "Please Excuse My Dear Aunt Sally"와 같은 문장으로 만들어 외우기도 한다.
  • '''BODMAS''' : 영연방 국가 등에서 사용된다. '''B'''rackets(괄호), '''O'''f 또는 '''O'''rder(지수/거듭제곱), '''D'''ivision(나눗셈)/'''M'''ultiplication(곱셈), '''A'''ddition(덧셈)/'''S'''ubtraction(뺄셈)을 나타낸다. 여기서 'Of'는 분수 곱셈을 의미하기도 한다. 때로는 'O' 대신 지수를 뜻하는 '''I'''ndices의 'I'를 써서 '''BIDMAS'''라고 하기도 한다. '''BOMDAS'''라는 변형도 있다.
  • '''BEDMAS''' : 캐나다뉴질랜드에서 흔히 쓰인다. '''B'''rackets(괄호), '''E'''xponents(지수), '''D'''ivision(나눗셈)/'''M'''ultiplication(곱셈), '''A'''ddition(덧셈)/'''S'''ubtraction(뺄셈)을 의미한다.


독일에서는 Punktrechnung vor Strichrechnungde("선 연산보다 점 연산")이라는 규칙으로 가르치는데, 이는 곱셈(점 연산자 기호 •)과 나눗셈(점 연산자 기호 :)을 덧셈(선 연산자 기호 +)과 뺄셈(선 연산자 기호 −)보다 먼저 계산한다는 의미이다.

하지만 이러한 기억술은 잘못된 이해를 유발할 수 있다는 문제점이 있다. 예를 들어, PEMDAS나 BODMAS를 단순히 순서대로 적용해야 한다고 생각하여 "덧셈을 뺄셈보다 먼저 계산한다"고 오해하면, a - b + c라는 식을 (a - b) + c가 아닌 a - (b + c)로 잘못 계산할 수 있다. 10 - 3 + 2의 경우, 올바른 답은 (10 - 3) + 2 = 9이지만, 덧셈을 먼저 해야 한다고 잘못 생각하면 10 - (3 + 2) = 5라는 틀린 결과를 얻게 된다. (물론, 10 + 2 - 3처럼 순서를 바꿔 (10 + 2) - 3 = 9로 계산하면 우연히 맞는 경우도 있다.)

이러한 문제 때문에 기억술 두문자어는 비판을 받기도 한다. 기억술은 연산 순서에 대한 깊이 있는 개념적 이해를 돕지 못하며, 왜 그런 순서로 계산해야 하는지, 혹은 다른 계산 방법은 없는지에 대한 학생들의 질문에 답해주지 못한다. 기억술에 의존해 연산 순서를 배운 학생들은 실수를 저지르기 쉬우며, 심지어 일부 예비 교사들도 혼동하는 경우가 있다. 설령 두문자어를 정확히 외우더라도, 기계적인 암기에 치중하다 보면 정작 중요한 수학적 내용은 놓치게 된다. 또한, 수학 전문가들이 수식을 다루는 방식과도 차이가 있다. 수학적 표현은 단순히 왼쪽에서 오른쪽으로 순서대로 나열된 것이 아니라, 괄호 외의 방법으로도 그룹을 나타내며 트리 구조와 같은 계층적 구조를 가진다. 수식을 계산하거나 단순화하는 방법이 반드시 하나만 있는 것도 아니며, 전문가들은 상황에 맞게 유연하게 계산 순서를 적용한다. 따라서 엄격하게 정해진 절차만 배우는 것은 오히려 수학적 표기법에 대한 오해를 낳고 제한적인 이해에 머무르게 할 수 있다.

이런 단점을 보완하기 위해 뉴질랜드에서는 나눗셈과 뺄셈을 제외한 '''PEMA'''(Parentheses, Exponents, Multiplication, Addition)를 가르치기도 한다. 이 경우, 나눗셈은 곱셈과, 뺄셈은 덧셈과 같은 우선순위를 갖는다는 점을 별도로 설명한다.

6. 계산기

계산기는 기종에 따라 연산자의 우선순위가 다를 수 있다.[2] 많은 단순 계산기는 스택 없이 입력된 순서대로 계산하는 체인 입력 방식을 사용한다. 예를 들어, 단순 계산기에 1 + 2 × 3 =을 입력하면 9가 결과로 나오지만, 표준적인 연산 우선순위를 따르는 대부분의 공학용 계산기에서는 같은 입력을 하면 7이 결과로 나온다.[2] Microsoft Windows에 포함된 계산기 앱 역시 "표준" 모드와 "공학용" 모드에서 다르게 동작한다.[2]

공학용 계산기 중에서도 연산 해석 방식에 차이가 있을 수 있다.


  • 거듭제곱의 결합성: 계산기 모델에 따라 지수 계산 순서가 다를 수 있다. 예를 들어, ''a''^''b''^''c''라는 식을 TI-92와 TI-30XS MultiView의 "Mathprint 모드"에서는 ''a''(''b''''c'')로 해석하는 반면, TI-30XII 및 TI-30XS MultiView의 "클래식 모드"에서는 (''a''''b'')''c''로 해석한다.[2]
  • 암시적 곱셈 (생략된 곱셈)의 해석: 곱셈 기호가 생략된 경우의 처리 방식도 다르다. 예를 들어 1/2''x''와 같은 식은 TI-82[8] 및 많은 구형 카시오 계산기[9]에서는 1/(2''x'')로 해석하지만, TI-83 이후 모델[8]HP의 대수 표기법 계산기에서는 (1/2)''x''로 해석한다. 첫 번째 해석은 암시적 곱셈을 하나의 단위로 보는 관점에서 자연스러울 수 있지만,[8] 두 번째 해석은 곱셈과 나눗셈의 우선순위가 같다는 규칙에 더 부합한다.[8]

  • 괄호 앞 생략된 곱셈: 6÷2(1+2)와 같이 괄호 앞에 곱셈 기호가 생략된 경우의 우선순위에 대한 해석도 제조사나 모델별로 일관되지 않다. 카시오의 경우, 초기 모델은 생략된 곱셈을 우선하여 1 (6÷(2×(1+2)))을 결과로 냈으나, 이후 모델(fx-991ES 등)에서는 생략되지 않은 곱셈과 동일하게 취급하여 9 ((6÷2)×(1+2))를 결과로 내도록 변경했다. 하지만 이후 모델(fx-993ES 등)에서는 다시 생략된 곱셈을 우선하는 방식으로 돌아가면서, 입력된 식을 6÷(2(1+2))로 자동 수정하여 1을 결과로 보여주기도 한다.[9][10] 이러한 모호성은 인터넷에서 "8÷2(2+2)"와 같은 식이 논쟁거리가 되기도 했다.


사용자가 계산기가 특정 수식을 어떻게 해석할지 확신할 수 없다면, 괄호를 사용하여 의도하는 계산 순서를 명확히 지정하는 것이 좋다.[8]

한편, 역폴란드 표기법(RPN)을 사용하는 계산기는 스택을 이용하여 연산을 처리하므로, 괄호나 연산자 우선순위 규칙이 필요 없다.

7. 역사

연산 순서는 수세기에 걸쳐 점진적으로 발전해 왔다. 곱셈덧셈보다 우선한다는 규칙은 분배 법칙이 자연스러운 계층 구조를 암시했기 때문에 1600년대 수학적 표기법의 발달에 통합되었다. 1920년대에 수학사학자 플로리안 카조리는 곱셈이 나눗셈보다 우선해야 하는지, 아니면 동일하게 취급해야 하는지에 대한 이견이 있었다고 밝혔다. "연산 순서"라는 용어와 "PEMDAS/BEDMAS" 기억술은 표준화된 교과서에 대한 수요가 증가하면서 19세기 말 또는 20세기 초에 공식화되었다.

a/2b와 같은 표현식에서 암시적 곱셈이 명시적 곱셈 및 나눗셈보다 우선하는지 여부에 대한 모호함은 a/(2b) 또는 (a/2)*b로 해석될 수 있으며, 이러한 관례가 아직 완전히 안정되지 않았음을 암시한다.

참조

[1] 웹사이트 Ask Dr. Math http://mathforum.org[...] Math Forum 2000-11-22
[2] 문서
[3] 서적 Elementary Algebra for College Students 8/E
[4] 웹사이트 Formula Returns Unexpected Positive Value http://support.micro[...] Support.microsoft.com 2005-08-15
[5] 웹사이트 2x÷2x - Wolfram|Alpha http://wolframalpha.[...] Wolframalpha.com null
[6] 웹사이트 Physical Review Style and Notation Guide https://d22izw7byeup[...] American Physical Society
[7] 문서
[8] 웹사이트 Implied Multiplication Versus Explicit Multiplication on TI Graphing Calculators http://epsstore.ti.c[...] Texas Instruments Incorporated 2011-01-16
[9] 웹사이트 関数電卓コラム 11/10/05 6÷2(1+2)=? https://teamcoil.sp.[...] 東海大学理学部 遠藤研究室 2024-08-19
[10] Youtube EEVblog 1479 - Is Your Calculator WRONG? https://www.youtube.[...]
[11] 웹사이트 http://www.lysator.l[...]
[12] 웹사이트 https://www.bell-lab[...]
[13] 문서
[14] 간행물 Developer beliefs about binary operator precedence http://www.knosof.co[...] CVu



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com