Aller au contenu

%SQRT

Racine carrée

Calcule la racine carrée d'un nombre positif ou nul.

Syntaxe

%SQRT(expression numérique)
expression numérique
Une zone, une constante ou une expression numérique supérieure ou égale à zéro.
Résultat
La racine carrée, avec une précision très supérieure à celle d'un montant. Le résultat est coupé quand on l'affecte à une zone qui a moins de décimales.

À quoi ça sert

Distance entre deux points, côté d'un carré de surface connue, écart type : la racine carrée intervient dans les calculs géométriques et statistiques. %SQRT évite d'écrire une puissance 0,5 et s'emploie directement dans une expression.

Exemple 1 : Côté d'un carré, hypoténuse et erreur

**free
// %SQRT : racine carree d'un nombre positif ou nul.
ctl-opt dftactgrp(*no) actgrp(*new);

dcl-ds pgmsts psds qualified;
  typ char(3) pos(40);
  num char(4) pos(43);
end-ds;
dcl-s surface   packed(9:2) inz(50.00);
dcl-s cote      packed(9:4);
dcl-s a         int(10) inz(3);
dcl-s b         int(10) inz(4);
dcl-s negatif   float(8) inz(-4);
dcl-s resultat  float(8);

cote = %sqrt(surface);
snd-msg 'Cote d''un carre de 50 m2 (troncature) : ' + %char(cote);
cote = %dech(%sqrt(surface) : 9 : 4);
snd-msg 'Cote avec %DECH (arrondi)               : ' + %char(cote);
snd-msg 'Hypotenuse 3-4 : ' + %char(%sqrt(a * a + b * b));
snd-msg 'Racine de 0    : ' + %char(%sqrt(0));

monitor;
  resultat = %sqrt(negatif);
on-error *all;
  snd-msg 'Racine de -4   : statut ' + %char(%status) + ' ' + pgmsts.typ + pgmsts.num;
endmon;

*inlr = *on;

Résultat réel, compilé et exécuté sur IBM i 7.5 :

Cote d'un carre de 50 m2 (troncature) : 7.0710
Cote avec %DECH (arrondi)               : 7.0711
Hypotenuse 3-4 : 5.00000000000000000000
Racine de 0    : .00000000000000000000000000000
Racine de -4   : statut 101 CEE2010

La racine de 50 est 7,07106… ; affectée à un packed(9:4) elle est coupée à 7.0710, alors qu'avec %DECH on obtient 7.0711. Pour un triangle de côtés 3 et 4, %SQRT(3 × 3 + 4 × 4) vaut 5, et la racine de 0 vaut 0.

Pour un nombre négatif, le programme s'arrête avec le message CEE2010 (statut 101).

Le piège

Un nombre négatif plante avec CEE2010 (« l'argument est inférieur à 0,0 ») : ce n'est pas un message RPG mais un message de l'environnement d'exécution. Testez le signe avant, ou entourez l'appel d'un monitor. Et comme pour toute conversion vers une zone décimale, le résultat est coupé, pas arrondi : 7,0710 au lieu de 7,0711. Utilisez %DECH pour arrondir.