* @FIX PROCEDUR MAUGIS 07/10/26 21:15:44 5712 *********************************************************************** * * Petite procédure renvoyant, à partir d'un réel x et d'un nombre de * décimales n, la troncature du réel, à n décimales, sous forme de MOT; * *********************************************************************** * * Syntaxe : MOT1 = @FIX FLOT1 ENT1 ('EXPOSANT') ; * *********************************************************************** * * On peut demander la forme x = a E b ; mettre alors le mot 'EXPOSANT'. * * On passe automatiquement en notation EXPOSANT si l'affichage ne * contiendrait autrement que des 0 . * * Passage à l'exposant si x dépasse 1.D10. * *********************************************************************** * * N.B. : ENTIER renvoie la troncature et non pas la partie entière. * N.B. : ne marche pas avec de grands nombres. * N.B. : résultat lié à la précision machine * *********************************************************************** * L'étonnante ligne suivante est nécessaire pour que le caractère '.' * soit bien considéré comme un séparateur, avant que CHAINE ne l'utilise * comme caractère séparé. Sinonn, il ne sera plus jamais reconnu comme * le séparateur d'indice de table. bid = 'TABLE' ; bid.'ETOUI' = 'coucou' ; 'SI' ('NON' ('EXISTE' Indic)); Indic = 'STANDART'; 'FINSI'; 'SI' (n < 0); 'ERREUR' 'Le nombre de décimales désirées doit être positif'; 'FINSI'; * Un nombre normal est forcément supérieur à 5 ou inférieur à 10. 'SI' ( 'NON' ((x > 5.) 'OU' (x < 10.)) ); r = 'NaNQ'; 'QUIT' ARR; 'FINSI'; 'SI' (x < 0); Negatif = Vrai; 'SINON'; Negatif = Faux; 'FINSI'; x = 'ABS' x; * Recherche de l'exposant : 'SI' (x 'NEG' 0.); e0 = (LOG x) / (LOG 10.); 'SI' ((e0 > 0.) 'OU' (((ENTIER e0)*1.) 'EGA' e0 1e-14)); e = 'ENTIER' e0; 'SINON'; e = ('ENTIER' e0) - 1; 'FINSI'; 'SI' ((e < (-1 * n)) 'OU' (e '>EG' 10)); Indic = 'EXPOSANT'; 'FINSI'; 'SI' ('EGA' Indic 'EXPOSANT'); x = x * (10. ** (-1 * e)); 'FINSI'; 'SINON'; e = 0; 'FINSI'; * Calcul des décimales : r = 'CHAINE' ('ENTIER' x); 'SI' (n > 0); r = 'CHAINE' r '.'; 'REPETER' i n; y = 10 * (x - ('ENTIER' x) ); c = 'ENTIER' y; r = 'CHAINE' r c; x = y; 'FIN' i; 'FINSI'; * ajout du signe : 'SI' negatif; 'FINSI'; * Affichage de l'exposant si pertinent : 'SI' ('EGA' Indic 'EXPOSANT'); r = 'CHAINE' r 'E' e; 'FINSI'; 'FINPROC' r;
© Cast3M 2003 - Tous droits réservés.
Mentions légales