next up previous
Next: Manipulation de textes Up: Initiation au Langage Fortran Previous: Les variables

Sous-sections

Opérateurs et fonctions mathématiques

Opérateurs arithmétiques


 
 
Tableau 5.1: Les opérateurs arithmétiques.
Addition +
Soustraction -
Multiplication *
Division /
Puissance **

Le tableau 5.1 donne la liste des opérateurs arithmétiques de Fortran. Ils sont listés par ordre de priorité croissante.

Dans une expression, on évalue donc d'abord ** puis /, puis *, et enfin + et -.

On peut aussi grouper des sous-expressions entre parenthèses.

Exemples

      x=a+b/c-d

évalue $a+\frac{b}{c}-d$.

      x=(a+b)/(c+d)

évalue $\frac{a+b}{c+d}$.

Conversion de type dans une opération

Lorsque deux opérandes de types différents interviennent de chaque coté d'un opérateur :
1.
l'opérande de type le plus faible est converti dans le type de l'autre opérande
2.
l'opération est effectuée, et le type du résultat est le type le plus fort

Les types sont classés dans l'ordre suivant (du plus fort au plus faible) :

Exemples

b**2 sera du type de b.

4*a*c sera du type le plus fort de a et de c.

Si a et c sont real, et b double precision, le résultat de b**2-4*a*c sera double precision, mais attention, le produit a*c sera effectué en simple précision, d'où une perte de précision possible.

Pièges classiques

2/3 sera du type integer. Autrement dit la division effectuée sera une division entière, et le résultat sera 0. Pour calculer effectivement deux tiers en réel, écrire : 2./3, 2/3. ou 2./3.

Idem pour i/ji et j sont deux variables integer. Écrire : real(i)/j

Conversion de type dans une affectation

Lorsqu'une variable est affectée avec une expression de type différent, le résultat de l'expression est converti dans le type de la variable.

Exemples

i=1.3456 affectera la variable integer i avec 1.

Attention :

x=2/3 affectera la variable real x avec 0.0 !!!

Fonctions mathématiques

Une fonction FORTRAN est une boite dans laquelle rentre un ensemble de grandeurs d'un type donné (les arguments) et de laquelle sort une grandeur d'un type donné (cf 10.4).

Certaines fonctions mathématiques sont prédéfinies dans le langage (tables 5.2 et 5.3). On n'utilisera pas la même fonction selon le type de l'argument. Par exemple la fonction sinus sera SIN pour un argument réel, DSIN pour un argument double precision, CSIN pour un argument complexe.

Important :

Exemples

      z=(a*sin(x)+b*cos(y)) / (a*sinh(x)+b*cosh(y))

Pour définir $\pi$ en double precision :

      pi=4d0*datan(1d0)


 
 
Tableau 5.2: Fonctions arithmétiques prédéfinies.
real double precision complex Fonction
SIN DSIN CSIN sin(x)
COS DCOS CCOS cos(x)
TAN DTAN   tg(x)
ASIN DASIN   arcsin(x)
ACOS DACOS   arccos(x)
ATAN DATAN   arctg(x)
SINH DSINH   sh(x)
$\cdots$ $\cdots$   $\cdots$
LOG10 DLOG10   log10(x)
LOG DLOG CLOG ln(x)
EXP DEXP CEXP exp(x)
SQRT DSQRT   $\sqrt{x}$


 
 
Tableau 5.3: Fonctions diverses prédéfinies.
integer real double
precision
complex Fonction
MAX0 AMAX1 DMAX1   max(x,y)
MIN0 AMIN1 DMIN1   min(x,y)
IABS ABS DABS CABS |x| ou |z|
INT AINT DINT   Partie entière
MOD AMOD DMOD   Reste dans la division entière

Fonctions de conversion

Ces fonctions permettent de convertir explicitement des données d'un type en un autre type. La figure 5.1 donne les noms des des différentes fonctions permettant à partir d'un type initial d'obtenir un autre type de valeur.


  
Figure 5.1: Fonctions de conversion de types.
\begin{figure}\fbox{\setlength{\unitlength}{2em}
\begin{picture}
(16.5,3.1)
\put...
...[b]}
\put(15.3,-1.1) {\makebox(0,0)[tc]{{CONJG}}}
}
\end{picture}}\end{figure}

Calcul en virgule flottante

La représentation des réels en virgule flottante entraîne fatalement des erreurs5.2 :

Ces erreurs peuvent être dramatiques, dans des algorithmes sensibles aux erreurs. Lors d'une opération simple, l'erreur effectuée est petite, mais si l'algorithme amplifie ces erreurs, le résultat peut être complètement faux.

Exemples

1.+1e-8 sera codé comme 1.

1d0+1d-16 sera codé comme 1d0

De nombreuses suites récurrentes exhibent les conséquences dramatiques des erreurs d'arrondi (voir TD).

Par exemple, la suite :

\begin{eqnarray*}u_0 &=& e-1 \\
u_n &=& n . u_{n-1}-1
\end{eqnarray*}


converge mathématiquement vers 0 mais selon la machine utilisée et la précision choisie, elle pourra converger vers $-\infty$, $\infty$ ou 0 ou même ne pas converger du tout !


next up previous
Next: Manipulation de textes Up: Initiation au Langage Fortran Previous: Les variables

Copyright © EMAC - 1996-1999 - Paul GABORIT