next up previous contents
Nächste Seite: Arithmetische Anweisungen Aufwärts: Arithmetische Ausdrücke und Anweisungen Vorherige Seite: Arithmetische Ausdrücke und Anweisungen   Inhalt

Arithmetische Ausdrücke

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)$ 

(-Z)**2 ergibt $(-Z)^2 = Z^2$

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 $2^{(3^2)}$.

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
\begin{picture}(123.00,80.00)
\small\put(10.00,20.00){\line(0,1){60.00}}
\put(10...
...**}}}
\put(123.00,73.00){\makebox(0,0)[lc]{Exponent bei {\tt **}}}
\end{picture}


		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).


next up previous contents
Nächste Seite: Arithmetische Anweisungen Aufwärts: Arithmetische Ausdrücke und Anweisungen Vorherige Seite: Arithmetische Ausdrücke und Anweisungen   Inhalt
Lars Tornow 2003-03-31