1 : * @ARR PROCEDUR MAUGIS 07/10/26 21:15:13 5712 2 : 'DEBPROC' @ARR x*'FLOTTANT' n*'ENTIER' Indic/'MOT' ; 3 : *********************************************************************** 4 : * 5 : * Petite procédure renvoyant, à partir d'un réel x et d'un nombre de 6 : * décimales n, l'arrondi du réel, à n décimales, sous forme de MOT; 7 : * 8 : *********************************************************************** 9 : * 10 : * Syntaxe : MOT1 = @ARR FLOT1 ENT1 ('EXPOSANT') ; 11 : * 12 : *********************************************************************** 13 : * 14 : * On peut demander la forme x = a E b ; mettre alors le mot 'EXPOSANT'. 15 : * 16 : * On passe automatiquement en notation EXPOSANT si l'affichage ne 17 : * contiendrait autrement que des 0 . 18 : * 19 : * Passage à l'exposant si x dépasse 1.D10. 20 : * 21 : *********************************************************************** 22 : * 23 : * N.B. : ENTIER renvoie la troncature et non pas la partie entière. 24 : * N.B. : ne marche pas avec de grands nombres. 25 : * N.B. : résultat lié à la précision machine 26 : * 27 : *********************************************************************** 28 : 'SI' ('NON' ('EXISTE' Indic)); 29 : Indic = 'STANDART'; 30 : 'FINSI'; 31 : 'SI' (n < 0); 32 : 'ERREUR' 'Le nombre de décimales désirées doit être positif'; 33 : 'FINSI'; 34 : 35 : * Un nombre normal est forcément supérieur à 5 ou inférieur à 10. 36 : 'SI' ( 'NON' ((x > 5.) 'OU' (x < 10.)) ); 37 : r = 'NaNQ'; 38 : 'QUIT' ARR; 39 : 'FINSI'; 40 : 41 : 'SI' (x < 0); 42 : Negatif = Vrai; 43 : 'SINON'; 44 : Negatif = Faux; 45 : 'FINSI'; 46 : x = 'ABS' x; 47 : 48 : * Recherche de l'exposant : 49 : 'SI' (x 'NEG' 0.); 50 : e0 = (LOG x) / (LOG 10.); 51 : 'SI' ((e0 > 0.) 'OU' (((ENTIER e0)*1.) 'EGA' e0 1e-14)); 52 : e = 'ENTIER' e0; 53 : 'SINON'; 54 : e = ('ENTIER' e0) - 1; 55 : 'FINSI'; 56 : 'SI' ((e < (-1 * n)) 'OU' (e '>EG' 10)); 57 : Indic = 'EXPOSANT'; 58 : 'FINSI'; 59 : 'SI' ('EGA' Indic 'EXPOSANT'); 60 : x = x * (10. ** (-1 * e)); 61 : 'FINSI'; 62 : 'SINON'; 63 : e = 0; 64 : 'FINSI'; 65 : 66 : * Calcul des décimales : 67 : p = 'TABLE'; 68 : p.0 = ENTIER x; 69 : z = x; 70 : 'REPETER' i (n + 1); 71 : y = 10 * (z - ('ENTIER' z) ); 72 : p. &i = 'ENTIER' y; 73 : z = y; 74 : 'FIN' i; 75 : 76 : * Execution de l'arrondi : 77 : c = 0; 78 : id = n + 1; 79 : 'SI' (p.id > 5); 80 : c = 1; 81 : 'FINSI'; 82 : 'REPETER' i (n + 1); 83 : id = n + 1 - &i; 84 : p.id = p.id + c; 85 : 'SI' (('EGA' p.id 10) 'ET' ('NEG' Id 0)); 86 : p.id = 0; 87 : c = 1; 88 : 'SINON'; 89 : c = 0; 90 : 'FINSI'; 91 : 'SI' (('EGA' id 0) 'ET' (n > 0)); 92 : r = 'CHAINE' '.' r; 93 : 'FINSI'; 94 : 'SI' (&i 'EGA' 1); 95 : r = 'CHAINE' (p.id); 96 : 'SINON'; 97 : r = 'CHAINE' (p.id) r; 98 : 'FINSI'; 99 : 'FIN' i; 100 : 101 : * ajout du signe : 102 : 'SI' negatif; 103 : r = 'CHAINE' ('MOT' '-') r; 104 : 'FINSI'; 105 : 106 : * Affichage de l'exposant si pertinent : 107 : 'SI' ('EGA' Indic 'EXPOSANT'); 108 : r = 'CHAINE' r 'E' e; 109 : 'FINSI'; 110 : 'FINPROC' r; 111 : 112 :
© Cast3M 2003 - All rights reserved.
Disclaimer