Aller au contenu

Code opération RPG III / RPG/400 · IBM i (AS/400) · Calculs

SQRT

Racine carrée

Calcule la racine carrée du facteur 2 dans la zone résultat ; un nombre négatif arrête le programme.

Syntaxe

     C                     SQRT facteur2  result  72
     C                     SQRT facteur2  result  72H
Facteur 1 (18-27)
Toujours vide.
Facteur 2 (33-42)
Le nombre dont on cherche la racine : zone numérique ou littéral, positif.
Zone résultat (43-48)
Reçoit la racine.
Longueur (49-51)
Longueur totale de la zone résultat, décimales comprises. Renseignée quand la zone apparaît pour la première fois dans le programme : c'est ce qui la définit. Sans longueur, une zone encore inconnue provoque QRG7030, « La zone ou l'indicateur n'est pas défini ».
Décimales (52)
Nombre de décimales de la zone résultat ; 0 pour un entier.
Colonne 53
H demande l'arrondi (demi supérieur) : si le résultat a plus de décimales que la zone résultat, le résultat est arrondi à la valeur la plus proche (1,09945 devient 1,10 pour deux décimales). Sans H, les décimales en trop sont simplement coupées, sans arrondi.
Indicateurs de conditionnement (9-17)
Facultatif : l'opération n'est exécutée que si les indicateurs indiqués ont l'état demandé.
Effet
La zone résultat contient la racine carrée, coupée ou arrondie (H) aux décimales de la zone. Avec un facteur 2 négatif, le programme s'arrête sur l'erreur RPG0101.

À quoi ça sert

SQRT sert aux calculs géométriques (côté d'un carré à partir de son aire), aux écarts types et à certains calculs financiers. Les décimales de la zone résultat fixent la précision.

Exemple 1 : Racine exacte, coupée et arrondie

     H*  SQRT : racine carree exacte et arrondie
     C                     Z-ADD144       AIRE    70
     C                     SQRT AIRE      COTE    50
     C           'Racine'  DSPLY
     C           COTE      DSPLY
     C                     Z-ADD5         CINQ    30
     C                     SQRT CINQ      R1      52
     C                     SQRT CINQ      R2      52H
     C           'Sans H'  DSPLY
     C           R1        DSPLY
     C           'Avec H'  DSPLY
     C           R2        DSPLY
     C                     Z-ADD3         TROIS   30
     C                     SQRT TROIS     E1      30
     C                     SQRT TROIS     E2      30H
     C           'Entier'  DSPLY
     C           E1        DSPLY
     C           'Entier H'DSPLY
     C           E2        DSPLY
     C                     SETON                     LR

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

Racine
   12
Sans H
  223
Avec H
  224
Entier
  1
Entier H
  2

La racine de 144 est 12. Celle de 5 vaut 2,2360… : la zone à 2 décimales garde 223 sans H, 224 avec H. Celle de 3 (1,732…) dans une zone entière donne 1 sans H et 2 avec.

Exemple 2 : Nombre négatif

     H*  SQRT : racine d'un nombre negatif
     C                     Z-ADD-4        NEG     30
     C           'Avant'   DSPLY
     C                     SQRT NEG       RAC     52
     C           'Apres'   DSPLY
     C                     SETON                     LR

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

Avant
Erreur : RPG0101 - a tenté de calculer la racine carrée d'un nombre négatif (C G S D F).

La racine de −4 n'existe pas : après « Avant », le travail s'arrête sur RPG0101, « a tenté de calculer la racine carrée d'un nombre négatif ».

Le piège

Un facteur 2 négatif est une erreur fatale (RPG0101, deuxième exemple) : testez le signe avant, par exemple NOMBRE IFGE 0.

Sans H, la racine est coupée, pas arrondie : √5 donne 2,23 et non 2,24, et √3 donne 1 dans une zone entière.

En RPG ILE full free

En RPG ILE full free, la fonction intégrée %SQRT s'emploie dans une expression ; %DECH ou EVAL(H) arrondissent.

cote = %sqrt(aire);
eval(h) r2 = %sqrt(cinq);