Suiv.: Structures de Données
Sup.: 3 Tableaux dynamiques
Préc.: 3.4 Programmation avec les tableaux dynamiques
Index
Table des matières
Les adresses et les longueurs des tableaux sont données en mots, ce qui pose quelques problèmes avec les réels double précision.
Supposons que, selon les notation habituelles (annexe A), M, XM, DM représentent le même super-tableau de type INTEGER, REAL, DOUBLE PRECISION.
Après l'allocation d'un tableau dynamique en double précision, l'utilitaire READRE retourne toujours un indice IATAB impair.
Le premier élément de ce tableau est repéré par M(IATAB), XM(IATAB), ou DM((IATAB+1)/2).
L'élément I de ce tableau est repéré par M(IATAB-1+I), XM(IATAB-1+I), ou DM((IATAB-1)/2+I).
Cette dernière écriture est assez lourde. Rappelons qu'une solution plus élégante consiste à passer M(IATAB) en paramètre (section 3.4).
Le programmeur doit penser à allouer un tableau de longueur LTAB = NBELEM*NBREMO, où NBELEM est le nombre d'éléments du tableau (qui apparaît dans les déclarations Fortran) et NBREMO le nombre de mots occupés par un scalaire réel double précision (en général 2).
Par ailleurs, certains compilateurs permettent d'inhiber le type DOUBLE PRECISION, en le remplaçant automatiquement par le type REAL (notamment sur les ``super-ordinateurs'' à mots de 64 bits).
L'instruction :
CALL READRE(5, TAB, IATAB, LTAB, M, ICODE)
doit alors être remplacée par :
CALL READRE(2, TAB, IATAB, LTAB/2, M, ICODE)
La séquence suivante permet d'éviter les modifications :
NTYTAB = IINFO('REEL2')
CALL TYPMOT(NTYTAB, NBREMO)
CALL READRE(NTYTAB, TAB, IATAB, NBELEM*NBREMO, M, ICODE)
Dans cette séquence :
Cette séquence est plus longue que la simple instruction précédente, mais plus lisible et plus portable !