Die Division in JavaScript
Einführendes Beispiel
Die Division wird mit einem Schrägstrich »/« geschrieben (in der Mathematik ist auch ‹÷› üblich). Der Schrägstrich »/« sollte nicht mit dem inversen Schrägstrich »\« verwechselt werden!
- Auswertung
70/10
7
Syntax
- Neue, erweiterte Syntax
Ausdruck
.----------.
---.----------------->| Literal |-----------------------------.--->
| '----------' ^
| .-. .----------. .-. |
'-------->( ( )--->| Ausdruck |--->( ) )--------------------'
| '-' '----------' '-' |
| .-. .----------. |
'-------->( - )--->| Ausdruck |-----------------------------'
| '-' '----------' |
| .-. .----------. |
'-------->( + )--->| Ausdruck |-----------------------------'
| '-' '----------' |
| .------. .----------. |
'--->( typeof )--->| Ausdruck |-----------------------------'
| '------' '----------' |
| .----------. .-. .----------. |
'----------------->| Ausdruck |--->( / )--->| Ausdruck |----'
'----------' '-' '----------'
Sind D und d zwei Ausdrücke, so ist D /d wieder ein Ausdruck, der Quotient von D und d. Dabei wird D auch Dividend und d Divisor (diˈviːzoːʌ̯) genannt: „Dividend/Divisor“. (Diese vereinfachte Syntax bringt die Assoziativität der Division nicht richtig zum Ausdruck. Diese wird daher weiter unten separat erklärt.) Dieser Operator hat zwei Operandenausdrücke (einen linken und einen rechten). Er wird daher binär genannt, während die zuvor vorgestellten Operatoren unär waren (sie hatten nur einen Operandenausdruck). Dieser Operator steht zwischen seinen Operandenausdrücken, daher wird er auch als ein Infixoperator bezeichnet.
Typanforderungen
Der Dividend und der Divisor müssen beide jeweils numerisch sein.
- Auswertung
70/"10"
7
Wenn ein Operand eines Operators, der eine Zahl als Operand erwartet, eine numerische Zeichenfolge ist, dann wird dieser ein entsprechender Zahlenwert und der Typ »number« zugeordnet. Die obenstehende Division wird beispielsweise so gerechnet wie die folgende Division.
- Auswertung
70/10
7
Assoziativität
Die Division ist linksassoziativ, das heißt in »12/3/2« ist »12/3« ein Ausdruck, aber nicht »3/2«. »12/3/2« bedeutet also »(12/3)/2« – es wird von links beginnend zusammengefaßt.
In »12/3/2« ist der Teil »12/3« ein Operand, nicht jedoch »3/2«, da die »3« mit »12/« zusammengefaßt wird und nicht mit »/2«. Einen Operanden, wie »12/3« in »12/3/2« kann man isoliert betrachten, wenn man seinen Wert bestimmen will.
- Auswertung
12/3/2
2
Unter einer Operation verstehen wir einen Rechenschritt, im Sinne eines direkt zu einem bestimmten Operator gehörenden Teil der Auswertung eines Ausdrucks . Eine Operation findet also während der Auswertung eines Ausdrucks statt. Die Operation zu einem Operator umfaßt nicht die Auswertung von Operanden dieses Operators.
In diesem Kurs stellen wir Operationen durch eine Pfeil dar. Der zugehörige Ausdruck wird auf der linken Seite des Pfeils durch eine Linie überstrichen und auf der rechten Seite durch ein Literal ersetzt, dessen Wert genau oder näherungsweise das Ergebnis der Operation darstellt. (Dieses Ersetzen eines Operatorausdrucks durch ein Literal mit genauem oder näherungsweise gleichem Wert nennen wir eine Reduktion.)
- Operationen bei der Auswertung von »12 / 3 / 2«:
- Operation Division »12 / 3«, Ergebnis »4«.
______
12 / 3 / 2 →
4 / 2- Operation Division »4 / 2«, Ergebnis »2«.
_____
4 / 2 →
2
Der Ausdruck »12 / 3 / 2« wird also mit zwei Operationen ausgewertet. Zuerst wird die linke Division ausgeführt, weil der Operator linksassoziativ ist, dann wird die rechte Division vollzogen.
- Auswertung
( 12/3 )/2
2
Möchte man 12 durch 3/2 teilen, so muß man dies als »12/( 3/2 )« schreiben.
- Auswertung
12/( 3/2 )
8
- Operationen bei der Auswertung von »12 /( 3/2 )«:
- Operation Division »3 / 2«, Ergebnis »1«.
_______
12 /( 3/2 ) →
12 / 1- Operation Division »12 / 1«, Ergebnis »12«.
______
12 / 1 →
12
Im Falle des Ausdrucks »12 /( 3/2 )« wird nun der rechte Quotient als Ausdruck ausgewertet, weil er in runde Klammern eingeschlossen wurde.
Priorität
Der Vorzeichenwechsel hat eine höhere Priorität als die Division. Dies heißt, daß der Vorzeichenwechseloperator in »-3/2« sich nur auf die »3« bezieht und nicht etwas auf den gesamten Bruch.
Bei der Auswertung von »-3/2« wird zuerst der Vorzeichenwechsel und dann die Division ausgeführt.
Bei der Auswertung von »-( 3/2 )« wird zuerst die Division und dann der Vorzeichenwechsel ausgeführt.
Da es weiteren Verlauf des Kurses nicht wichtig ist, die Auswertung von Vorzeichenwechseln ausdrücklich darzustellen, verzichten wir zur Vereinfachung darauf, wenn wir Operationen einer Auswertung angeben, so wie wir auch auf die Darstellung von Operationen zu Ausdruckklammern verzichten. Wir interpretieren beispielsweise die Auswertung von »-( 3/2 )« als eine Division mit dem Ergebnis »-1.5«, ohne die Klammern und das Vorzeichen als eigene Operationen zu würdigen.
In der folgenden Tabelle zur Priorität von Operatoren finden sich Operatoren mit höherer Priorität weiter oben
- Priorität der bisher behandelten Operatoren
() Eingeklammerter Ausdruck
+ - typeof Unaere vorangestellte Operatoren
/ Division
Übungsfragen
? Ausdrücke
Welche Typen und Werte haben die folgenden Ausdrücke jeweils?
- A »8 / "2"«
- B »12/4/2«
? Verständnis von Fachbegriffen *
Zu einem (hypothetischen) binären Infixoperator »∘« wird erklärt: „Der Wert eines Ausdrucks, der aus dem Operator »∘« sowie einem zu diesem Operator gehörenden linken und rechten Operanden besteht, ist der Wert des linken Operanden.“.
Welchen Wert hat demnach »4∘7«?
Welchen Wert hat »4∘2∘7«?
(Kürzere Formulierung der Erklärung: „Der Wert des Operator »∘« ist der Wert seines linken Operanden.“.)
? Verständnis von Fachbegriffen (1) *
Angenommen die Division »/« wäre nicht linksassoziativ, sondern rechtsassoziativ. Welchen Wert hätte dann der Ausdruck »12/4/2«?
? Operanden und Operatoren *
Wie viele Operanden hat der erste Divisionsoperator »/« in dem Ausdruck »8/4/2«? Was sind diese Operanden? (Nicht die Werte der Operanden sind hier gesucht, sondern die Operandenausdrücke.)
Wie viele Operanden hat der zweite Divisionsoperator »/« in dem Ausdruck »8/4/2«? Was sind diese Operanden? (Nicht die Werte der Operanden sind hier gesucht, sondern die Operandenausdrücke.)
Welcher der beiden Divisionsoperatoren »/« wird bei der Ermittlung des Wertes des Ausdrucks »8/4/2« als letzter ausgeführt?