Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: Structures de Données Sup.: 3 Tableaux dynamiques Préc.: 3.4 Programmation avec les tableaux dynamiques Index Table des matières


Problèmes des réels double précision

   

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.

3.5.1 Les adresses

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

3.5.2 Les longueurs

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 :

IINFO('REEL2')
retourne le type effectivement utilisé : 5 ( DOUBLE PRECISION) sur une machine classique, 2 ( REAL) sur un ``super-ordinateur''.

TYPMOT
retourne NBREMO, nombre de mots occupés par un scalaire de type donné NTYTAB.

NBELEM
est le nombre d'éléments du tableau.

Cette séquence est plus longue que la simple instruction précédente, mais plus lisible et plus portable !


Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: Structures de Données Sup.: 3 Tableaux dynamiques Préc.: 3.4 Programmation avec les tableaux dynamiques Index Table des matières