/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T E S T   D E S    O U T I L S   " F O L K L O R I Q U E S "   P O U R   L E S   N O M B R E S   C O M P L E X E S  :      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xtc/OperationsFolkoriquesComplexes.01$vv$c' :                                                                  */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 20220822112834).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#include  <stdio.h>

double    a1111=0;
double    a1110=0;
double    a1101=0;
double    a1100=0;
double    a1011=0;
double    a1010=0;
double    a1001=0;
double    a1000=0;
double    a0111=0;
double    a0110=0;
double    a0101=0;
double    a0100=0;
double    a0011=0;
double    a0010=0;
double    a0001=0;
double    a0000=0;

#define   p_I2xR2xI1xR1                                                                                                                 \
                    a1111
#define   p_I2xR2xI1                                                                                                                    \
                    a1110
#define   p_I2xI1xR1                                                                                                                    \
                    a1101
#define   p_I2xI1                                                                                                                       \
                    a1100
#define   p_I2xR2xR1                                                                                                                    \
                    a1011
#define   p_I2xR2                                                                                                                       \
                    a1010
#define   p_I2xR1                                                                                                                       \
                    a1001
#define   p_I2                                                                                                                          \
                    a1000
#define   p_R2xI1xR1                                                                                                                    \
                    a0111
#define   p_R2xI1                                                                                                                       \
                    a0110
#define   p_I1xR1                                                                                                                       \
                    a0101
#define   p_I1                                                                                                                          \
                    a0100
#define   p_R2xR1                                                                                                                       \
                    a0011
#define   p_R2                                                                                                                          \
                    a0010
#define   p_R1                                                                                                                          \
                    a0001
#define   p_                                                                                                                            \
                    a0000

#define   aF                                                                                                                            \
                    a1111
#define   aE                                                                                                                            \
                    a1110
#define   aD                                                                                                                            \
                    a1101
#define   aC                                                                                                                            \
                    a1100
#define   aB                                                                                                                            \
                    a1011
#define   aA                                                                                                                            \
                    a1010
#define   a9                                                                                                                            \
                    a1001
#define   a8                                                                                                                            \
                    a1000
#define   a7                                                                                                                            \
                    a0111
#define   a6                                                                                                                            \
                    a0110
#define   a5                                                                                                                            \
                    a0101
#define   a4                                                                                                                            \
                    a0100
#define   a3                                                                                                                            \
                    a0011
#define   a2                                                                                                                            \
                    a0010
#define   a1                                                                                                                            \
                    a0001
#define   a0                                                                                                                            \
                    a0000

#define   REINITIALISATION                                                                                                              \
                    {                                                                                                                   \
                    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;                                                                                                            \
                    }

#define   FORME_COMPLETE                                                                                                                \
                    ((((((((((((((((((((a1111))                                                                                         \
                    *(R1)))+(a1110))))                                                                                                  \
                    *(I1)))+((((((a1101))*(R1)))                                                                                        \
                    +(a1100))))))*(R2)))                                                                                                \
                    +(((((((((((a1011))*(R1)))                                                                                          \
                    +(a1010))))*(I1)))+((((((a1001))                                                                                    \
                    *(R1)))+(a1000))))))))*(I2)))                                                                                       \
                    +((((((((((((((((a0111))                                                                                            \
                    *(R1)))+(a0110))))*(I1)))                                                                                           \
                    +((((((a0101))*(R1)))                                                                                               \
                    +(a0100))))))*(R2)))+(((((((((((a0011))                                                                             \
                    *(R1)))                                                                                                             \
                    +(a0010))))                                                                                                         \
                    *(I1)))+((((((a0001))*(R1)))                                                                                        \
                    +(a0000))))))))

#define   R                                                                                                                             \
                    R1
#define   I                                                                                                                             \
                    I1
#define   r                                                                                                                             \
                    R2
#define   i                                                                                                                             \
                    I2

#define   FORME_SIMPLIFIEE                                                                                                              \
                    (((((((aF*R)+aE)*I)+((aD*R)+aC))*r)+((((aB*R)+aA)*I)+((a9*R)+a8)))*i)                                               \
                    +((((((a7*R)+a6)*I)+((a5*R)+a4))*r)+((((a3*R)+a2)*I)+((a1*R)+a0)))

