Télécharger @fix.procedur

Retour à la liste

Numérotation des lignes :

  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.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales