/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        N O R M A L I S A T I O N   D E   C H A Q U E   E L E M E N T   D ' U N   F I C H I E R   N U M E R I Q U E                */
/*        P A R   R A P P O R T   A U X   E X T R E M A   D E   C E L U I - C I  :                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrv/normalise.01$I' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20230220103850).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E C H E R C H E   D E S   E X T R E M A   D ' U N   F I C H I E R   N U M E R I Q U E  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   RECHERCHE_COURANTE_DES_EXTREMA(valeur_courante                                                                                \
                                        ,compatibilite                                                                                  \
                                        ,minimum_courant,maximum_courant                                                                \
                                        ,conserver_une_valeur_particuliere,valeur_particuliere_a_conserver                              \
                                         )                                                                                              \
                    Bblock                                                                                                              \
                    Test(IFOU(IL_FAUT(compatibilite)                                                                                    \
                             ,IFET(IL_NE_FAUT_PAS(compatibilite)                                                                        \
                                  ,IFOU(IL_NE_FAUT_PAS(conserver_une_valeur_particuliere)                                               \
                                       ,IFET(IL_FAUT(conserver_une_valeur_particuliere)                                                 \
                                            ,IFNE(valeur_courante,valeur_particuliere_a_conserver)                                      \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         EGAL(minimum_courant,MIN2(valeur_courante,minimum_courant));                                                   \
                         EGAL(maximum_courant,MAX2(valeur_courante,maximum_courant));                                                   \
                                        /* Recherche des extrema qui ne peuvent etre une eventuelle valeur a conserver...            */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock

#define   RECHERCHE_DES_EXTREMA(forcer_les_extrema                                                                                      \
                               ,compatibilite                                                                                           \
                               ,minimum_ancien,maximum_ancien                                                                           \
                               ,minimum_courant,maximum_courant                                                                         \
                               ,ACCES_A_UN_ELEMENT_DU_FICHIER                                                                           \
                               ,conserver_une_valeur_particuliere,valeur_particuliere_a_conserver                                       \
                                )                                                                                                       \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(forcer_les_extrema))                                                                                   \
                         Bblock                                                                                                         \
                         EGAL(minimum_courant,minimum_ancien);                                                                          \
                         EGAL(maximum_courant,maximum_ancien);                                                                          \
                                        /* Forcage des extrema.                                                                      */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         DEFV(Int,INIT(index,UNDEF));                                                                                   \
                                                                                                                                        \
                         EGAL(minimum_courant,F_INFINI);                                                                                \
                         EGAL(maximum_courant,F_MOINS_L_INFINI);                                                                        \
                                                                                                                                        \
                         DoIn(index                                                                                                     \
                             ,PREMIER_ELEMENT_D_UN_FICHIER                                                                              \
                             ,DERNIER_ELEMENT_D_UN_FICHIER                                                                              \
                             ,I                                                                                                         \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              DEFV(Float,INIT(valeur_courante,ACCES_A_UN_ELEMENT_DU_FICHIER(index)));                                   \
                                        /* Recuperation de la valeur courante dans le fichier.                                       */ \
                                                                                                                                        \
                              RECHERCHE_COURANTE_DES_EXTREMA(valeur_courante                                                            \
                                                            ,compatibilite                                                              \
                                                            ,minimum_courant,maximum_courant                                            \
                                                            ,conserver_une_valeur_particuliere,valeur_particuliere_a_conserver          \
                                                             )                                                                          \
                              Eblock                                                                                                    \
                         EDoI                                                                                                           \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        N O R M A L I S A T I O N   D ' U N E   V A L E U R  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   NORMALISATION_D_UNE_VALEUR(valeur_courante                                                                                    \
                                    ,normaliser                                                                                         \
                                    ,ignorer_l_uniformite_du_ficher,valeur_a_forcer_dans_le_cas_de_l_uniformite_du_ficher               \
                                    ,conserver_une_valeur_particuliere,valeur_particuliere_a_conserver                                  \
                                    ,minimum_courant,maximum_courant                                                                    \
                                    ,minimum_nouveau,maximum_nouveau                                                                    \
                                    ,faire_un_AXPB                                                                                      \
                                     )                                                                                                  \
                    COND(IL_FAUT(normaliser)                                                                                            \
                        ,COND(IFOU(IL_FAUT(ignorer_l_uniformite_du_ficher)                                                              \
                                  ,IFET(IL_NE_FAUT_PAS(ignorer_l_uniformite_du_ficher)                                                  \
                                       ,IFNE(minimum_courant,maximum_courant)                                                           \
                                        )                                                                                               \
                                   )                                                                                                    \
                             ,COND(IFOU(IL_NE_FAUT_PAS(conserver_une_valeur_particuliere)                                               \
                                       ,IFET(IL_FAUT(conserver_une_valeur_particuliere)                                                 \
                                            ,IFNE(valeur_courante,valeur_particuliere_a_conserver)                                      \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,HOMZ(valeur_courante                                                                                 \
                                       ,minimum_courant,maximum_courant                                                                 \
                                       ,minimum_nouveau,maximum_nouveau                                                                 \
                                       ,minimum_nouveau                                                                                 \
                                        )                                                                                               \
                                  ,valeur_courante                                                                                      \
                                   )                                                                                                    \
                             ,valeur_a_forcer_dans_le_cas_de_l_uniformite_du_ficher                                                     \
                              )                                                                                                         \
                        ,COND(IL_NE_FAUT_PAS(faire_un_AXPB)                                                                             \
                             ,valeur_courante                                                                                           \
                             ,AXPB(SOUS(maximum_nouveau,minimum_nouveau),valeur_courante,minimum_nouveau)                               \
                              )                                                                                                         \
                         )



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