#define   PRINT(code,valeur)                                                                                                            \
                    {                                                                                                                   \
                    printf("     R1=%.0f I1=%.0f     R2=%.0f I2=%.0f",R1,I1,R2,I2);                                                     \
                    printf("     F_COMPLETE=%.0f",FORME_COMPLETE);                                                                      \
                    printf("     F_SIMPLIFIEE=%.0f",FORME_SIMPLIFIEE);                                                                  \
                    printf("     ValeurAttendue=%.0f",(double)valeur);                                                                  \
                    printf("     %s",code);                                                                                             \
                                                                                                                                        \
                    if        ((valeur != FORME_COMPLETE) || (valeur != FORME_SIMPLIFIEE))                                              \
                              {                                                                                                         \
                              printf("                    ERREUR");                                                                     \
                              }                                                                                                         \
                    else                                                                                                                \
                              {                                                                                                         \
                              }                                                                                                         \
                                                                                                                                        \
                    printf("\n");                                                                                                       \
                    REINITIALISATION;                                                                                                   \
                    }

main()
          {
          double    R1=2,I1=3;
          double    R2=5,I2=7;
                                        /* L'usage des nombres premiers {2,3,5,7} permet d'identifier sans ambiguite les             */
                                        /* facteurs d'un produit...                                                                  */

          p_I2xR2xI1xR1=1   ; PRINT("p_I2xR2xI1xR1",I2*R2*I1*R1);
          p_I2xR2xI1=1      ; PRINT("p_I2xR2xI1",I2*R2*I1);
          p_I2xI1xR1=1      ; PRINT("p_I2xI1xR1",I2*I1*R1);
          p_I2xI1=1         ; PRINT("p_I2xI1",I2*I1);
          p_I2xR2xR1=1      ; PRINT("p_I2xR2xR1",I2*R2*R1);
          p_I2xR2=1         ; PRINT("p_I2xR2",I2*R2);
          p_I2xR1=1         ; PRINT("p_I2xR1",I2*R1);
          p_I2=1            ; PRINT("p_I2",I2);
          p_R2xI1xR1=1      ; PRINT("p_R2xI1xR1",R2*I1*R1);
          p_R2xI1=1         ; PRINT("p_R2xI1",R2*I1);
          p_I1xR1=1         ; PRINT("p_I1xR1",I1*R1);
          p_I1=1            ; PRINT("p_I1",I1);
          p_R2xR1=1         ; PRINT("p_R2xR1",R2*R1);
          p_R2=1            ; PRINT("p_R2",R2);
          p_R1=1            ; PRINT("p_R1",R1);
          p_=1              ; PRINT("p_",1);
                                        /* Cela a montre les erreurs suivantes avec les definitions des 'p_...' :                    */
                                        /*                                                                                           */
                                        /*   F_COMPLETE=F_SIMPLIFIEE=70    ValeurAttendue=42   p_I2xI1xR1     en fait : I2xR2xR1     */
                                        /*   F_COMPLETE=F_SIMPLIFIEE=42    ValeurAttendue=70   p_I2xR2xR1     en fait : I2xI1xR1     */
                                        /*                                                                                           */
                                        /*   F_COMPLETE=F_SIMPLIFIEE=35    ValeurAttendue=21   p_I2xI1        en fait : I2xR2        */
                                        /*   F_COMPLETE=F_SIMPLIFIEE=21    ValeurAttendue=35   p_I2xR2        en fait : I2xI1        */
                                        /*                                                                                           */
                                        /*   F_COMPLETE=F_SIMPLIFIEE=10    ValeurAttendue=6    p_I1xR1        en fait : R2xR1        */
                                        /*   F_COMPLETE=F_SIMPLIFIEE=6     ValeurAttendue=10   p_R2xR1        en fait : I1xR1        */
                                        /*                                                                                           */
                                        /*   F_COMPLETE=F_SIMPLIFIEE=5     ValeurAttendue=3    p_I1           en fait : R2           */
                                        /*   F_COMPLETE=F_SIMPLIFIEE=3     ValeurAttendue=5    p_R2           en fait : I1           */
                                        /*                                                                                           */
          }



Copyright © Jean-François Colonna, 2022-2023.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2023.