Regnearternes hierarki

Fra Wikipedia, den frie encyklopædi
(Omdirigeret fra Operatorpræcedens)

Regnearternes hierarki (også kaldet regnearternes rækkefølge[1], operatorpræcedens og operatorrangfølge[2]) er inden for matematikken (aritmetik, algebra) og datalogien,[3] regelsættet der angiver rækkefølgen[4] delberegninger skal udføres i,[5] for at evaluere et givet matematisk udtryk i infiksnotation. F.eks. har multiplikation forrang fremfor addition.

Definition[redigér | rediger kildetekst]

Regnearternes hierarki og paranteser, som anvendes indenfor matematik, videnskab, teknologi og mange computer programmeringssprog, er her. Den højeste præcedens er øverst:[5][6][7][8][9]

Præcedens parantes
eller
operator
Kommentar
1 ()   []   {} Paranteser - men helst ikke〈〉da de kan forveksles med mindre-end og større-end tegn.
Underforståede paranteser:
N'te rods-tegnets () øverste streg kan forlænges - og i så fald skal hele udtrykket "x" under stregen, opfattes som om udtrykket har en underforstået parantes. Alternativ brug: .
Brøkstregen kan forlænges, og udtrykkene foroven "a" og forneden "b" skal opfattes, som om udtrykkene har hver deres underforståede paranteser.
2 ! Fakultet (Andre unære operatorers operatorpræcedens (fx fortegn (+) og (-)) afhænger af konventioner)
3 ^ Potensopløftning og roduddragning. I nogle programmeringssprog anvendes to stjerner (**) for potensopløftning. N'te rod kan skrives som eller x^().
4 *   ×     / multiplikation og division. Divisionstegn kun på engelsk: (÷) som kan misforstås som minustegn. Norsk divisionstegn kolon (:).
5 +   - Addition og subtraktion. Bemærk: Binære operatorer; plustegn (+), minustegn (-).

Det betyder at når, i et matematisk udtryk, et underudtryk er mellem to operatorer, skal operatoren, som er højere i regnearternes hierarki - udregnes først.

Eksempler[redigér | rediger kildetekst]

Eksempel med addition og multiplikation[redigér | rediger kildetekst]

Det matematiske udtryk:

skal fortolkes som

og ikke fortolkes som

Eksempel med fakultet og multiplikation[redigér | rediger kildetekst]

Det matematiske udtryk: 2*3!

skal fortolkes som 2*(3!) = 12

og ikke fortolkes som (2*3)! = 720

Specialtilfælde[redigér | rediger kildetekst]

Unært minustegn[redigér | rediger kildetekst]

Der er forskellige konventioner vedrørende den unære operator − (fx minus operator). I skreven eller udskreven matematik, bliver udtrykket −32 fortolket som 0 − (32) = − 9.[7][10]

I nogle anvendelser og programmeringssprog, fx Microsoft Excel, PlanMaker (og andre regnearksprogrammer) og programmeringssproget bc, har unære operatorer højere præcedens end binære operatorer, dvs fortegn som fx negativt fortegn har højere præcedens end potensopløftning, så i disse sprog vil −32 blive fortolket som (−3)2 = 9.[11] Dette gælder ikke den binære minus operator −; i fx Microsoft Excel vil formlerne =−2^2, =-(2)^2 og =0+−2^2 returnere 4, hvorimod formlerne =0−2^2 og =−(2^2) returnere −4.

Blandet division og multiplikation[redigér | rediger kildetekst]

i dette afsnit anvendes det engelske divisionssymbol "÷"

Der kan være flertydighed i anvendelsen af skråstreg symbolet / i udtryk såsom 1/2x.[12] Hvis man omskriver dette udtryk som 1 ÷ 2x og så fortolker divisionssymbolet som visende den multiplikative inverse, fås:

1 ÷ 2 × x = 1 × 1/2 × x = 1/2 × x.

Med denne fortolkning 1 ÷ 2x er det lig med (1 ÷ 2)x.[7][13] Men i en del akademisk litteratur, anvendes underforstået multiplikation, som bliver fortolket som havende højere præcedens end division, sådan at 1 ÷ 2x er lig 1 ÷ (2x), ikke (1 ÷ 2)x.

Fx er manuskript indsendelsesinstruktionerne for tidsskriftet Physical Review at (kun underforstået?) multiplikation har højere præcedens end division med en skråstreg,[14] og dette er også konventionen observeret i prominente fysikbøger såsom Course of Theoretical Physics af Landau og Lifshitz - og Feynman Lectures on Physics.[15] [16]

Lommeregner[redigér | rediger kildetekst]

Nogle lommeregnere respekterer regnearternes hierarki, andre gør ikke.[7]

Programmeringssprog[redigér | rediger kildetekst]

Nogle programmeringssprog anvender regnearternes hierarki, som er kompatibel med hvad der anvendes i matematik,[17] selvom andre, såsom APL, Smalltalk, Occam and Mary, ikke har operator præcedens regler (i APL er evaluering striks fra højre til venstre; i Smalltalk osv. er det striks venstre til højre).

Yderligere, fordi mange operatorer ikke er associative, er præcedensen indenfor ethvert enkelt niveau sædvanligvis defineret ved at gruppere venstre til højre så at 16/4/4 fortolkes som (16/4)/4 = 1 i stedet for 16/(4/4) = 16; sådanne operatorer bliver måske fejlagtigt kaldet for "venstre associativ". Undtagelser eksisterer; fx, sprog med operatorer som korresponderer til cons operation på lister grupperer dem typisk fra højre til venstre ("højre associativ"), fx i Haskell, 1:2:3:4:[] == 1:(2:(3:(4:[]))) == [1,2,3,4].

