Composant polonaise inverse

NomDescription
Polonaise Inverse

Demo.exe
Composant non-visuel qui calcule en Polonaise Inverse.
- Compilation : L'expression est compilé et les coefficients sont convertis en extended. Les erreurs de piles y sont détectées ;
- Encemensement Les variables peuvent être introduites sous forme Numérique ou ASCII ;
- Résultats : String ou Extended;
- Sommet de la pile données : Le sommet est libéré à l'appel de la fonction evalue(...) ;
- Une erreur de calcul entraîne l'arrêt jusqu'à l'intervention du programme maître ;
- Le sommet de la pile subit l'opération ;
- Fonctions implémentées :
==Arithmétiques : +, -, *, / ;
==Trigonométriques (angle en radians) : Sin, Cos, Tan, ASin, ACos, ATan ;
==Hyperboliques : HSin, HCos, HTan, AHSin, AHCos, AHTan ;
==Comparaisons (vrai=1, faux=0) : < , =, >, >=, =>, <=, =<, <>, >< ;
==Probabilités (min=0, max=1) : et, ou, exo, sans, net, nou, nexo, nsans, non ;
==Linéaires : Exp, Ln, ^, /^, ! :

Exemples:           Résultats              Explications                 Remarque                  
5 3 +                 8                    3 + 5 = 8
9 1 -                -8                    1 - 9 = - 8                  1 est le sommet de la pile
3 3 *                 9 
2 8 /                 4                    8 / 2 = 4                    8 est le sommet de la pile
2 3 ^                 9                    3 ^ 2 = 9                    3 est le sommet de la pile
7 3 >                 0                    3 > 7 = 0 (faux)             3 est le sommet de la pile
3.1 3.1 =>            1                    3.1 => 3.1 = 1(vrai)
1 1 et                1                    1 * 1 = 1  
0 1 et                0                    1 * 0 = 0  
0.3 0.6 et            0.18                 0.6 * 0.3                    Pour 0 < x < 1
0.3 0.6 ou            0.72                 0.6 + 0.3 - 0.6 * 0.3        Pour 0 < x < 1
1.5 0.4 ou            1                    min(1.5 + 0.4 - 1.5*0.4 = 1.3 , 1) = 1;
-3.2 0.2 ou           0                    max(-3.2 + 0.2 - -3.2*0.2 = 2.36, 0) = 0
1.3 -8 ^             16                    -8^(4/3) = (-8 ^1/3 = -2)^4 = 16    (Peut être long!)
2.3 -8 ^           -128                    -8^(7/3) = (-8 ^1/3 = -2)^7 = -128  (Peut être long!)
5 !                 120 
5.5 !               287.885277815044       Les factoriels réels sont approximés
6 !                 720 

Comparatif d'une expression compilée avec Polonaise_inverse(D6) vs Delphi6 : for i:=0 to 1e8 do ...

Test              Polonaise(s)       Delphi6(s)      Polonaise/Delphi
5 * 32               32.9               1.7               19.4
5 * 32 * 41          48.9               2.4               20.3 
sin(1)               41.7              10.4                4.0  
cos(sin(5))          72.4              35.1                2.1
tan(cos(sin(1))     101.7              46.7                2.2

Conclusion :  Dans les expressions de base, Delphi ira 20 fois plus vite que Polonaise_inverse. 
La ratio tombe a 2 fois dès que les expressions sont préprogrammées.