Ein arithmetischer Ausdruck besteht aus einer Folge von arithmetischen Operanden (Konstanten, Variablen, Feldelementen und Funktionsaufrufen), die durch (arithmetische) Operatoren und Klammern voneinander getrennt (oder miteinander verknüpft) sind.
Zum Beispiel ist
-(3.-X)*F + H/D**4
ein gültiger arithmetischer Ausdruck.
Arithmetische Operanden stellen Werte vom Typ INTEGER, REAL, DOUBLEPRECISION und COMPLEX dar. Arithmetische Operationen sind:
** Exponentiation
* Multiplikation
/ Division
+ Addition
- Subtraktion
Enthält der Ausdruck mehrere Operatoren, so gilt für die Auswertung die Reihenfolge:
1. ** mmm 2.* 1. ** 2. * und / 3. + und- .
Durch Klammern kann die Auswertungsreihenfolge beeinflußt werden.
Beispiele:
1. ** mmm uuuuu -Z**2 ist gleichbedeutend mit![]()
(-Z)**2 ergibt
![]()
Aufeinanderfolgende Operationen von gleichem Rang (* und / bzw. + und -) werden von links nach rechts bearbeitet:
A/B*C ist gleichbedeutend mit (A/B)*C
(und nicht A/(B*C)).
Aber: Aufeinanderfolgende Exponentiationen werden von rechts nach links zusammengefaßt:
2**3**2 ist
gleichbedeutend mit 2**(3**2),
also mit .
Mehrere aufeinanderfolgende Operatoren wie A**-B oder C+-D sind verboten. Durch Verwendung von Klammern wie A**(-B) oder C+(-D) werden diese Ausdrücke statthaft.
Überhaupt empfiehlt sich die fleißige Verwendung von Klammern auch an solchen Stellen, wo sie eigentlich nicht zwingend notwendig sind. Man schafft dadurch Klarheit und Übersichtlichkeit in den Anweisungen und beugt Zweifeln bei der Auswertungsreihenfolge vor.
Der Datentyp eines arithmetischen Ausdrucks ergibt sich aus dem Datentyp der Operanden nach der folgenden Tabelle:
=1.00mm
Tabelle 4.1. Ergebnistypenarithmetischer Ausdrücke.
(I = INTEGER, R = REAL, C =COMPLEX,
D = DOUBLEPRECISION, -- =nicht erlaubt)
Bei der Verknüpfung von Operanden unterschiedlichen Typs wird der vom Ergebnistyp abweichende Operand zunächst in den Ergebnistyp umgewandelt. (Ausnahme: Exponentiation mit INTEGER-Exponent). Der Ausdruck 2.*(2/3) hat beispielsweise den Wert 0.0, aber (2.*2)/3 hat den Wert 1.333333.... .
Bei der Division von INTEGER-Größen ist das Ergebnis wieder eine INTEGER-Größe, die durch Abschneiden der Nachkommastellen im mathematischen Quotienten entsteht:
12/8*2 ergibt 2,
12*2/8 ergibt 3.
Aus dem selben Grund ist 8/3*3.0 gleich 6.0 und nicht 8.0.
Generell muß vor der Verwendung von sogenannten mixed mode-Ausdrücken (arithmetische Ausdrücke mit Größen unterschiedlicher Typen) gewarnt werden, da sie eine beliebte Fehlerquelle darstellen (siehe obige Beispiele). Für die Typ-Umwandlung gibt es in FORTRAN Standardfunktionen, z.B. INT, FLOAT, usw..
Für die in arithmetischen Ausdrücken ebenfalls möglichen Funktionsaufrufe (z.B. Wurzel: SQRT, Sinus: SIN usw.) gelten die gleichen Regeln wie oben. Funktionen werden später erläutert (Abschnitt 4.2.17, 4.2.18).