Skaberen af programmeringssproget C har sagt at præcedens i C (programmeringssprog som låner disse regler fra C, er fx: C++, Perl og PHP), ville være mere formålstjenligt hvis bitwise operatorer flyttes op over sammenligningsoperatorer.[18] Men mange programmører er blevet tilvænt til denne præcedens. Det relative præcedens niveau af operatorer, der findes i mange C-lignende sprog, er som følger:

Præcedens parantes eller operator Kommentar
1 ()   []   ->   .   :: Funktionskald, virkefelt (scope), array/member access
2 !   ~   -   +   *   &   sizeof   typekonvertering (type cast)   ++   --   (fleste) unære operatorer, sizeof og typekonvertering (højre til venstre)
3 *   /   % MOD Multiplikation, division, modulo
4 +   - Addition og subtraktion
5 <<   >> Bitvis shift venstre og højre
6 <   <=   >   >= Sammenligning: mindre-end og større-end
7 ==   != Sammenligning: lig og ikke-lig
8 & Bitvis AND
9 ^ Bitvis exclusive OR (XOR)
10 | Bitvis inclusive (normal) OR
11 && Logisk AND
12 || Logisk OR
13 ? : Betinget udtryk (ternær)
14 =   +=   -=   *=   /=   %=   &=   |=   ^=   <<=   >>= Tildelingsoperatorer (højre til venstre)
15 , Kommaoperator

Se også[redigér | rediger kildetekst]

Bøger[redigér | rediger kildetekst]

  • Carstensen, Jens & Frandsen, Jesper (1990): Obligatorisk matematik. Forlaget Systime, Herning. ISBN 87-7783-630-8
  • Holth, Klaus m.fl. (1987): Matematik Grundbog 1. Forlaget Trip, Vejle. ISBN 87-88049-18-3

Referencer[redigér | rediger kildetekst]

  1. ^ https://www.matematikfysik.dk/mat/opgaver/grundforloeb%20-%20opgaver%20i%20regnearternes%20hierarki.pdf , backup
  2. ^ Engelsk-dansk it-ordbog. Af Jørgen Høedt
  3. ^ Regnearternes hierarki og problemløsning i 1. gymnasieklasse - PDF Gratis download, backup
  4. ^ Gennemgang af regnearternes hierarki (artikel). Khan Academy, backup
  5. ^ a b gymnasiet.dk: matematik-kompedium, backup
  6. ^ lektieforum.dk: Hvad er rækkefølgen på de forskellige regnearter?, backup
  7. ^ a b c d Bronstein, Ilja Nikolaevič; Semendjajew, Konstantin Adolfovič (1987) [1945]. "2.4.1.1. Definition arithmetischer Ausdrücke" [Definition of arithmetic expressions]. Skrevet i Leipzig, Germany. I Grosche, Günter; Ziegler, Viktor; Ziegler, Dorothea (red.). Taschenbuch der Mathematik [Pocketbook of mathematics] (tysk). Vol. 1. Oversat af Ziegler, Viktor. Weiß, Jürgen (23 udgave). Thun, Switzerland / Frankfurt am Main, Germany: Verlag Harri Deutsch (and B. G. Teubner Verlagsgesellschaft, Leipzig). s. 115-120, 802. ISBN 3-87144-492-8. Regel 7: Ist F(A) Teilzeichenreihe eines arithmetischen Ausdrucks oder einer seiner Abkürzungen und F eine Funktionenkonstante und A eine Zahlenvariable oder Zahlenkonstante, so darf F A dafür geschrieben werden. [Darüber hinaus ist noch die Abkürzung Fn(A) für (F(A))n üblich. Dabei kann F sowohl Funktionenkonstante als auch Funktionenvariable sein.]
  8. ^ Weisstein, Eric W. "Precedence". mathworld.wolfram.com (engelsk). Hentet 2020-08-22.
  9. ^ Stapel, Elizabeth. "The Order of Operations: PEMDAS". Purplemath. Hentet 2020-08-22.
  10. ^ Angel, Allen R. Elementary Algebra for College Students (8 udgave). Chapter 1, Section 9, Objective 3.
  11. ^ "Formula Returns Unexpected Positive Value". Microsoft. 2005-08-15. Arkiveret fra originalen 2015-04-19. Hentet 2012-03-05.
  12. ^ Ball, John A. (1978). Algorithms for RPN calculators (1 udgave). Cambridge, Massachusetts, USA: Wiley-Interscience, John Wiley & Sons, Inc. s. 31. ISBN 0-471-03070-8.
  13. ^ "Rules of arithmetic" (PDF). Mathcentre.ac.uk. Hentet 2019-08-02.
  14. ^ "Physical Review Style and Notation Guide" (PDF). American Physical Society. Section IV–E–2–e. Hentet 2012-08-05.
  15. ^ For example, the third edition of Mechanics by Landau and Lifshitz contains expressions such as hPz/2π (p. 22), and the first volume of the Feynman Lectures contains expressions such as 1/2N (p. 6–7). In both books, these expressions are written with the convention that the solidus is evaluated last. This also implies that an expression like 8/2(4) has solution 1 as the omission of the multiplication sign (x * or .) implies that the solidus is evaluated last even if positioned more to the left.
  16. ^ "Of" is equivalent to division or multiplication, and commonly used especially at primary school level, as in "Half of fifty".
  17. ^ Van Winkle, Lewis (2016-08-23). "Exponentiation Associativity and Standard Math Notation". Codeplea - Random thoughts on programming. Arkiveret fra originalen 2020-06-28. Hentet 2016-09-20.
  18. ^ Ritchie, Dennis M. (1996). "The Development of the C Language". History of Programming Languages (2 udgave). ACM Press.