REPONSE:
De manière générale, il apparaît que les nombres réels sont
spécifiés et calculés avec une précision de 6 chiffres après la
virgule. Lors de calculs, vous devez noter que cette précision est
maintenue pour chaque étape du calcul.
Lors d’une addition ou d’une soustraction, les exposants sont
alignés, c'est-à-dire la base et l’exposant sont les mêmes pour
ajouter et soustraire, seule la mantisse est ajoutée.
Exemple 1 :
Soit a calculer :
y = a + b - c;
z =1 / y;
avec
a = 100 000 000 en
valeur REAL = 1,000000*108
b =
1
en valeur REAL = 1,000000*100
c = 100 000 000 en
valeur REAL = 1,000000*108
- Dans la première étape du calcul (a + b) est
évalué :
(a + b) = 1,000000*108 + 1,000000*100
Apres alignement des exposants on obtient (a + b) =
1,000000*108 + 0,00000001*108. Les deux
dernières décimales sont tronquées, car elles ne sont pas affichées
(précision de 6 décimales)
- De ce fait, un Zéro est ajouté.
- Dans la deuxième étape du calcul ((a + b)-c), c est
soustrait au résultat du calcul de l’expression précédente :
((a + b)-c) = 1,000000*108 -
1,000000*108 = 0,000000e0
- Si z est déterminé, cela emmène alors a une division par
0
La solution correcte est obtenue dans ce cas en convertissant le
calcul.
y = a - c + b;
z = 1 / y;
Maintenant, après le calcul (a - c), le résultat
0,000000e0 est obtenu, puis dans la deuxième étape du
calcul ((a -c) + b) l’addition de nombre au format REAL
conduit a un résultat exact.
y = 0,000000*100 + 1,00000*100 =
1,000000*100
A cause de cela, avant d’effectuer un calcul, vous devez toujours
vérifier la meilleur manière d’effectuer le calcul.
De plus amples informations sont également disponible sur l’aide en
ligne sous la rubrique « Type de donnée REEL ».
Exemple 2 :
Comme exemple, le nombre REAL 160.0 doit être divisé par le
nombre REAL 100.0. Ce calcul peut être effectué de deux manières,
soit avec 160.0 / 100.0 soit avec 160.0 * 0.01. Dans
le tableau 1, les deux variantes retournent le même résultat, mais
pas la même précision de calcul en format hexadécimal.
| Variante 1
: |
Variante 2
: |
| STEP 7 |
S7-SCL |
STEP 7 |
S7-SCL |
| L 1.6e+002 |
X1 = 1.6e+002 |
L 1.6e+002 |
X3 = 1.6e+002 |
| L 1.0e-002 |
X2 = 1.0e-002 |
L 1.0e+002 |
X4 = 1.0e+002 |
| *R |
Y1 = X1 * X2
= 1.6 * 1.0 e(+002-002) |
/R |
Y2 = X3 / X4
= (1.6 / 1.0) e(+002-002) |
| T MD0 |
Y1 = 1.6 |
T MD4 |
Y2 = 1.6 |
Tableau 1 : deux variantes de division de nombres de type REAL
dans l'éditeur CONT/LIST/LOG
La raison de cette différence vient du fait que les deux nombres
réels de la première variante (160.0 et 0.01) se trouvent plus
éloignés l'un de l'autre que ceux de la deuxième variante (160.0 et
100.0). Cette particularité sur la précision du calcul est valable
en STEP 7 aussi bien dans l'éditeur CONT/LIST/LOG qu'avec le
logiciel optionnel S7-SCL.
Exemple de calcul dans l'éditeur CONT/LIST/LOG du STEP 7
: Dans la table de variable (figure 1) se trouvent les deux
double-mots de mémentos MD0 et MD4 une fois représentés en format
hexadécimal et une fois au format virgule flottante. Les nombres
REAL des deux variantes sont égaux à 1.6, mais la représentation
hexadécimale est différente sur la dernière position d'une valeur
HEX.
Fig. 1 : Programme des deux variantes de calcul dans l'éditeur
CONT/LIST/LOG.
Exemple de calcul avec l'option S7-SCL : Le programme
S7-SCL suivant contient deux fonctions. Avec la fonction FC10,
c'est la division des deux nombres REAL "X1*X2" qui est réalisée et
avec la fonction FC11, c'est la division "X1/X2". Les résultats
sont retournés dans les double-mots de mémentos MD10 et MD20 à
l'appel des fonctions dans l'OB1.
Fig. 2 : Programme S7-SCL pour le calcul des deux variantes
selon le tableau 1
les résultats des fonctions (MD10 et MD20) sont représentés dans
la table de variables d'une part au format hexadécimal et d'autre
part au format virgule flottante. Ici aussi les nombres REAL des
deux variantes sont égaux à 1.6 mais la représentation hexadécimale
diffère sur la dernière position d'une valeur HEX.
Fig. 3 : Table de variables avec la représentation des résultats
en format HEX et virgule flottante en S7-SCL
Mots-clefs: Précision de calcul
|