1 : * @FIX PROCEDUR MAUGIS 07/10/26 21:15:44 5712 2 : 'DEBPROC' @FIX 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, la troncature du réel, à n décimales, sous forme de MOT; 7 : * 8 : *********************************************************************** 9 : * 10 : * Syntaxe : MOT1 = @FIX 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 : 29 : * L'étonnante ligne suivante est nécessaire pour que le caractère '.' 30 : * soit bien considéré comme un séparateur, avant que CHAINE ne l'utilise 31 : * comme caractère séparé. Sinonn, il ne sera plus jamais reconnu comme 32 : * le séparateur d'indice de table. 33 : bid = 'TABLE' ; bid.'ETOUI' = 'coucou' ; 34 : 35 : 'SI' ('NON' ('EXISTE' Indic)); 36 : Indic = 'STANDART'; 37 : 'FINSI'; 38 : 'SI' (n < 0); 39 : 'ERREUR' 'Le nombre de décimales désirées doit être positif'; 40 : 'FINSI'; 41 : 42 : * Un nombre normal est forcément supérieur à 5 ou inférieur à 10. 43 : 'SI' ( 'NON' ((x > 5.) 'OU' (x < 10.)) ); 44 : r = 'NaNQ'; 45 : 'QUIT' ARR; 46 : 'FINSI'; 47 : 48 : 'SI' (x < 0); 49 : Negatif = Vrai; 50 : 'SINON'; 51 : Negatif = Faux; 52 : 'FINSI'; 53 : x = 'ABS' x; 54 : 55 : * Recherche de l'exposant : 56 : 'SI' (x 'NEG' 0.); 57 : e0 = (LOG x) / (LOG 10.); 58 : 'SI' ((e0 > 0.) 'OU' (((ENTIER e0)*1.) 'EGA' e0 1e-14)); 59 : e = 'ENTIER' e0; 60 : 'SINON'; 61 : e = ('ENTIER' e0) - 1; 62 : 'FINSI'; 63 : 'SI' ((e < (-1 * n)) 'OU' (e '>EG' 10)); 64 : Indic = 'EXPOSANT'; 65 : 'FINSI'; 66 : 'SI' ('EGA' Indic 'EXPOSANT'); 67 : x = x * (10. ** (-1 * e)); 68 : 'FINSI'; 69 : 'SINON'; 70 : e = 0; 71 : 'FINSI'; 72 : 73 : * Calcul des décimales : 74 : r = 'CHAINE' ('ENTIER' x); 75 : 'SI' (n > 0); 76 : r = 'CHAINE' r '.'; 77 : 'REPETER' i n; 78 : y = 10 * (x - ('ENTIER' x) ); 79 : c = 'ENTIER' y; 80 : r = 'CHAINE' r c; 81 : x = y; 82 : 'FIN' i; 83 : 'FINSI'; 84 : 85 : * ajout du signe : 86 : 'SI' negatif; 87 : r = 'CHAINE' ('MOT' '-') r; 88 : 'FINSI'; 89 : 90 : * Affichage de l'exposant si pertinent : 91 : 'SI' ('EGA' Indic 'EXPOSANT'); 92 : r = 'CHAINE' r 'E' e; 93 : 'FINSI'; 94 : 'FINPROC' r; 95 : 96 :
© Cast3M 2003 - All rights reserved.
Disclaimer