/*************************************************************************************************************************************/ /* */ /* T E S T D E L A F O N C T I O N ' HORNER_4_01(...) ' : */ /* */ /* */ /* Author of '$xtc/HORNER_4_01$c' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20181123115528). */ /* */ /*************************************************************************************************************************************/ #include "INCLUDES.01.I" #define P3(V1,V3) ((((a1111*V1)+a1110)*V3)+(a1101*V1)+a1100) #define P2(V1,V3) ((((a1011*V1)+a1010)*V3)+(a1001*V1)+a1000) #define P1(V1,V3) ((((a0111*V1)+a0110)*V3)+(a0101*V1)+a0100) #define P0(V1,V3) ((((a0011*V1)+a0010)*V3)+(a0001*V1)+a0000) #define HORNER_4_01(V1,V2,V3,V4) (((((P3(V1,V3)*V2)+P2(V1,V3))*V4)+P1(V1,V3))*V2)+P0(V1,V3) #define DIVISIBLE(valeur,diviseur,nom) \ { \ long int ivaleur=valeur; \ long int idiviseur=diviseur; \ \ if ((ivaleur % idiviseur) == 0) \ { \ \ if (OnATrouveUnFacteur == VRAI) \ { \ printf("x"); \ } \ else \ { \ printf(" = {"); \ } \ \ printf("%s",nom); \ /* Ce sont ces sorties qui ont permis l'enrichissement des 'GET_ARGUMENT_F(...)'s de */ \ /* 'v $ximcf/common$DEF sR_I2xR2xI1xR1' le 20181215103844, en les convertissant en fichiers */ \ /* de type '$sed' : */ \ /* */ \ /* :1,$s/\("..\)\(a\)\(1111\)\(=\)/\1\2\3\4"\1_I2xR2xI1xR1=/ */ \ /* :1,$s/\("..\)\(a\)\(1110\)\(=\)/\1\2\3\4"\1_I2xR2xI1=/ */ \ /* :1,$s/\("..\)\(a\)\(1101\)\(=\)/\1\2\3\4"\1_I2xI1xR1=/ */ \ /* :1,$s/\("..\)\(a\)\(1100\)\(=\)/\1\2\3\4"\1_I2xI1=/ */ \ /* :1,$s/\("..\)\(a\)\(1011\)\(=\)/\1\2\3\4"\1_I2xR2xR1=/ */ \ /* :1,$s/\("..\)\(a\)\(1010\)\(=\)/\1\2\3\4"\1_I2xR2=/ */ \ /* :1,$s/\("..\)\(a\)\(1001\)\(=\)/\1\2\3\4"\1_I2xR1=/ */ \ /* :1,$s/\("..\)\(a\)\(1000\)\(=\)/\1\2\3\4"\1_I2=/ */ \ /* :1,$s/\("..\)\(a\)\(0111\)\(=\)/\1\2\3\4"\1_R2xI1xR1=/ */ \ /* :1,$s/\("..\)\(a\)\(0110\)\(=\)/\1\2\3\4"\1_R2xI1=/ */ \ /* :1,$s/\("..\)\(a\)\(0101\)\(=\)/\1\2\3\4"\1_I1xR1=/ */ \ /* :1,$s/\("..\)\(a\)\(0100\)\(=\)/\1\2\3\4"\1_I1=/ */ \ /* :1,$s/\("..\)\(a\)\(0011\)\(=\)/\1\2\3\4"\1_R2xR1=/ */ \ /* :1,$s/\("..\)\(a\)\(0010\)\(=\)/\1\2\3\4"\1_R2=/ */ \ /* :1,$s/\("..\)\(a\)\(0001\)\(=\)/\1\2\3\4"\1_R1=/ */ \ /* :1,$s/\("..\)\(a\)\(0000\)\(=\)/\1\2\3\4"\1_=/ */ \ /* */ \ /* Il en fut de meme pour 'v $xiirc/$Fnota' le 20181215104936 : */ \ /* */ \ /* :1,$s/\(..\)a1111=/\1_I2xR2xI1xR1=/ */ \ /* :1,$s/\(..\)a1110=/\1_I2xR2xI1=/ */ \ /* :1,$s/\(..\)a1101=/\1_I2xI1xR1=/ */ \ /* :1,$s/\(..\)a1100=/\1_I2xI1=/ */ \ /* :1,$s/\(..\)a1011=/\1_I2xR2xR1=/ */ \ /* :1,$s/\(..\)a1010=/\1_I2xR2=/ */ \ /* :1,$s/\(..\)a1001=/\1_I2xR1=/ */ \ /* :1,$s/\(..\)a1000=/\1_I2=/ */ \ /* :1,$s/\(..\)a0111=/\1_R2xI1xR1=/ */ \ /* :1,$s/\(..\)a0110=/\1_R2xI1=/ */ \ /* :1,$s/\(..\)a0101=/\1_I1xR1=/ */ \ /* :1,$s/\(..\)a0100=/\1_I1=/ */ \ /* :1,$s/\(..\)a0011=/\1_R2xR1=/ */ \ /* :1,$s/\(..\)a0010=/\1_R2=/ */ \ /* :1,$s/\(..\)a0001=/\1_R1=/ */ \ /* :1,$s/\(..\)a0000=/\1_=/ */ \ /* */ \ \ OnATrouveUnFacteur=VRAI; \ } \ else \ { \ } \ } #define CALCUL(legende,initialisation,decomposer) \ { \ double polynome; \ \ a1111=0; \ a1110=0; \ a1101=0; \ a1100=0; \ a1011=0; \ a1010=0; \ a1001=0; \ a1000=0; \ a0111=0; \ a0110=0; \ a0101=0; \ a0100=0; \ a0011=0; \ a0010=0; \ a0001=0; \ a0000=0; \ \ initialisation; \ \ polynome=HORNER_4_01(R1,I1,R2,I2); \ \ printf("HORNER_4_01[%s] = %+g",legende,polynome); \ \ if (decomposer == VRAI) \ { \ int OnATrouveUnFacteur=FAUX; \ \ DIVISIBLE(polynome,I2,"I2"); \ DIVISIBLE(polynome,R2,"R2"); \ DIVISIBLE(polynome,I1,"I1"); \ DIVISIBLE(polynome,R1,"R1"); \ /* On notera qu'on utilise l'ordre {I2,R2,I1,R1} qui correspond a l'ordre (de gauche a */ \ /* droite) des indices des seize coefficients 'a'... */ \ \ if (OnATrouveUnFacteur == VRAI) \ { \ printf("}"); \ } \ else \ { \ } \ } \ else \ { \ } \ \ printf("\n"); \ } main() { double a1111,a1110,a1101,a1100; /* Definition du premier polynome. */ double a1011,a1010,a1001,a1000; /* Definition du second polynome. */ double a0111,a0110,a0101,a0100; /* Definition du troisieme polynome. */ double a0011,a0010,a0001,a0000; /* Definition du quatrieme polynome. */ double R1=2,R2=30,I1=4,I2=50; /* Qautre valeurs arbitraires permettant de valider facilement les calculs qui vont */ /* etre faits ci-apres... */ CALCUL("R1+R2",a0001=+1;a0010=+1;,FAUX); /* Definition de la partie Reelle de 'FgCsomme(...)' : */ /* */ /* R1+R2 --> +32.0000 */ /* */ CALCUL("I1+I2",a0100=+1;a1000=+1;,FAUX); /* Definition de la partie Imaginaire de 'FgCsomme(...)' : */ /* */ /* I1+I2 --> +54.0000 */ /* */ CALCUL("(R1.R2) - (I1.I2)",a0011=+1;a1100=-1;,FAUX); /* Definition de la partie Reelle de 'FgCproduit(...)' : */ /* */ /* (R1.R2) - (I1.I2) --> -140.000 */ /* */ CALCUL("(R1.I2) + (R2.I1)",a1001=+1;a0110=+1;,FAUX); /* Definition de la partie Imaginaire de 'FgCproduit(...)' : */ /* */ /* (R1.I2) + (R2.I1) --> +220.000 */ /* */ CALCUL("R1+R2 + alpha.(R1.I1)",a0001=+1;a0010=+1;a0101=0.0001;,FAUX); /* Definition de la partie Reelle "folklorique" (alpha=a0101=0.0001) de 'FgCsomme(...)' : */ /* */ /* R1+R2 + alpha.(R1.I1) --> +32.0008 */ /* */ /* (utilise pour 'v ''$xiMl/JULK.7n.21$ANGLAIS.$m4.$I'). */ CALCUL("I1+I2 + beta.(R2.I1)",a0100=+1;a1000=+1;a0110=0.0001,FAUX); /* Definition de la partie Imaginaire "folklorique" (beta=a0110=0.0001) de 'FgCsomme(...)' : */ /* */ /* I1+I2 + beta.(R2.I1) --> +54.0120 */ /* */ /* (utilise pour 'v ''$xiMl/JULK.7n.21$ANGLAIS.$m4.$I'). */ printf("\n"); R1=3; I1=5; R2=7; I2=11; /* On notera que {R1,I1,R2,I2} sont quatre nombres premiers differents, ce qui permet */ /* de savoir ensuite (par factorisation du polynome) de savoir quel produit a ete calcule */ /* ci-apres... */ CALCUL("a1111",a1111=1;,VRAI); CALCUL("a1110",a1110=1;,VRAI); CALCUL("a1101",a1101=1;,VRAI); CALCUL("a1100",a1100=1;,VRAI); CALCUL("a1011",a1011=1;,VRAI); CALCUL("a1010",a1010=1;,VRAI); CALCUL("a1001",a1001=1;,VRAI); CALCUL("a1000",a1000=1;,VRAI); CALCUL("a0111",a0111=1;,VRAI); CALCUL("a0110",a0110=1;,VRAI); CALCUL("a0101",a0101=1;,VRAI); CALCUL("a0100",a0100=1;,VRAI); CALCUL("a0011",a0011=1;,VRAI); CALCUL("a0010",a0010=1;,VRAI); CALCUL("a0001",a0001=1;,VRAI); CALCUL("a0000",a0000=1;,VRAI); }