_______________________________________________________________________________________________________________________________________
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E S   E N S E M B L E S   " I T E R A T I F S "   D A N S   L E   P L A N   C O M P L E X E ,              */
/*        D A N S   L E   C O R P S   D E S   Q U A T E R N I O N S   ( O U   " H Y P E R - C O M P L E X E " ) ,                    */
/*        E T   D A N S   L E   C O R P S   D E S   O C T O N I O N S   ( O U   " H Y P E R - H Y P E R - C O M P L E X E " )  :     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Lorsqu'un parametre peut prendre deux                                                                          */
/*                  valeurs 'M' et 'J' suivant que l'on                                                                              */
/*                  calcule l'ensemble de Mandelbrot ou un                                                                           */
/*                  ensemble de Julia, on le note :                                                                                  */
/*                                                                                                                                   */
/*                                      (M,J), avec                                                                                  */
/*                                                                                                                                   */
/*                  donc dans l'ordre Mandelbrot, puis Julia...                                                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$ximcf/iterations$FON' :                                                                                        */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 19870000000000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O N T R O L E   D E   L ' A R I T H M E T I Q U E   E T E N D U E                                                        */
/*        L O R S   D E   C A L C U L S   S U R   L E S   N O M B R E S   C O M P L E X E S  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#ifdef    FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_COMPLEXES
DEFV(Common,DEFV(Logical,_______VERSION__ximcf_iterations_____ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_COMPLEXES));
                                        /* Indicateur introduit le 20070129121923...                                                 */
#Aifdef   FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_COMPLEXES
DEFV(Common,DEFV(Logical,_______VERSION__ximcf_iterations_____ARITHMETIQUE_DE_BASE_DANS_LES_NOMBRES_COMPLEXES));
                                        /* Indicateur introduit le 20070129133050...                                                 */
#Eifdef   FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_COMPLEXES

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H O I X   E N T R E   V I S U A L I S E R   L E   N O M B R E   D ' I T E R A T I O N S                                  */
/*        O U   L ' A P P A R T E N A N C E   A   L ' E N S E M B L E  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   APPARTENANCE_A_L_ENSEMBLE                                                                                                     \
                    BLANC
#define   NON_APPARTENANCE_A_L_ENSEMBLE                                                                                                 \
                    NOIR
#define   fAPPARTENANCE_A_L_ENSEMBLE                                                                                                    \
                    FU
#define   fNON_APPARTENANCE_A_L_ENSEMBLE                                                                                                \
                    FZERO
                                        /* Codes de l'appartenance et de la non appartenance (introduits le 20091119165650).         */

DEFV(Common,DEFV(Logical,ZINT(iterations_dans_C_HC_HHC_____visualiser_l_appartenance_plutot_que_le_nombre_d_iterations,FAUX)));
                                        /* Introduit le 20091119140032 afin de pouvoir visualiser la non appartenance ('NOIR') et    */
                                        /* l'appartenance ('BLANC') plutot que le nombre d'iterations...                             */
DEFV(Common,DEFV(Logical,ZINT(iterations_dans_C_HC_HHC_____renormaliser_le_nombre_d_iterations,VRAI)));
                                        /* Introduit le 20150126131332 afin de pouvoir ne pas renormaliser le nombre courant         */
                                        /* d'iterations et ainsi de visualiser sa "vraie" valeur...                                  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H O I X   E N T R E   A R G U M E N T [ S ]   E T   M O D U L E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(iterations_dans_C_HC_HHC_____memoriser_le_module_plutot_que_les_arguments,FAUX)));
DEFV(Common,DEFV(Float,ZINT(iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments
                           ,COORDONNEE_BARYCENTRIQUE_MINIMALE
                            )
                 )
     );
DEFV(Common,DEFV(Float,ZINT(iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments
                           ,COORDONNEE_BARYCENTRIQUE_MAXIMALE
                            )
                 )
     );
                                        /* Lorsque c'est une valeur de type angulaire (argument[s]) qui doit etre memorisee, cet     */
                                        /* indicateur permet de memoriser plutot le module (introduite le 20061218125816).           */
                                        /*                                                                                           */
                                        /* Rappelons bien le 20061219121238 que le renvoi du module ne peut se faire qu'en           */
                                        /* activant la visualisation de[s] argument[s] de sortie. Ainsi, par exemple avec la         */
                                        /* commande 'v $xrc/mandel.01$K', il faudra utiliser les arguments suivants :                */
                                        /*                                                                                           */
                                        /*                  arguments=VRAI                                                           */
                                        /*                                                                                           */
                                        /* qui demande la visualisation de l'argument de sortie, ainsi que de plus :                 */
                                        /*                                                                                           */
                                        /*                  etendre_precision=VRAI                                                   */
                                        /*                  argument=FAUX                 (ou son "complement" : module=VRAI)        */
                                        /*                                                                                           */
                                        /* pour remplace la sortie de l'argument de sortie par celle su module...                    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E X T E N S I O N   D E   L A   P R E C I S I O N   D E S   R E S U L T A T S  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(iterations_dans_C_HC_HHC_____etendre_la_precision,FAUX)));
                                        /* Possibilite introduite le 20061218125816 qui permet, si besoin est, de renvoyer des       */
                                        /* resultats de type 'genere_Float' (au lieu de 'genere_p')...                               */

#pragma   xcc__cpp_Z__liste_utiles      $ximcf/iterations$EXT         iterations_dans_C_HC_HHC_____IFmageR    $xbmcf/iterations
DEFV(Common,DEFV(Statique,DEFV(imageF,iterations_dans_C_HC_HHC_____IFmageR)));
                                        /* Image statique de type 'genere_Float' contenant, si besoin est, la version de l'image     */
                                        /* Resultat en precision "etendue". On notera que cette facon de proceder n'est pas tres     */
                                        /* "propre" ; en effet, il aurait ete plus elegant soit de dupliquer toutes les fonctions    */
                                        /* afin qu'elles renvoie d'un cote des images de type 'image' et de l'autre des images de    */
                                        /* type 'imageF'. Mais cela aurait implique un travail enorme et risque. Il aurait peut-etre */
                                        /* aussi ete possible de faire que les fonctions puissent etre en quelque sorte de deux      */
                                        /* types differents simultanement ; mais cela aurait ete contraire aux grands principes.     */
                                        /* Cette solution consistant donc d'une part a continuer a renvoyer systematiquement une     */
                                        /* image de type 'image' (quitte a ne pas la memoriser en retour) et d'autre part a renvoyer */
                                        /* eventuellement, via une image 'Common', une version de type 'imageF' fut donc beaucoup    */
                                        /* simple a implementer : tant pis pour l'elegance...                                        */

#define   INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC                                        \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(iterations_dans_C_HC_HHC_____etendre_la_precision))                                                    \
                         Bblock                                                                                                         \
                         CALS(IFinitialisation(iterations_dans_C_HC_HHC_____IFmageR,FZERO));                                            \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduite le         */ \
                                        /* 20061219090342).                                                                          */

#define   RANGEMENT_DU_NIVEAU_COURANT_ET_EVENTUELLEMENT_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC                         \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(iterations_dans_C_HC_HHC_____etendre_la_precision))                                                    \
                         Bblock                                                                                                         \
                         storeF_point(niveau_courant_precis,iterations_dans_C_HC_HHC_____IFmageR,X,Y);                                  \
                                        /* Marquage eventuel du point courant de facon precise...                                    */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    store_point(niveau_courant,imageR,X,Y,FVARIABLE);                                                                   \
                                                                                                                                        \
                    EGAL(niveau_courant_maximal,MAX2(niveau_courant,niveau_courant_maximal));                                           \
                                        /* Introduit le 20200627112145 a cause d'une remarque faite a cette date concernant le       */ \
                                        /* marquage des racines N-iemes de l'unite calculee exactement...                            */ \
                    Eblock                                                                                                              \
                                        /* Marquage du point courant (procedure introduite le 20061218125816).                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V A L I D A T I O N   D E   L A   F E N E T R E   D E   C A L C U L   D E M A N D E E  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(iterations_dans_C_HC_HHC_____editer_la_fenetre_courante_avant_et_apres_homothetie,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(iterations_dans_C_HC_HHC_____editer_la_fenetre_courante_sous_forme_OX_EX_OY_EY,VRAI)));
                                        /* Introduit le 20091122134759 afin de pouvoir editer la fenetre courante avant et apres     */
                                        /* homothetie, puis complete le 20110115102345 afin de pouvoir choisir entre deux formats    */
                                        /* {"OX=","EX=","OY=","EY="} (par defaut) et {"xbg=","ybg=","xhd=","yhd="} (pour simplifier  */
                                        /* l'exploitation de ces editions...).                                                       */

#define   VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE                                                     \
                    Bblock                                                                                                              \
                    Test(IFLE(Reelle(INDIRECT(coin_haut_droite)),Reelle(INDIRECT(coin_bas_gauche))))                                    \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("la relation d'ordre entre les abscisses de la fenetre est incorrecte, ou elles sont egales");    \
                         PRINT_ERREUR("de toute facon, elles sont permutees");                                                          \
                         fSWAP(Reelle(INDIRECT(coin_bas_gauche)),Reelle(INDIRECT(coin_haut_droite)));                                   \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IFLE(Imaginaire(INDIRECT(coin_haut_droite)),Imaginaire(INDIRECT(coin_bas_gauche))))                            \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("la relation d'ordre entre les abscisses de la fenetre est incorrecte, ou elles sont egales");    \
                         PRINT_ERREUR("de toute facon, elles sont permutees");                                                          \
                         fSWAP(Imaginaire(INDIRECT(coin_bas_gauche)),Imaginaire(INDIRECT(coin_haut_droite)));                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IL_FAUT(iterations_dans_C_HC_HHC_____editer_la_fenetre_courante_avant_et_apres_homothetie))                    \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(iterations_dans_C_HC_HHC_____editer_la_fenetre_courante_sous_forme_OX_EX_OY_EY))                  \
                                        /* Le 20110115102345 fut introduit le choix entre le format {"OX=","EX=","OY=","EY="}        */ \
                                        /* (par defaut) et le format {"xbg=","ybg=","xhd=","yhd="} (pour simplifier l'exploitation   */ \
                                        /* de ces editions...).                                                                      */ \
                              Bblock                                                                                                    \
                              CAL3(Prme4("{{%+.^^^,%+.^^^},{%+.^^^,%+.^^^}}"                                                            \
                                        ,Reelle(INDIRECT(coin_bas_gauche)),Imaginaire(INDIRECT(coin_bas_gauche))                        \
                                        ,Reelle(INDIRECT(coin_haut_droite)),Imaginaire(INDIRECT(coin_haut_droite))                      \
                                         )                                                                                              \
                                   );                                                                                                   \
                              CALS(FPrme0(" --> "));                                                                                    \
                              CAL3(Prme4("{{%+.^^^,%+.^^^},{%+.^^^,%+.^^^}}"                                                            \
                                        ,X_COIN_BAS_GAUCHE,Y_COIN_BAS_GAUCHE                                                            \
                                        ,X_COIN_HAUT_DROITE,Y_COIN_HAUT_DROITE                                                          \
                                         )                                                                                              \
                                   );                                                                                                   \
                              CALS(FPrme0(" == "));                                                                                     \
                              CAL3(Prme4("{OX=%+.^^^ EX=%+.^^^ OY=%+.^^^ EY=%+.^^^}"                                                    \
                                        ,X_COIN_BAS_GAUCHE,X_COIN_HAUT_DROITE                                                           \
                                        ,Y_COIN_BAS_GAUCHE,Y_COIN_HAUT_DROITE                                                           \
                                         )                                                                                              \
                                   );                                                                                                   \
                              CALS(FPrme0(" == "));                                                                                     \
                              CAL3(Prme4("[%+.^^^,%+.^^^]x[%+.^^^,%+.^^^]"                                                              \
                                        ,X_COIN_BAS_GAUCHE,X_COIN_HAUT_DROITE                                                           \
                                        ,Y_COIN_BAS_GAUCHE,Y_COIN_HAUT_DROITE                                                           \
                                         )                                                                                              \
                                   );                                                                                                   \
                                        /* Ces editions ont ete introduites le 20091122134759 pour aider a la determination des      */ \
                                        /* "bonnes" fenetres de calcul (c'est-a-dire la ou il se passe quelque chose...).            */ \
                                        /*                                                                                           */ \
                                        /* Le 20091123094717 on notera le lien avec 'v $xiidX/fonct$vv$FON 20091123093212' qui       */ \
                                        /* permet de connaitre les coordonnees normalisees dans un certain espace des points d'une   */ \
                                        /* image.                                                                                    */ \
                                        /*                                                                                           */ \
                                        /* Le 20091123101627, j'ai complete le format :                                              */ \
                                        /*                                                                                           */ \
                                        /*                  "{{%+.^^g,%+.^^g},{%+.^^g,%+.^^g}}"                                      */ \
                                        /*                                                                                           */ \
                                        /* par quelque chose de compatible avec 'v $xci/display$K 20091123094324' et on aura alors   */ \
                                        /* fortement interet a utiliser simultanement les options :                                  */ \
                                        /*                                                                                           */ \
                                        /*                  ModeFlot='f'                                                             */ \
                                        /*                  ChiffresFlot=...                                                         */ \
                                        /*                                                                                           */ \
                                        /* avec conjointement :                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  editer_XY_curseur=VRAI                                                   */ \
                                        /*                  normaliser_XY_curseur=VRAI                                               */ \
                                        /*                                                                                           */ \
                                        /* afin de reduire la precision (16 par defaut...) et de garantir le nombre de decimales.    */ \
                                        /*                                                                                           */ \
                                        /* Le 20091123120321, les formats "^^g" sont passes a "^^^" pour plus de souplesse...        */ \
                                        /*                                                                                           */ \
                                        /* Le 20151014145152, j'ai ajoute une edition supplementaire de la forme : [OX,EX]x[OYxEY].  */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              CAL3(Prme4("AvantHomothetie='xbg=%+.^^^ ybg=%+.^^^ xhd=%+.^^^ yhd=%+.^^^'"                                \
                                        ,Reelle(INDIRECT(coin_bas_gauche)),Imaginaire(INDIRECT(coin_bas_gauche))                        \
                                        ,Reelle(INDIRECT(coin_haut_droite)),Imaginaire(INDIRECT(coin_haut_droite))                      \
                                         )                                                                                              \
                                   );                                                                                                   \
                              CALS(FPrme0(" --> "));                                                                                    \
                              CAL3(Prme4("ApresHomothetie='xbg=%+.^^^ ybg=%+.^^^ xhd=%+.^^^ yhd=%+.^^^'"                                \
                                        ,X_COIN_BAS_GAUCHE,Y_COIN_BAS_GAUCHE                                                            \
                                        ,X_COIN_HAUT_DROITE,Y_COIN_HAUT_DROITE                                                          \
                                         )                                                                                              \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                                        /* Le 20110117132135, les couples "{...}" ont ete remplaces par des couples "'...'" plus     */ \
                                        /* faciles a gerer au niveau du '$CSH' ('v $xiirc/.MANE.B1.1.$U AvantHomothetie').           */ \
                         ETes                                                                                                           \
                                                                                                                                        \
                         CALS(Fsauts_de_lignes(UN));                                                                                    \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Validation et remise en ordre eventuelle de la fenetre de calcul demandee avant son       */ \
                                        /* eventuelle extension homothetique...                                                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A S S A G E   D E S   C O O R D O N N E E S   D E   L ' I M A G E                                                        */
/*        A U X   C O O R D O N N E E S   D U   P L A N  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   X_COIN_BAS_GAUCHE                                                                                                             \
                    CHANGEMENT_HOMOTHETIQUE_D_ABSCISSE_GAUCHE(Reelle(INDIRECT(coin_bas_gauche))                                         \
                                                             ,Reelle(INDIRECT(coin_haut_droite))                                        \
                                                              )
#define   Y_COIN_BAS_GAUCHE                                                                                                             \
                    CHANGEMENT_HOMOTHETIQUE_D_ORDONNEE_BAS(Imaginaire(INDIRECT(coin_bas_gauche))                                        \
                                                          ,Imaginaire(INDIRECT(coin_haut_droite))                                       \
                                                           )

#define   X_COIN_HAUT_DROITE                                                                                                            \
                    CHANGEMENT_HOMOTHETIQUE_D_ABSCISSE_DROITE(Reelle(INDIRECT(coin_bas_gauche))                                         \
                                                             ,Reelle(INDIRECT(coin_haut_droite))                                        \
                                                              )
#define   Y_COIN_HAUT_DROITE                                                                                                            \
                    CHANGEMENT_HOMOTHETIQUE_D_ORDONNEE_HAUT(Imaginaire(INDIRECT(coin_bas_gauche))                                       \
                                                           ,Imaginaire(INDIRECT(coin_haut_droite))                                      \
                                                            )

                                        /* Definition des coins "bas-gauche" et "haut-droite" de la fenetre en fonction du rapport   */
                                        /* des dimensions de cette derniere ; on notera que si celle-ci n'est pas carree, ce sont    */
                                        /* ses abscisses dans le plan Complexe qui sont re-ajustees afin de s'accomoder du rapport   */
                                        /* suivant :                                                                                 */
                                        /*                                                                                           */
                                        /*                   dimX                                                                    */
                                        /*                  ------                                                                   */
                                        /*                   dimY                                                                    */
                                        /*                                                                                           */
                                        /* de la facon suivante (en supposant ce rapport egal a 2) :                                 */
                                        /*                                                                                           */
                                        /*                           -----------------                                               */
                                        /*                          |        .        |                                              */
                                        /*                          |        .        |                                              */
                                        /*                          |        .        |                                              */
                                        /*                          |        .        |                                              */
                                        /*                          |        .        |                                              */
                                        /*                          |        .        |                                              */
                                        /*                          |        .        |                                              */
                                        /*                          |        .        |                                              */
                                        /*                           -----------------                                               */
                                        /*                         .                    .                                            */
                                        /*                        .                      .                                           */
                                        /*                       .                        .                                          */
                                        /*                      .                          .                                         */
                                        /*                     .                            .                                        */
                                        /*                    .                              .                                       */
                                        /*                   ---------------------------------                                       */
                                        /*                  |                .                |                                      */
                                        /*                  |                .                |                                      */
                                        /*                  |                .                |                                      */
                                        /*                  |                .                |                                      */
                                        /*                  |                .                |                                      */
                                        /*                  |                .                |                                      */
                                        /*                  |                .                |                                      */
                                        /*                  |                .                |                                      */
                                        /*                   ---------------------------------                                       */
                                        /*                                   .                                                       */
                                        /*                                  /|\                                                      */
                                        /*                                   |                                                       */
                                        /*                                   |                                                       */
                                        /*                                                                                           */
                                        /*                         milieu de la fenetre                                              */
                                        /*                                                                                           */
                                        /* Les ordonnees sont conservees, et seules les abscisses sont modifiees par rapport au      */
                                        /* milieu de la fenetre...                                                                   */

#define   X_IMAGE_PLAN(x)                                                                                                               \
                    ADD2(MUL2(FLOT(COXR(x)),x_homothetie)                                                                               \
                        ,X_COIN_BAS_GAUCHE                                                                                              \
                         )
#define   Y_IMAGE_PLAN(y)                                                                                                               \
                    ADD2(MUL2(FLOT(COYR(y)),y_homothetie)                                                                               \
                        ,Y_COIN_BAS_GAUCHE                                                                                              \
                         )
                                        /* Passage des coordonnees dans l'image aux coordonnees du plan.                             */
#define   X_PLAN_IMAGE                                                                                                                  \
                    COXA(INTE(DIVI(SOUS(Reelle(suite_point),X_COIN_BAS_GAUCHE)                                                          \
                                  ,x_homothetie                                                                                         \
                                   )                                                                                                    \
                              )                                                                                                         \
                         )
#define   Y_PLAN_IMAGE                                                                                                                  \
                    COYA(INTE(DIVI(SOUS(Imaginaire(suite_point),Y_COIN_BAS_GAUCHE)                                                      \
                                  ,y_homothetie                                                                                         \
                                   )                                                                                                    \
                              )                                                                                                         \
                         )
                                        /* Passage des coordonnees du plan aux coordonnees dans l'image.                             */
#define   X_PLAN_IMAGE_MODULO                                                                                                           \
                    MODU(X_PLAN_IMAGE                                                                                                   \
                        ,Xmin                                                                                                           \
                        ,Xmax                                                                                                           \
                         )
#define   Y_PLAN_IMAGE_MODULO                                                                                                           \
                    MODU(Y_PLAN_IMAGE                                                                                                   \
                        ,Ymin                                                                                                           \
                        ,Ymax                                                                                                           \
                         )
                                        /* Passage des coordonnees du plan aux coordonnees dans l'image "torique" ;                  */
                                        /* on notera les 'MODU', qui font que ce l'on calcule peut etre bizarre...                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V A R I A B L E S   N E C E S S A I R E S   A U   C A L C U L   D E   L A   F E N E T R E  :                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(HOMOTHETIE__IMAGE__C_HC_HHC______prendre_en_compte_le_rapport_dimX_dimY,VRAI)));
                                        /* Introduit le 20120123135858 afin de svaoir si le rapport dimX/dimY doit aussi etre celui  */
                                        /* de la fenetre ('VRAI', ce qui assure la compatibilite anterieure) ou bien conserve tel    */
                                        /* quel ('FAUX')...                                                                          */
DEFV(Common,DEFV(Logical,ZINT(HOMOTHETIE__IMAGE__C_HC_HHC______utiliser_dimX_dimY,VRAI)));
                                        /* Introduit le 20120123125558 afin de choisir le calcul de {x_homothetie,y_homothetie}      */
                                        /* via {dimX,dimY} ('VRAI', ce qui assure la compatibilite anterieure) ou bien via           */
                                        /* {Xmax,Ymax} ('FAUX').                                                                     */

#define   VARIABLES_RELATIVES_A_LA_NECESSITE_D_HOMOTHETIE                                                                               \
                    gVARIABLES_RELATIVES_A_LA_NECESSITE_D_HOMOTHETIE                                                                    \
                        (COND(IL_FAUT(HOMOTHETIE__IMAGE__C_HC_HHC______prendre_en_compte_le_rapport_dimX_dimY)                          \
                             ,COND(IFEQ_a_peu_pres_absolu(DIVI(FLOT(COND(IL_FAUT(HOMOTHETIE__IMAGE__C_HC_HHC______utiliser_dimX_dimY)   \
                                                                        ,dimX                                                           \
                                                                        ,Xmax                                                           \
                                                                         )                                                              \
                                                                    )                                                                   \
                                                              ,FLOT(COND(IL_FAUT(HOMOTHETIE__IMAGE__C_HC_HHC______utiliser_dimX_dimY)   \
                                                                        ,dimY                                                           \
                                                                        ,Ymax                                                           \
                                                                         )                                                              \
                                                                    )                                                                   \
                                                               )                                                                        \
                                                         ,DIVI(SOUS(X_COIN_HAUT_DROITE,X_COIN_BAS_GAUCHE)                               \
                                                              ,SOUS(Y_COIN_HAUT_DROITE,Y_COIN_BAS_GAUCHE)                               \
                                                               )                                                                        \
                                                         ,tgEPSILON                                                                     \
                                                          )                                                                             \
                                  ,FAUX                                                                                                 \
                                  ,VRAI                                                                                                 \
                                   )                                                                                                    \
                             ,FAUX                                                                                                      \
                              )                                                                                                         \
                         );                                                                                                             \
                                        /* L'ajustement de la proportion des dimensions des fenetres au rapport dimX/dimY est-il     */ \
                                        /* necessaire (introduit le 20091124124351) ?                                                */

#define   BVARIABLES_D_HOMOTHETIE_C_HC_HHC                                                                                              \
                                        /* Definition des variables communes a tout ce qui necessite des homotheties...              */ \
                    VARIABLES_RELATIVES_A_LA_NECESSITE_D_HOMOTHETIE;                                                                    \
                                        /* L'ajustement de la proportion des dimensions des fenetres au rapport dimX/dimY est-il     */ \
                                        /* necessaire (introduit le 20091124124351) ?                                                */ \
                                                                                                                                        \
                    DEFV(Float                                                                                                          \
                        ,INIT(x_homothetie                                                                                              \
                             ,DIVI(SOUS(X_COIN_HAUT_DROITE                                                                              \
                                       ,X_COIN_BAS_GAUCHE                                                                               \
                                        )                                                                                               \
                                  ,FLOT(COND(IL_FAUT(HOMOTHETIE__IMAGE__C_HC_HHC______utiliser_dimX_dimY),dimX,Xmax))                   \
                                   )                                                                                                    \
                              )                                                                                                         \
                         );                                                                                                             \
                                        /* "Taille" reelle de la fenetre rapportee a la taille des images,                           */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, le 20000316182616 je suis passe de 'dimX' a 'dimXN'.                           */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, le 20091124122443, suite a 'v $xiiD/definit.1$DEF 20090928173316', je suis     */ \
                                        /* repasse de 'dimXN' a 'dimX'...                                                            */ \
                    DEFV(Float                                                                                                          \
                        ,INIT(y_homothetie                                                                                              \
                             ,DIVI(SOUS(Y_COIN_HAUT_DROITE                                                                              \
                                       ,Y_COIN_BAS_GAUCHE                                                                               \
                                        )                                                                                               \
                                  ,FLOT(COND(IL_FAUT(HOMOTHETIE__IMAGE__C_HC_HHC______utiliser_dimX_dimY),dimY,Ymax))                   \
                                   )                                                                                                    \
                              )                                                                                                         \
                         );                                                                                                             \
                                        /* "Taille" imaginaire de la fenetre rapportee a la taille des images.                       */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, le 20000316182616 je suis passe de 'dimY' a 'dimYN'.                           */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, le 20091124122443, suite a 'v $xiiD/definit.1$DEF 20090928173316', je suis     */ \
                                        /* repasse de 'dimYN' a 'dimY'...                                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A S   O U   L ' E X P O S A N T   N ' E S T   A   P R I O R I   P A S   U T I L E  :                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   EXPOSANT_INUTILE                                                                                                              \
                    DEUX                                                                                                                \
                                        /* Introduit le 20111130180327, il doit valoir 'DEUX' malgre tout (et non pas la valeur      */ \
                                        /* 'ARGUMENT_INUTILE' utilise anterieurement) a cause des tests qui sont faits en liaison    */ \
                                        /* avec 'compatibilite_20110825'...                                                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T E S T   S U R   L E   N O M B R E   D ' I T E R A T I O N S  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PAS_ASSEZ_D_ITERATIONS                                                                                                        \
                    IFLT(nombre_courant_d_iterations,nombre_maximal_d_iterations)                                                       \
                                        /* Test sur le nombre d'iterations.                                                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S E U I L   D U   M O D U L E  :                                                                                           */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   TEST_DU_CARRE_DU_MODULE_DANS_C(seuil)                                                                                         \
                    IFLT(Cmodule2(suite_point),seuil)                                                                                   \
                                        /* Test quelconque de continuation des iterations dans 'F_ITERATION_DANS_C(...)'.            */

#define   SEUIL_MODULE_DANS_C                                                                                                           \
                    EXP2(DOUB(UNITE))
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_C_____seuil_du_carre_du_module
                           ,SEUIL_MODULE_DANS_C
                            )
                 )
     );
                                        /* Seuil de divergence du carre du module d'un nombre complexe de la suite.                  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E P L I E M E N T   E V E N T U E L   D E S   E S P A C E S  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ITERATIONS_DIVERSES_____REPLIER_L_ESPACE                                                                                      \
                    FAUX

#define   ITERATIONS_DIVERSES_____ORIGINE__                                                                                             \
                    NEGA(COORDONNEE_BARYCENTRIQUE_MAXIMALE)
#define   ITERATIONS_DIVERSES_____EXTREMITE                                                                                             \
                    NEUT(COORDONNEE_BARYCENTRIQUE_MAXIMALE)

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E P L I E M E N T   E V E N T U E L   D E   L ' E S P A C E   C O M P L E X E  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_C_____replier_l_espace,ITERATIONS_DIVERSES_____REPLIER_L_ESPACE)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_C_____Rorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_C_____Rextremite,ITERATIONS_DIVERSES_____EXTREMITE)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_C_____Iorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_C_____Iextremite,ITERATIONS_DIVERSES_____EXTREMITE)));
                                        /* Possibilite introduite le 20121103095740...                                               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T R A I T E M E N T   D E   L ' U N D E R F L O W   E T   D E   L ' O V E R F L O W  :                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   TESTER_L_UNDERFLOW_ET_L_OVERFLOW                                                                                              \
                    VRAI
#define   NE_PAS_TESTER_L_UNDERFLOW_ET_L_OVERFLOW                                                                                       \
                    NOTL(TESTER_L_UNDERFLOW_ET_L_OVERFLOW)
                                        /* Afin de pouvoir activer ou desactiver respectivement les tests d'undeflow et d'overflow,  */
                                        /* lorsque cela s'avere necessaire...                                                        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        Q U E L Q U E S   D O N N E E S   C O M M U N E S   A U   C A L C U L                                                      */
/*        D A N S   L E   P L A N   C O M P L E X E                                                                                  */
/*        E T   D A N S   L ' E S P A C E   H Y P E R - C O M P L E X E  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   VARIABLES_COMMUNES_DES_ITERATIONS_DANS_C_HC_HHC                                                                               \
                    DEFV(Positive,INIT(nombre_courant_d_iterations,UNDEF));                                                             \
                                        /* Nombre courant d'iterations.                                                              */ \
                    DEFV(genere_p,INIT(niveau_courant,NIVEAU_UNDEF));                                                                   \
                                        /* Niveau de marquage du point courant.                                                      */ \
                    DEFV(genere_p,INIT(niveau_courant_maximal,NOIR));                                                                   \
                                        /* Niveau maximal de marquage rencontre lors des iterations : cela a ete introduit le        */ \
                                        /* 20200627112145 a cause d'une remarque faite a cette date concernant le marquage des       */ \
                                        /* racines N-iemes de l'unite calculee exactement...                                         */ \
                    DEFV(genere_Float,INIT(niveau_courant_precis,FLOT__NIVEAU_UNDEF))                                                   \
                                        /* Niveau courant de 'iterations_dans_C_HC_HHC_____IFmageR'.                                 */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : l'absence de ";" a la fin de la derniere declaration est due au mode d'appel  */ \
                                        /* qui lui se termine par un ";"...                                                          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        Q U E L Q U E S   D O N N E E S   U T I L E S   A   L ' E D I T I O N   E V E N T U E L L L E                              */
/*        D E S   T R A J E C T O I R E S   D A N S   L E   P L A N   C O M P L E X E  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_C_____editer_les_trajectoires,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_C_____normaliser_les_trajectoires,VRAI)));

#define   Xmin_Ymin__UNDEF                                                                                                              \
                    MOINS_L_INFINI
#define   Xmax_Ymax__UNDEF                                                                                                              \
                    INFINI
                                        /* Introduit le 20211013094654 et dedouble le 20211016080133...                              */

#define   IGNORER__Xmin__Ymin                                                                                                           \
                    FRA10(FRA10(Xmin_Ymin__UNDEF))
#define   IGNORER__Xmax__Ymax                                                                                                           \
                    FRA10(FRA10(Xmax_Ymax__UNDEF))
                                        /* Les 'FRA10(FRA10(....))'s sont destines a permettre des 'ADD2(...)' ci-apres en ce        */
                                        /* concerne {{Xmin,Xmax},{Ymin,Ymax}}...                                                     */
                                        /*                                                                                           */
                                        /* Le 20211016080133 un lien a ete etabli entre {IGNORER__Xmin__Ymin,Xmax_Ymax__UNDEF}       */
                                        /* et {Xmin_Ymin__UNDEF,Xmax_Ymax__UNDEF} et ce afin de ne pas rencontrer un jour un         */
                                        /* probleme de parametrage incoherent...                                                     */

DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_C_____compatibilite_20211015,FAUX)));
                                        /* Introduit le 20211015103315 car, en effet, avant cette date {{Xmin,Xmax},{Ymin,Ymax}}     */
                                        /* n'etaient pas pris en compte...                                                           */

DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____translation_X_d_editions_des_trajectoires,FZERO)));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____Xmin__d_editions_des_trajectoires,Xmin_Ymin__UNDEF)));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____Xmax__d_editions_des_trajectoires,Xmax_Ymax__UNDEF)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_C_____maille_X_d_editions_des_trajectoires,GRO10(PasX))));

DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____translation_Y_d_editions_des_trajectoires,FZERO)));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____Ymin__d_editions_des_trajectoires,Xmin_Ymin__UNDEF)));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____Ymax__d_editions_des_trajectoires,Xmax_Ymax__UNDEF)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_C_____maille_Y_d_editions_des_trajectoires,GRO10(PasY))));
                                        /* Le 20211012122652 a ete introduite la possibilite de "resserer" le maillage des points    */
                                        /* dont on visualise les trajectoires et ce, par exemple, au centre du domaine...            */
                                        /*                                                                                           */
                                        /* Je rappelle le 20211014121814 qu'il n'est pas possible de definir :                       */
                                        /*                                                                                           */
                                        /*                  DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____Xmin__...,Xmin)));     */
                                        /*                  DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____Xmax__...,Xmax)));     */
                                        /*                                                                                           */
                                        /*                  DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____Ymin__...,Ymin)));     */
                                        /*                  DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_C_____Ymax__...,Ymax)));     */
                                        /*                                                                                           */
                                        /* car, en effet, {{Xmin,Xmax},{Ymin,Ymax}} sont en general des parametres d'appel des       */
                                        /* '$X's et ne sont donc pas connus au moment de leur lancement, d'ou le passage par         */
                                        /* {Xmin_Ymin__UNDEF,Xmax_Ymax__UNDEF} qui indiquent que l'initilisation de ces quatre       */
                                        /* variables n'a pas encore ete faite...                                                     */

DEFV(Local,DEFV(Logical,ZINT(gF_ITERATION_DANS_C_____une_trajectoire_est_en_cours_d_edition,LUNDEF)));
                                        /* Introduit le 20211012180614 pour simplifier les choses...                                 */
DEFV(Local,DEFV(Positive,ZINT(gF_ITERATION_DANS_C_____numero_du_point_courant_edite,ZERO)));
                                        /* Introduit le 20190314180029 pour permettre l'edition des trajectoires {Z(0),Z(1),...}.    */
                                        /*                                                                                           */
                                        /* Le 20190315093924, les mailles {X,Y} sont passees de 'Int' a 'Float' afin d'en faire      */
                                        /* des arguments "homothetiques"...                                                          */

#define   gF_ITERATION_DANS_C__EDITION_EVENTUELLE_DES_TRAJECTOIRES(MarqueurIteration)                                                   \
                                        /* L'argument 'MarqueurIteration' a ete introduit le 20190315144242 afin de pouvoir faire    */ \
                                        /* la difference entre le premier et le second appel...                                      */ \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(gF_ITERATION_DANS_C_____editer_les_trajectoires))                                                      \
                                        /* Test introduit le 20190314180029...                                                       */ \
                         Bblock                                                                                                         \
                         DEFV(Int,INIT(coordonnee_X_de_depart_d_une_trajectoire                                                         \
                                      ,ADD2(X                                                                                           \
                                           ,gF_ITERATION_DANS_C_____translation_X_d_editions_des_trajectoires                           \
                                            )                                                                                           \
                                       )                                                                                                \
                              );                                                                                                        \
                         DEFV(Int,INIT(coordonnee_Y_de_depart_d_une_trajectoire                                                         \
                                      ,ADD2(Y                                                                                           \
                                           ,gF_ITERATION_DANS_C_____translation_Y_d_editions_des_trajectoires                           \
                                            )                                                                                           \
                                       )                                                                                                \
                              );                                                                                                        \
                                                                                                                                        \
                         DEFV(Int,INIT(maille_X_denormalisee                                                                            \
                                      ,_lDENORMALISE_OX(gF_ITERATION_DANS_C_____maille_X_d_editions_des_trajectoires)                   \
                                       )                                                                                                \
                              );                                                                                                        \
                         DEFV(Int,INIT(maille_Y_denormalisee                                                                            \
                                      ,_lDENORMALISE_OY(gF_ITERATION_DANS_C_____maille_Y_d_editions_des_trajectoires)                   \
                                       )                                                                                                \
                              );                                                                                                        \
                                        /* Introduit le 20211013135602...                                                            */ \
                                                                                                                                        \
                         Test(IFOU(IFOU(IFEQ(gF_ITERATION_DANS_C_____Xmin__d_editions_des_trajectoires,Xmin_Ymin__UNDEF)                \
                                       ,IFEQ(gF_ITERATION_DANS_C_____Xmax__d_editions_des_trajectoires,Xmax_Ymax__UNDEF)                \
                                        )                                                                                               \
                                  ,IFOU(IFEQ(gF_ITERATION_DANS_C_____Ymin__d_editions_des_trajectoires,Xmin_Ymin__UNDEF)                \
                                       ,IFEQ(gF_ITERATION_DANS_C_____Ymax__d_editions_des_trajectoires,Xmax_Ymax__UNDEF)                \
                                        )                                                                                               \
                                   )                                                                                                    \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                                        /* Cas ou au moins l'un des {{Xmin,Xmax},{Ymin,Ymax}} n'a pas ete initialise...              */ \
                              Test(IL_FAUT(gF_ITERATION_DANS_C_____compatibilite_20211015))                                             \
                                        /* Test introduit le 20211015103315...                                                       */ \
                                   Bblock                                                                                               \
                                   EGAL(gF_ITERATION_DANS_C_____Xmin__d_editions_des_trajectoires,IGNORER__Xmin__Ymin);                 \
                                   EGAL(gF_ITERATION_DANS_C_____Xmax__d_editions_des_trajectoires,IGNORER__Xmax__Ymax);                 \
                                   EGAL(gF_ITERATION_DANS_C_____Ymin__d_editions_des_trajectoires,IGNORER__Xmin__Ymin);                 \
                                   EGAL(gF_ITERATION_DANS_C_____Ymax__d_editions_des_trajectoires,IGNORER__Xmax__Ymax);                 \
                                        /* Avec ces valeurs, {{Xmin,Xmax},{Ymin,Ymax}} seront ignorees...                            */ \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   EGAL(gF_ITERATION_DANS_C_____Xmin__d_editions_des_trajectoires                                       \
                                       ,COND(IFEQ(gF_ITERATION_DANS_C_____Xmin__d_editions_des_trajectoires                             \
                                                 ,Xmin_Ymin__UNDEF                                                                      \
                                                  )                                                                                     \
                                            ,Xmin                                                                                       \
                                            ,gF_ITERATION_DANS_C_____Xmin__d_editions_des_trajectoires                                  \
                                             )                                                                                          \
                                        );                                                                                              \
                                   EGAL(gF_ITERATION_DANS_C_____Xmax__d_editions_des_trajectoires                                       \
                                       ,COND(IFEQ(gF_ITERATION_DANS_C_____Xmax__d_editions_des_trajectoires                             \
                                                 ,Xmax_Ymax__UNDEF                                                                      \
                                                  )                                                                                     \
                                            ,Xmax                                                                                       \
                                            ,gF_ITERATION_DANS_C_____Xmax__d_editions_des_trajectoires                                  \
                                             )                                                                                          \
                                        );                                                                                              \
                                                                                                                                        \
                                   EGAL(gF_ITERATION_DANS_C_____Ymin__d_editions_des_trajectoires                                       \
                                       ,COND(IFEQ(gF_ITERATION_DANS_C_____Ymin__d_editions_des_trajectoires                             \
                                                 ,Xmin_Ymin__UNDEF                                                                      \
                                                  )                                                                                     \
                                            ,Ymin                                                                                       \
                                            ,gF_ITERATION_DANS_C_____Ymin__d_editions_des_trajectoires                                  \
                                             )                                                                                          \
                                        );                                                                                              \
                                   EGAL(gF_ITERATION_DANS_C_____Ymax__d_editions_des_trajectoires                                       \
                                       ,COND(IFEQ(gF_ITERATION_DANS_C_____Ymax__d_editions_des_trajectoires                             \
                                                 ,Xmax_Ymax__UNDEF                                                                      \
                                                  )                                                                                     \
                                            ,Ymax                                                                                       \
                                            ,gF_ITERATION_DANS_C_____Ymax__d_editions_des_trajectoires                                  \
                                             )                                                                                          \
                                        );                                                                                              \
                                        /* Introduit sous cette forme le 20211013094654...                                           */ \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         Test(IFET(IFET(DIVISIBLE(coordonnee_X_de_depart_d_une_trajectoire                                              \
                                                 ,maille_X_denormalisee                                                                 \
                                                  )                                                                                     \
                                       ,IFINff(coordonnee_X_de_depart_d_une_trajectoire                                                 \
                                              ,ADD2(gF_ITERATION_DANS_C_____Xmin__d_editions_des_trajectoires                           \
                                                   ,maille_X_denormalisee                                                               \
                                                    )                                                                                   \
                                              ,ADD2(gF_ITERATION_DANS_C_____Xmax__d_editions_des_trajectoires                           \
                                                   ,maille_X_denormalisee                                                               \
                                                    )                                                                                   \
                                               )                                                                                        \
                                        )                                                                                               \
                                  ,IFET(DIVISIBLE(coordonnee_Y_de_depart_d_une_trajectoire                                              \
                                                 ,maille_Y_denormalisee                                                                 \
                                                  )                                                                                     \
                                       ,IFINff(coordonnee_Y_de_depart_d_une_trajectoire                                                 \
                                              ,ADD2(gF_ITERATION_DANS_C_____Ymin__d_editions_des_trajectoires                           \
                                                   ,maille_Y_denormalisee                                                               \
                                                    )                                                                                   \
                                              ,ADD2(gF_ITERATION_DANS_C_____Ymax__d_editions_des_trajectoires                           \
                                                   ,maille_Y_denormalisee                                                               \
                                                    )                                                                                   \
                                               )                                                                                        \
                                        )                                                                                               \
                                   )                                                                                                    \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              CAL3(Prme1("point=%d",gF_ITERATION_DANS_C_____numero_du_point_courant_edite));                            \
                              CAL3(Prme2("     iteration=%d%s",nombre_courant_d_iterations,MarqueurIteration));                         \
                                        /* On notera le 20190314185753 que la premiere iteration vaudra :                            */ \
                                        /*                                                                                           */ \
                                        /*                  1    -->  'Imandelbrot_dans_C(...)'                                      */ \
                                        /*                                                                                           */ \
                                        /* ce qui est bien, mais :                                                                   */ \
                                        /*                                                                                           */ \
                                        /*                  2    -->  'Ijulia_dans_C(...)'                                           */ \
                                        /*                                                                                           */ \
                                        /* et ce a cause de 'v $ximcf/iterations$FON EGAL.nombre_courant_d_iterations.UN.;'          */ \
                                        /* ci-apres...                                                                               */ \
                              CAL3(Prme2("     (%+.^^^,%+.^^^)"                                                                         \
                                        ,COND(IL_FAUT(gF_ITERATION_DANS_C_____normaliser_les_trajectoires)                              \
                                             ,NORM(Reelle(suite_point),X_COIN_BAS_GAUCHE,X_COIN_HAUT_DROITE)                            \
                                             ,Reelle(suite_point)                                                                       \
                                              )                                                                                         \
                                        ,COND(IL_FAUT(gF_ITERATION_DANS_C_____normaliser_les_trajectoires)                              \
                                             ,NORM(Imaginaire(suite_point),Y_COIN_BAS_GAUCHE,Y_COIN_HAUT_DROITE)                        \
                                             ,Imaginaire(suite_point)                                                                   \
                                              )                                                                                         \
                                         )                                                                                              \
                                   );                                                                                                   \
                                                                                                                                        \
                              Test(TOUJOURS_VRAI)                                                                                       \
                                        /* Introduit le 20211013133259 pour des raisons de test...                                   */ \
                                   Bblock                                                                                               \
                                   CAL3(Prme3("     X=%d E [%d,%d]"                                                                     \
                                             ,X                                                                                         \
                                             ,gF_ITERATION_DANS_C_____Xmin__d_editions_des_trajectoires                                 \
                                             ,gF_ITERATION_DANS_C_____Xmax__d_editions_des_trajectoires                                 \
                                              )                                                                                         \
                                        );                                                                                              \
                                   CAL3(Prme3("     Y=%d E [%d,%d]"                                                                     \
                                             ,Y                                                                                         \
                                             ,gF_ITERATION_DANS_C_____Ymin__d_editions_des_trajectoires                                 \
                                             ,gF_ITERATION_DANS_C_____Ymax__d_editions_des_trajectoires                                 \
                                              )                                                                                         \
                                        );                                                                                              \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                                                                                                                                        \
                              CALS(Fsauts_de_lignes(UN));                                                                               \
                                                                                                                                        \
                              EGAL(gF_ITERATION_DANS_C_____une_trajectoire_est_en_cours_d_edition,VRAI);                                \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              EGAL(gF_ITERATION_DANS_C_____une_trajectoire_est_en_cours_d_edition,FAUX);                                \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Edition eventuelle des trajectoires (introduite le 20190314180029...).                    */ \
                                        /*                                                                                           */ \
                                        /* On notera que cette edition est appelee deux fois par iteration. On aura alors pour       */ \
                                        /* chaque iteration les deux lignes suivantes :                                              */ \
                                        /*                                                                                           */ \
                                        /*   point=... iteration=... {Reelle(suite_point),Imaginaire(suite_point)}      AVANT        */ \
                                        /*   point=... iteration=... {Reelle(suite_point),Imaginaire(suite_point)}      APRES        */ \
                                        /*                                                                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   N E C E S S A I R E S   A U   C A L C U L   E N   " F L O T T A N T "                                  */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   BVARIABLES_F_ITERATION_DANS_C                                                                                                 \
                                        /* Definition des variables communes a 'Julia' et 'Mandelbrot'.                              */ \
                    BVARIABLES_D_HOMOTHETIE_C_HC_HHC                                                                                    \
                                        /* "Taille" reelle et imaginaire de la fenetre rapportee a la taille des images.             */ \
                    DEFV(complexe,point_courant);                                                                                       \
                                        /* Point complexe courant 'C' dans la fenetre.                                               */ \
                    DEFV(complexe,suite_point);                                                                                         \
                                        /* Suite des points complexes Z  lors de l'iteration.                                        */ \
                                        /*                             n                                                             */ \
                    DEFV(complexe,point_manoeuvre);                                                                                     \
                                        /* Point complexe de maneuvre lors de l'iteration.                                           */ \
                    VARIABLES_COMMUNES_DES_ITERATIONS_DANS_C_HC_HHC;

#define   INITIALISATION_DU_POINT_COURANT_DANS_C                                                                                        \
                                        /* Sequence de calcul de la valeur a donner au point courant {X,Y}.                          */ \
                    Bblock                                                                                                              \
                    Cinitialisation(point_courant,X_IMAGE_PLAN(X),Y_IMAGE_PLAN(Y));                                                     \
                                        /* Le "point_courant" 'C' est le point courant {X,Y} sur le maillage de l'image.             */ \
                    Eblock                                                                                                              \
                                        /* Initialisation du point complexe courant sur un maillage {X,Y}.                           */

DEFV(Common,DEFV(Float,ZINT(iterations_dans_C_HC_HHC_____epsilon,gEPSILON)));
                                        /* Epsilon utilise via 'TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE(...)' lors des iterations...   */

#define   TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE(suite_complexe,epsilon)                                                                 \
                    Bblock                                                                                                              \
                    EGAL(Reelle(suite_complexe),TROP_PETIT(Reelle(suite_complexe),epsilon));                                            \
                    EGAL(Imaginaire(suite_complexe),TROP_PETIT(Imaginaire(suite_complexe),epsilon));                                    \
                                        /* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter des underflows       */ \
                                        /* flottants...                                                                              */ \
                    Eblock                                                                                                              \
                                        /* Test des underflows d'une suite complexe...                                               */
#define   TEST_D_OVERFLOW_D_UNE_SUITE_COMPLEXE(suite_complexe,anti_epsilon)                                                             \
                    Bblock                                                                                                              \
                    EGAL(Reelle(suite_complexe),TROP_GRAND(Reelle(suite_complexe),anti_epsilon));                                       \
                    EGAL(Imaginaire(suite_complexe),TROP_GRAND(Imaginaire(suite_complexe),anti_epsilon));                               \
                                        /* Lorsqu'une composante devient trop grande, on la plafonne afin d'eviter des underflows    */ \
                                        /* flottants...                                                                              */ \
                    Eblock                                                                                                              \
                                        /* Test des overflows d'une suite complexe...                                                */

#define   gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES                                                                                 \
                    Bblock                                                                                                              \
                    CLIR(gF_ITERATION_DANS_C_____numero_du_point_courant_edite);                                                        \
                    Eblock                                                                                                              \
                                        /* Introduit le 20190314183222...                                                            */

#define   gF_ITERATION_DANS_C(test_d_arret,initialisation_point_courant,init_iteration,calculs_communs,fonc_iteration,fin_iteration)    \
                                        /* Sequence de calcul de la valeur a donner au point courant {X,Y}.                          */ \
                                        /*                                                                                           */ \
                                        /* L'argument 'initialisation_point_courant' a ete introduit le 20091012111043, par exemple  */ \
                                        /* pour permettre de definir le "point_courant" autrement que comme etant le point courant   */ \
                                        /* {X,Y} sur le maillage de l'image (par exemple via deux matrices d'indirection, une pour   */ \
                                        /* chaque coordonnee 'X' et 'Y').                                                            */ \
                                        /*                                                                                           */ \
                                        /* L'argument 'fin_iteration' a ete introduit le 20150225152454...                           */ \
                    Bblock                                                                                                              \
                    BLOC(initialisation_point_courant);                                                                                 \
                                        /* Le "point_courant" 'C' est a priori le point courant {X,Y} sur le maillage de l'image.    */ \
                                                                                                                                        \
                    BLOC(init_iteration);                                                                                               \
                                        /* Initialisation de la suite des nombres complexes sur le "point_courant", soit :           */ \
                                        /*                                                                                           */ \
                                        /*                  Z  = 0                                                                   */ \
                                        /*                   0                                                                       */ \
                                        /*                                                                                           */ \
                                        /* ou :                                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  Z  = C                                                                   */ \
                                        /*                   0                                                                       */ \
                                        /*                                                                                           */ \
                                        /* et, initialisation du compteur des iterations.                                            */ \
                                                                                                                                        \
                    Tant(IFET(test_d_arret                                                                                              \
                             ,PAS_ASSEZ_D_ITERATIONS                                                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         BLOC(calculs_communs);                                                                                         \
                                                                                                                                        \
                         INCR(nombre_courant_d_iterations,I);                                                                           \
                                                                                                                                        \
                         gF_ITERATION_DANS_C__EDITION_EVENTUELLE_DES_TRAJECTOIRES("/1");                                                \
                                        /* Possibilite introduite le 20190314180029...                                               */ \
                                                                                                                                        \
                         BLOC(fonc_iteration);                                                                                          \
                                        /* Puis :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                    2                                                                      */ \
                                        /*                  Z   + C                                                                  */ \
                                        /*                   n                                                                       */ \
                                        /*                                                                                           */ \
                                        /* ou :                                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                    2                                                                      */ \
                                        /*                  Z   + A                                                                  */ \
                                        /*                   n                                                                       */ \
                                        /*                                                                                           */ \
                                        /* ou encore autre chose (voir 'GENERE__FonctionP_I_ITERAT_F_C(...)') auquel cas, le         */ \
                                        /* calcul precedent de 'point_manoeuvre' peut etre inutile...                                */ \
                                                                                                                                        \
                         Test(IL_FAUT(gF_ITERATION_DANS_C_____replier_l_espace))                                                        \
                              Bblock                                                                                                    \
                              DEFV(complexe,suite_point_manoeuvre);                                                                     \
                                                                                                                                        \
                              aCmodulo(suite_point_manoeuvre                                                                            \
                                      ,suite_point                                                                                      \
                                      ,gF_ITERATION_DANS_C_____Rorigine__                                                               \
                                      ,gF_ITERATION_DANS_C_____Rextremite                                                               \
                                      ,gF_ITERATION_DANS_C_____Iorigine__                                                               \
                                      ,gF_ITERATION_DANS_C_____Iextremite                                                               \
                                       );                                                                                               \
                                        /* Repliement eventuel de l'espace introduit le 20121103101108...                            */ \
                                                                                                                                        \
                              Cegal(suite_point,suite_point_manoeuvre);                                                                 \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE(suite_point,iterations_dans_C_HC_HHC_____epsilon);                       \
                                        /* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter                      */ \
                                        /* des underflows flottants...                                                               */ \
                                                                                                                                        \
                         gF_ITERATION_DANS_C__EDITION_EVENTUELLE_DES_TRAJECTOIRES("/2");                                                \
                                        /* Possibilite introduite le 20190314180029...                                               */ \
                         Eblock                                                                                                         \
                    ETan                                                                                                                \
                                                                                                                                        \
                    Test(IL_FAUT(visualisation_arguments_de_sortie))                                                                    \
                         Bblock                                                                                                         \
                         Test(IL_NE_FAUT_PAS(iterations_dans_C_HC_HHC_____memoriser_le_module_plutot_que_les_arguments))                \
                              Bblock                                                                                                    \
                              EGAL(niveau_courant_precis                                                                                \
                                  ,Cargument_2PI(suite_point)                                                                           \
                                   );                                                                                                   \
                              EGAL(niveau_courant                                                                                       \
                                  ,GENP(SCAL(niveau_courant_precis                                                                      \
                                            ,CERCLE_TRIGONOMETRIQUE                                                                     \
                                            ,BLANC                                                                                      \
                                             )                                                                                          \
                                        )                                                                                               \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              EGAL(niveau_courant_precis                                                                                \
                                  ,Cmodule(suite_point)                                                                                 \
                                   );                                                                                                   \
                              EGAL(niveau_courant                                                                                       \
                                  ,GENP(SCAL(TRON(niveau_courant_precis                                                                 \
                                                 ,iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments   \
                                                 ,iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments   \
                                                  )                                                                                     \
                                            ,SOUS(iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments   \
                                                 ,iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments   \
                                                  )                                                                                     \
                                            ,BLANC                                                                                      \
                                             )                                                                                          \
                                        )                                                                                               \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Test(IL_NE_FAUT_PAS(iterations_dans_C_HC_HHC_____visualiser_l_appartenance_plutot_que_le_nombre_d_iterations)) \
                                        /* Test introduit le 20091119140032...                                                       */ \
                              Bblock                                                                                                    \
                              EGAL(niveau_courant_precis                                                                                \
                                  ,CASP_Float(nombre_courant_d_iterations)                                                              \
                                   );                                                                                                   \
                                        /* La procedure 'CASP_Float(...)' a remplace un 'CASP(genere_Float,...)' le 20090331103211.  */ \
                              EGAL(niveau_courant                                                                                       \
                                  ,GENP(COND(IL_FAUT(iterations_dans_C_HC_HHC_____renormaliser_le_nombre_d_iterations)                  \
                                            ,SCAL(nombre_courant_d_iterations                                                           \
                                                 ,nombre_maximal_d_iterations                                                           \
                                                 ,BLANC                                                                                 \
                                                  )                                                                                     \
                                            ,nombre_courant_d_iterations                                                                \
                                             )                                                                                          \
                                        )                                                                                               \
                                   );                                                                                                   \
                                        /* Visualisation du nombre d'iterations...                                                   */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              EGAL(niveau_courant_precis                                                                                \
                                  ,COND(PAS_ASSEZ_D_ITERATIONS                                                                          \
                                       ,fNON_APPARTENANCE_A_L_ENSEMBLE                                                                  \
                                       ,fAPPARTENANCE_A_L_ENSEMBLE                                                                      \
                                        )                                                                                               \
                                   );                                                                                                   \
                              EGAL(niveau_courant                                                                                       \
                                  ,COND(PAS_ASSEZ_D_ITERATIONS                                                                          \
                                       ,NON_APPARTENANCE_A_L_ENSEMBLE                                                                   \
                                       ,APPARTENANCE_A_L_ENSEMBLE                                                                       \
                                        )                                                                                               \
                                   );                                                                                                   \
                                        /* Visualisation de la non appartenance ('NOIR') et de l'appartenance ('BLANC'). Cette       */ \
                                        /* possibilite a ete introduite le 20091119140032 afin de faciliter les choses...            */ \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    RANGEMENT_DU_NIVEAU_COURANT_ET_EVENTUELLEMENT_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;              \
                                        /* Et enfin, marquage du point courant.                                                      */ \
                                                                                                                                        \
                    BLOC(fin_iteration);                                                                                                \
                                        /* Cette possibilite a ete introduite le 20150225152454...                                   */ \
                                                                                                                                        \
                    Test(IL_FAUT(gF_ITERATION_DANS_C_____editer_les_trajectoires))                                                      \
                         Bblock                                                                                                         \
                         Test(EST_VRAI(gF_ITERATION_DANS_C_____une_trajectoire_est_en_cours_d_edition))                                 \
                              Bblock                                                                                                    \
                              INCR(gF_ITERATION_DANS_C_____numero_du_point_courant_edite,I);                                            \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock

#define   F_ITERATION_DANS_C(test_d_arret,init_iteration,fonc_iteration,exposant,fin_iteration)                                         \
                                        /* Sequence de calcul de la valeur a donner au point courant {X,Y}.                          */ \
                                        /*                                                                                           */ \
                                        /* L'argument 'fin_iteration' a ete introduit le 20150225152454...                           */ \
                    Bblock                                                                                                              \
                    gF_ITERATION_DANS_C(test_d_arret                                                                                    \
                                       ,BLOC(Bblock                                                                                     \
                                             INITIALISATION_DU_POINT_COURANT_DANS_C;                                                    \
                                             Eblock                                                                                     \
                                             )                                                                                          \
                                        /* Introduit le 20091012111043...                                                            */ \
                                       ,BLOC(init_iteration);                                                                           \
                                       ,BLOC(Bblock                                                                                     \
                                             aCpuissance(point_manoeuvre,suite_point,exposant);                                         \
                                        /* Calculons :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                    2                                                                      */ \
                                        /*                  Z                                                                        */ \
                                        /*                   n                                                                       */ \
                                        /*                                                                                           */ \
                                        /* a priori (mais cela peut etre inutile dans certains cas...).                              */ \
                                        /*                                                                                           */ \
                                        /* Le 20091118113333 :                                                                       */ \
                                        /*                                                                                           */ \
                                        /*                  Cproduit(point_manoeuvre,suite_point,suite_point);                       */ \
                                        /*                                                                                           */ \
                                        /* a ete remplace par :                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  Cpuissance(point_manoeuvre,suite_point,exposant)                         */ \
                                        /*                                                                                           */ \
                                        /* ou 'exposant' sera assez souvent egal a 'ZERO'. Mais afin de garantir la compatibilite    */ \
                                        /* anterieure, meme la ou il est evident que 'ZERO' serait correct (et optimiserait les      */ \
                                        /* calculs), en fait 'DEUX' sera utilise...                                                  */ \
                                             Eblock                                                                                     \
                                             )                                                                                          \
                                       ,BLOC(fonc_iteration);                                                                           \
                                       ,BLOC(fin_iteration);                                                                            \
                                        /* Cette possibilite a ete introduite le 20150225152454...                                   */ \
                                        );                                                                                              \
                    Eblock

/*===================================================================================================================================*/
/*        :Debut_listMN_MANDELBROT_COMPLEXE_11:                                                                                      */
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' E N S E M B L E   D E   M A N D E L B R O T    D A N S   U N E    F E N E T R E                    */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Soit la suite :                                                                                                */
/*                                                                                                                                   */
/*                                      Z    = 0                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                                              2                                                                                    */
/*                                      Z    = Z  + C                                                                                */
/*                                       n+1    n                                                                                    */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point courant).                                                                               */
/*                                                                                                                                   */
/*                    Si |Z | tend vers l'infini, 'C'                                                                                */
/*                         n                                                                                                         */
/*                  n'appartient pas a l'ensemble de Mandelbrot.                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Forme generale :                                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                                  **                                                               */
/*                                                                *****                                                              */
/*                                                                *****                                                              */
/*                                                        *   * ********* *                                                          */
/*                                                        ******************* **                                                     */
/*                                                       **********************                                                      */
/*                                                     **************************                                                    */
/*                                                    ****************************                                                   */
/*                                        * *****    ****************************                                                    */
/*                                      ***********  *****************************                                                   */
/*                                      ************ ****************************                                                    */
/*                   *********************************************************                                                       */
/*                                      ************ ****************************                                                    */
/*                                      ***********  *****************************                                                   */
/*                                        * *****    ****************************                                                    */
/*                                                    ****************************                                                   */
/*                                                     **************************                                                    */
/*                                                       **********************                                                      */
/*                                                        ******************* **                                                     */
/*                                                        *   * ********* *                                                          */
/*                                                                *****                                                              */
/*                                                                *****                                                              */
/*                                                                  **                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Nous verrons que l'on appelle                                                                                  */
/*                  Ensemble de Julia J  les ensembles                                                                               */
/*                                     A                                                                                             */
/*                  obtenus a partir des iterations                                                                                  */
/*                  suivantes :                                                                                                      */
/*                                                                                                                                   */
/*                                      Z    = C                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point courant),                                                                               */
/*                                                                                                                                   */
/*                                              2                                                                                    */
/*                                      Z    = Z  + A                                                                                */
/*                                       n+1    n                                                                                    */
/*                                                                                                                                   */
/*                  (ou 'A' designe un nombre complexe                                                                               */
/*                  Argument arbitraire, et parametre de l'ensemble).                                                                */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    Si nous reecrivons la definition de                                                                            */
/*                  l'ensemble de Mandelbrot M (en remplacant                                                                        */
/*                  'C' par 'A') :                                                                                                   */
/*                                                                                                                                   */
/*                                      Z    = 0                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                  (ce qui revient a faire C=0 ci-dessus, et donc                                                                   */
/*                  a se placer a l'origine),                                                                                        */
/*                                                                                                                                   */
/*                                              2                                                                                    */
/*                                      Z    = Z  + A                                                                                */
/*                                       n+1    n                                                                                    */
/*                                                                                                                                   */
/*                  (ou 'A' designe le point courant),                                                                               */
/*                                                                                                                                   */
/*                  nous voyons que calculer M, c'est calculer                                                                       */
/*                  en chaque point 'A' l'ensemble de Julia                                                                          */
/*                  J (origine) a l'origine :                                                                                        */
/*                   A                                                                                                               */
/*                                                                                                                                   */
/*                                      M(A) <==> J (origine)                                                                        */
/*                                                 A                                                                                 */
/*                                                                                                                                   */
/*                  or pour que J  soit connexe, il faut et il                                                                       */
/*                               A                                                                                                   */
/*                  suffit que l'origine appartienne a J . Donc                                                                      */
/*                                                      A                                                                            */
/*                  M definit l'ensemble des J  connexes, puisque                                                                    */
/*                                            A                                                                                      */
/*                  pour M, la suite Z  reste bornee.                                                                                */
/*                                    n                                                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
/*        :Fin_listMN_MANDELBROT_COMPLEXE_11:                                                                                        */

BFonctionP

DEFV(Common,DEFV(Float,SINT(Imandelbrot_dans_C_____exposant,FDEUX)));
                                        /* Introduit le 20091118113333...                                                            */
                                        /*                                                                                           */
                                        /* Le 20100608130024, le 'Int' est devenu un 'Float' pour plus de generalite...              */
DEFV(Common,DEFV(Float,SINT(Imandelbrot_dans_C_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_C)));
                                        /* Seuil de divergence du carre du module d'un nombre complexe de la suite dans ce cas       */
                                        /* particulier (introduit le 20091118181636)...                                              */

DEFV(Common,DEFV(Logical,SINT(Imandelbrot_dans_C_____charger_____l_etat_initial,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageJ,Imandelbrot_dans_C_____etat_initial),ADRESSE_NON_ENCORE_DEFINIE)));
DEFV(Common,DEFV(Logical,SINT(Imandelbrot_dans_C_____sauvegarder_l_etat_final__,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageJ,Imandelbrot_dans_C_____etat_final__),ADRESSE_NON_ENCORE_DEFINIE)));
                                        /* La possibilite de charger et sauvegarder les etats initiaux et finaux a ete               */
                                        /* introduit le 20150227205446...                                                            */

DEFV(Common,DEFV(FonctionP,POINTERp(Imandelbrot_dans_C(imageR
                                                      ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                      ,ARGUMENT_POINTERs(coin_haut_droite)
                                                      ,nombre_maximal_d_iterations
                                                      ,visualisation_arguments_de_sortie
                                                       )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle))                    */
                                        /* de Z  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX').  */
                                        /*     n                                                                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_C
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */
                                        /* 20061219090342).                                                                          */

     gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
                                        /* Introduit le 20190314183222...                                                            */

     begin_image
          Bblock
          F_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(Imandelbrot_dans_C_____seuil_du_carre_du_module)
                            ,BLOC(Bblock
                                  Test(IL_FAUT(Imandelbrot_dans_C_____charger_____l_etat_initial))
                                       Bblock
                                       Cegal(suite_point,loadJ_point(Imandelbrot_dans_C_____etat_initial,X,Y));
                                       Eblock
                                  ATes
                                       Bblock
                                       Cegal(suite_point,C_____nombre_complexe__0__0);
                                        /* Initialisation de la suite des nombres complexes sur l'origine, soit :                    */
                                        /*                                                                                           */
                                        /*                  Z  = 0                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                        /* On notera que l'on pourrait optimiser, en partant directement sur 'C', mais la difference */
                                        /* entre Julia et Mandelbrot ne serait plus evidente...                                      */
                                       Eblock
                                  ETes

                                  CLIR(nombre_courant_d_iterations);
                                        /* Initialisation du compteur des iterations.                                                */
                                  Eblock
                                  )
                            ,BLOC(Bblock
                                  aCsomme(suite_point,point_manoeuvre,point_courant);
                                        /* Puis :                                                                                    */
                                        /*                                                                                           */
                                        /*                    2                                                                      */
                                        /*                  Z   + C                                                                  */
                                        /*                   n                                                                       */
                                        /*                                                                                           */
                                        /* ou 'C' designe le point complexe Courant.                                                 */
                                  Eblock
                                  )
                            ,Imandelbrot_dans_C_____exposant
                            ,BLOC(Bblock
                                  Test(IL_FAUT(Imandelbrot_dans_C_____sauvegarder_l_etat_final__))
                                       Bblock
                                       storeJ_point(suite_point,Imandelbrot_dans_C_____etat_final__,X,Y);
                                       Eblock
                                  ATes
                                       Bblock
                                       Eblock
                                  ETes
                                  Eblock
                                  )
                                        /* Introduit le 20150225152454...                                                            */
                             );
          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' E N S E M B L E   D E   M A N D E L B R O T    D A N S   U N E    F E N E T R E                    */
/*        D A N S   L E   P L A N   C O M P L E X E   A V E C   S Y M E T R I E S   E V E N T U E L L E S                            */
/*        P A R   R A P P O R T   A U X   A X E S   R E E L   E T   I M A G I N A I R E  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Imandelbrot_dans_C_avec_symetries_axiales_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_C)));
                                        /* Seuil de divergence du carre du module d'un nombre complexe de la suite dans ce cas       */
                                        /* particulier (introduit le 20091118181636)...                                              */
DEFV(Common,DEFV(Float,SINT(Imandelbrot_dans_C_avec_symetries_axiales_____exposant,FDEUX)));
                                        /* Introduit le 20091118113333...                                                            */
                                        /*                                                                                           */
                                        /* Le 20100608130024, le 'Int' est devenu un 'Float' pour plus de generalite...              */

DEFV(Common,DEFV(FonctionP,POINTERp(Imandelbrot_dans_C_avec_symetries_axiales(imageR
                                                                             ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                                             ,ARGUMENT_POINTERs(coin_haut_droite)
                                                                             ,nombre_maximal_d_iterations
                                                                             ,visualisation_arguments_de_sortie
                                                                             ,faire_une_symetrie_par_rapport_a_l_axe_reel
                                                                             ,faire_une_symetrie_par_rapport_a_l_axe_imaginaire
                                                                              )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle))                    */
                                        /* de Z  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX').  */
                                        /*     n                                                                                     */
DEFV(Argument,DEFV(Logical,faire_une_symetrie_par_rapport_a_l_axe_reel));
                                        /* Cet indicateur logique permet de demander une symetrie par rapport a l'axe reel           */
                                        /* avant le calcul du carre de l'element courant de la suite 'Z(n)'.                         */
DEFV(Argument,DEFV(Logical,faire_une_symetrie_par_rapport_a_l_axe_imaginaire));
                                        /* Cet indicateur logique permet de demander une symetrie par rapport a l'axe imaginaire     */
                                        /* avant le calcul du carre de l'element courant de la suite 'Z(n)'.                         */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_C
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */
                                        /* 20061219090342).                                                                          */

     gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
                                        /* Introduit le 20190314183222...                                                            */

     begin_image
          Bblock
          F_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(Imandelbrot_dans_C_avec_symetries_axiales_____seuil_du_carre_du_module)
                            ,BLOC(Bblock
                                  Cegal(suite_point,C_____nombre_complexe__0__0);
                                        /* Initialisation de la suite des nombres complexes sur l'origine, soit :                    */
                                        /*                                                                                           */
                                        /*                  Z  = 0                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                        /* On notera que l'on pourrait optimiser, en partant directement sur 'C', mais la difference */
                                        /* entre Julia et Mandelbrot ne serait plus evidente...                                      */
                                  CLIR(nombre_courant_d_iterations);
                                        /* Initialisation du compteur des iterations.                                                */
                                  Eblock
                                  )
                            ,BLOC(Bblock
                                  Test(IL_FAUT(faire_une_symetrie_par_rapport_a_l_axe_reel))
                                       Bblock
                                       EGAL(Imaginaire(suite_point),NEGA(Imaginaire(suite_point)));
                                        /* La partie Imaginaire change de signe, ce qui correspond en fait a l'operation de          */
                                        /* "conjugaison"...                                                                          */
                                       Eblock
                                  ATes
                                       Bblock
                                       Eblock
                                  ETes
                                  Test(IL_FAUT(faire_une_symetrie_par_rapport_a_l_axe_imaginaire))
                                       Bblock
                                       EGAL(Reelle(suite_point),NEGA(Reelle(suite_point)));
                                        /* La partie Reelle change de signe...                                                       */
                                       Eblock
                                  ATes
                                       Bblock
                                       Eblock
                                  ETes

                                  aCproduit(point_manoeuvre,suite_point,suite_point);
                                        /* Malheureusement, il faut recalculer :                                                     */
                                        /*                                                                                           */
                                        /*                    2                                                                      */
                                        /*                  Z                                                                        */
                                        /*                   n                                                                       */
                                        /*                                                                                           */
                                  aCsomme(suite_point,point_manoeuvre,point_courant);
                                        /* Puis :                                                                                    */
                                        /*                                                                                           */
                                        /*                    2                                                                      */
                                        /*                  Z   + C                                                                  */
                                        /*                   n                                                                       */
                                        /*                                                                                           */
                                        /* ou 'C' designe le point complexe Courant.                                                 */
                                  Eblock
                                  )
                            ,Imandelbrot_dans_C_avec_symetries_axiales_____exposant
                            ,BLOC(VIDE;
                                  )
                                        /* Introduit le 20150225152454...                                                            */
                             );
          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' E N S E M B L E   D E   M A N D E L B R O T    D I T   " I N V E R S E "                           */
/*        D A N S   U N E    F E N E T R E   D A N S   L E   P L A N   C O M P L E X E  :                                            */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Soit la suite :                                                                                                */
/*                                                                                                                                   */
/*                                      Z    = C                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                                               1       k                                                                           */
/*                                      Z    = (---- + C)                                                                            */
/*                                       n+1     Z                                                                                   */
/*                                                n                                                                                  */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point courant).                                                                               */
/*                                                                                                                                   */
/*                    Si |Z | tend vers l'infini, 'C'                                                                                */
/*                         n                                                                                                         */
/*                  n'appartient pas a l'ensemble de Mandelbrot "inverse"...                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Forme generale :                                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  ......................######################....................                                                 */
/*                  .................###############################................                                                 */
/*                  ..............################-##...###############.............                                                 */
/*                  ...........##############.....#......--###############..........                                                 */
/*                  ...........##############.............################..........                                                 */
/*                  ..........#############--#................#############.........                                                 */
/*                  ..........##############.................#%############.........                                                 */
/*                  ..........#############.................O--:###########.........                                                 */
/*                  ..........############o:O:..............ooO############.........                                                 */
/*                  ..........#######o::o#----:...........:O::O%###########.........                                                 */
/*                  ...........######::::%-----o--o::-::--------o#########..........                                                 */
/*                  ...........#########-------------------------#oo::####..........                                                 */
/*                  ............######---------...........-------%::::Oo#...........                                                 */
/*                  .............####-----.....................---%%:###............                                                 */
/*                  ...............o##-...........................--#%..............                                                 */
/*                  ................................................................                                                 */
/*                  ...............o##-...........................--#%..............                                                 */
/*                  .............####-----.....................---%%:###............                                                 */
/*                  ............######---------...........-------%::::Oo#...........                                                 */
/*                  ...........#########-------------------------#oo::####..........                                                 */
/*                  ...........######::::%-----o--o::-::--------o#########..........                                                 */
/*                  ..........#######o::o#----:...........:O::O%###########.........                                                 */
/*                  ..........############o:O:..............ooO############.........                                                 */
/*                  ..........#############.................O--:###########.........                                                 */
/*                  ..........##############.................#%############.........                                                 */
/*                  ..........#############--#................#############.........                                                 */
/*                  ...........##############.............################..........                                                 */
/*                  ...........##############.....#......--###############..........                                                 */
/*                  ..............################-##...###############.............                                                 */
/*                  .................###############################................                                                 */
/*                  ......................######################....................                                                 */
/*                  ............................----................................                                                 */
/*                                                                                                                                   */
/*                                            (exposant=8)                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Imandelbrot_inverse_dans_C_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_C)));
                                        /* Seuil de divergence du carre du module d'un nombre complexe de la suite dans ce cas       */
                                        /* particulier (introduit le 20091118181636)...                                              */
DEFV(Common,DEFV(FonctionP,POINTERp(Imandelbrot_inverse_dans_C(imageR
                                                              ,exposant
                                                              ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                              ,ARGUMENT_POINTERs(coin_haut_droite)
                                                              ,nombre_maximal_d_iterations
                                                              ,visualisation_arguments_de_sortie
                                                               )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(Positive,exposant));
                                        /* Exposant 'k' ci-dessus...                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle))                    */
                                        /* de Z  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX').  */
                                        /*     n                                                                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_C
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */
                                        /* 20061219090342).                                                                          */

     gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
                                        /* Introduit le 20190314183222...                                                            */

     begin_image
          Bblock
          F_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(MONX(Imandelbrot_inverse_dans_C_____seuil_du_carre_du_module,exposant))
                            ,BLOC(Bblock
                                  Cegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres complexes sur le nombre courant 'C' :              */
                                        /*                                                                                           */
                                        /*                  Z  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                  CLIR(nombre_courant_d_iterations);
                                        /* Initialisation du compteur des iterations.                                                */
                                  Eblock
                                  )
                            ,BLOC(Bblock
                                  DEFV(complexe,point_manoeuvre_1);
                                  DEFV(complexe,point_manoeuvre_2);
                                  DEFV(complexe,point_manoeuvre_3);
                                  DEFV(complexe,point_manoeuvre_4);
                                        /* Points complexes de maneuvre lors de l'iteration.                                         */
                                  Test(IZNE(Cmodule2(suite_point)))
                                       Bblock
                                       aCquotient(point_manoeuvre_1,C_____nombre_complexe_p1__0,suite_point);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                   1                                                                       */
                                        /*                  ----                                                                     */
                                        /*                   Z                                                                       */
                                        /*                    n                                                                      */
                                        /*                                                                                           */

                                       aCsomme(point_manoeuvre_2,point_manoeuvre_1,point_courant);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                   1                                                                       */
                                        /*                  ---- + C                                                                 */
                                        /*                   Z                                                                       */
                                        /*                    n                                                                      */
                                        /*                                                                                           */

                                       Cegal(point_manoeuvre_3,C_____nombre_complexe_p1__0);
                                       Repe(exposant)
                                            Bblock
                                            aCproduit(point_manoeuvre_4,point_manoeuvre_3,point_manoeuvre_2);
                                            Cegal(point_manoeuvre_3,point_manoeuvre_4);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                    1       k                                                              */
                                        /*                  (---- + C)                                                               */
                                        /*                    Z                                                                      */
                                        /*                     n                                                                     */
                                        /*                                                                                           */
                                            Eblock
                                       ERep

                                       Cegal(suite_point,point_manoeuvre_3);
                                        /* Et enfin, mise a jour de :                                                                */
                                        /*                                                                                           */
                                        /*                  Z                                                                        */
                                        /*                   n                                                                       */
                                        /*                                                                                           */
                                       Eblock
                                  ATes
                                       Bblock
                                       Cinitialisation(suite_point,FLOT(INFINI),FLOT(INFINI));
                                        /* Cas d'une division par 0 : on force l'infini en se moquant du signe puisque de toute      */
                                        /* c'est ensuite 'Cmodule2(...)' qui est teste... ATTENTION, on notera l'utilisation de      */
                                        /* 'FLOT(INFINI)' et non pas de 'F_INFINI' afin d'eviter d'eventuels problemes de            */
                                        /* debordement ulterieurs...                                                                 */
                                       Eblock
                                  ETes
                                  Eblock
                                  )
                            ,DEUX
                            ,BLOC(VIDE;
                                  )
                                        /* Introduit le 20150225152454...                                                            */
                             );
          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*        :Debut_listMN_JULIA_COMPLEXE_11:                                                                                           */
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' E N S E M B L E   D E   J U L I A    D A N S   U N E    F E N E T R E                              */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Soit la suite :                                                                                                */
/*                                                                                                                                   */
/*                                      Z    = C                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point courant),                                                                               */
/*                                                                                                                                   */
/*                                              2                                                                                    */
/*                                      Z    = Z  + A                                                                                */
/*                                       n+1    n                                                                                    */
/*                                                                                                                                   */
/*                  (ou 'A' designe un nombre complexe                                                                               */
/*                  Argument arbitraire).                                                                                            */
/*                                                                                                                                   */
/*                    Si |Z | tend vers l'infini, 'C'                                                                                */
/*                         n                                                                                                         */
/*                  n'appartient pas a l'ensemble de Julia                                                                           */
/*                  calcule pour le nombre complexe 'A'.                                                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Forme generale :                                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  *......                .....*....                                                                                */
/*                  *......*.................****...                                                                                 */
/*                  ********...............***.....                                                                                  */
/*                  ........**.............***.....                                                                                  */
/*                  .........**...........**........                                                                                 */
/*                  ..........***************........                                                                                */
/*                       ........**...***..******......                                                                              */
/*                          ....*............***.........                                                                            */
/*                             ...............**...........                                                                          */
/*                               ..............***....*..*..                                                                         */
/*                                  ..........********......                                                                         */
/*                                      ...........***......                                                                         */
/*                                        ..........**......                                                                         */
/*                                          ........*****..                                                                          */
/*                                           ........*.....                                                                          */
/*                                            .....***.....                                                                          */
/*                                            .....*........                                                                         */
/*                                            ..*****........                                                                        */
/*                                           ......**..........                                                                      */
/*                                           ......***...........                                                                    */
/*                                           ......********..........                                                                */
/*                                           ..*..*....***..............                                                             */
/*                                            ...........**...............                                                           */
/*                                              .........***............*....                                                        */
/*                                                ......******..***...**........                                                     */
/*                                                  ........***************.........                                                 */
/*                                                   ........**...........**........                                                 */
/*                                                    .....***.............**.......                                                 */
/*                                                    .....***...............*******                                                 */
/*                                                   ...****.................*......                                                 */
/*                                                  ....*.....                ......                                                 */
/*                                                  ****....                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
/*        :Fin_listMN_JULIA_COMPLEXE_11:                                                                                             */

BFonctionP

DEFV(Common,DEFV(Float,SINT(Ijulia_dans_C_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_C)));
                                        /* Seuil de divergence du carre du module d'un nombre complexe de la suite dans ce cas       */
                                        /* particulier (introduit le 20091118181636)...                                              */
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_C_____exposant,FDEUX)));
                                        /* Introduit le 20091118113333...                                                            */
                                        /*                                                                                           */
                                        /* Le 20100608130024, le 'Int' est devenu un 'Float' pour plus de generalite...              */
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_C_____ponderation_point_argument_A,FU)));
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_C_____ponderation__point_courant_C,FZERO)));
                                        /* Introduit le 20130825092858...                                                            */

DEFV(Common,DEFV(Logical,SINT(Ijulia_dans_C_____charger_____l_etat_initial,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageJ,Ijulia_dans_C_____etat_initial),ADRESSE_NON_ENCORE_DEFINIE)));
DEFV(Common,DEFV(Logical,SINT(Ijulia_dans_C_____sauvegarder_l_etat_final__,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageJ,Ijulia_dans_C_____etat_final__),ADRESSE_NON_ENCORE_DEFINIE)));
                                        /* La possibilite de charger et sauvegarder les etats initiaux et finaux a ete               */
                                        /* introduit le 20150227205446...                                                            */

DEFV(Common,DEFV(FonctionP,POINTERp(Ijulia_dans_C(imageR
                                                 ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                 ,ARGUMENT_POINTERs(coin_haut_droite)
                                                 ,ARGUMENT_POINTERs(nombre_argument)
                                                 ,nombre_maximal_d_iterations
                                                 ,visualisation_arguments_de_sortie
                                                  )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(complexe,POINTERs(nombre_argument)));
                                        /* Nombre complexe "generateur" de l'ensemble de Julia que l'on veut calculer.               */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle))                    */
                                        /* de Z  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX').  */
                                        /*     n                                                                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_C
     DEFV(complexe,point_argument);
                                        /* Point complexe argument.                                                                  */
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */
                                        /* 20061219090342).                                                                          */

     gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
                                        /* Introduit le 20190314183222...                                                            */

     Cegal(point_argument,INDIRECT(nombre_argument));
                                        /* Recuperation du nombre complexe "generateur"...                                           */
     begin_image
          Bblock
          F_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(Ijulia_dans_C_____seuil_du_carre_du_module)
                            ,BLOC(Bblock
                                  Test(IL_FAUT(Ijulia_dans_C_____charger_____l_etat_initial))
                                       Bblock
                                       Cegal(suite_point,loadJ_point(Ijulia_dans_C_____etat_initial,X,Y));
                                       Eblock
                                  ATes
                                       Bblock
                                       Cegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres complexes sur le "point Courant" 'C',              */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  Z  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                       Eblock
                                  ETes

                                  EGAL(nombre_courant_d_iterations,UN);
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */
                                        /* valeur non nulle soit rangee...                                                           */
                                  Eblock
                                  )
                            ,BLOC(Bblock
                                  DEFV(complexe,point_manoeuvre_1);

                                  aCcombinaison_lineaire_2(point_manoeuvre_1
                                                          ,Ijulia_dans_C_____ponderation_point_argument_A,point_argument
                                                          ,Ijulia_dans_C_____ponderation__point_courant_C,point_courant
                                                           );
                                  aCsomme(suite_point,point_manoeuvre,point_manoeuvre_1);
                                        /* Puis :                                                                                    */
                                        /*                                                                                           */
                                        /*                    2                                                                      */
                                        /*                  Z   + A                                                                  */
                                        /*                   n                                                                       */
                                        /*                                                                                           */
                                        /* ou 'A' designe le point complexe Argument.                                                */
                                        /*                                                                                           */
                                        /* Ou plus generalement (introduit le 20130825092858) :                                      */
                                        /*                                                                                           */
                                        /*                    2                                                                      */
                                        /*                  Z   + p .A + p .C                                                        */
                                        /*                   n     A      C                                                          */
                                        /*                                                                                           */
                                        /* avec pA=1 et pC=0 par defaut...                                                           */
                                  Eblock
                                  )
                            ,Ijulia_dans_C_____exposant
                            ,BLOC(Bblock
                                  Test(IL_FAUT(Ijulia_dans_C_____sauvegarder_l_etat_final__))
                                       Bblock
                                       storeJ_point(suite_point,Ijulia_dans_C_____etat_final__,X,Y);
                                       Eblock
                                  ATes
                                       Bblock
                                       Eblock
                                  ETes
                                  Eblock
                                  )
                                        /* Introduit le 20150225152454...                                                            */
                             );
          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' E N S E M B L E   D E   V E R H U L S T   D A N S   U N E    F E N E T R E                         */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Soit la suite :                                                                                                */
/*                                                                                                                                   */
/*                                      Z    = C                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point courant),                                                                               */
/*                                                                                                                                   */
/*                                      Z    = R.Z .(1 - Z )                                                                         */
/*                                       n+1      n       n                                                                          */
/*                                                                                                                                   */
/*                  (ou 'R' designe un nombre reel Argument                                                                          */
/*                  arbitraire appele "taux de croissance").                                                                         */
/*                                                                                                                                   */
/*                    Si |Z | tend vers l'infini, 'C'                                                                                */
/*                         n                                                                                                         */
/*                  n'appartient pas a l'ensemble de Verhulst                                                                        */
/*                  calcule pour le nombre reel 'R'.                                                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Forme generale :                                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................#...............................                                                 */
/*                  ...............................###..............................                                                 */
/*                  ................................#...............................                                                 */
/*                  .........................#.###########.#........................                                                 */
/*                  ........................#################.......................                                                 */
/*                  ............####.......###################.......####...........                                                 */
/*                  .........##########...#####################...##########........                                                 */
/*                  ....###..###########..#####################..###########..###...                                                 */
/*                  ################################################################                                                 */
/*                  ....###..###########..#####################..###########..###...                                                 */
/*                  .........##########...#####################...##########........                                                 */
/*                  ............####.......###################.......####...........                                                 */
/*                  ........................#################.......................                                                 */
/*                  .........................#.###########.#........................                                                 */
/*                  ................................#...............................                                                 */
/*                  ...............................###..............................                                                 */
/*                  ................................#...............................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Logical,SINT(Iverhulst_dans_C_____utiliser_la_forme_la_plus_simple,VRAI)));
                                        /* Faut-il utiliser la forme ('VRAI') :                                                      */
                                        /*                                                                                           */
                                        /*                  Z    = R.Z .(1 - Z )                                                     */
                                        /*                   n+1      n       n                                                      */
                                        /*                                                                                           */
                                        /* ou bien la forme ('FAUX') :                                                               */
                                        /*                                                                                           */
                                        /*                                      2                                                    */
                                        /*                  Z    = (R+1).Z - R.Z                                                     */
                                        /*                   n+1          n     n                                                    */
                                        /*                                                                                           */
                                        /* Ceci a ete introduit le 20040921105449.                                                   */
DEFV(Common,DEFV(Float,SINT(Iverhulst_dans_C_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_C)));
                                        /* Seuil de divergence du carre du module d'un nombre complexe de la suite dans le cas       */
                                        /* particulier du calcul de l'ensemble de Verhulst. ATTENTION : j'ai utilise quelque temps   */
                                        /* la valeur suivante :                                                                      */
                                        /*                                                                                           */
                                        /*                  EXP2(FLOT(MILLE))                                                        */
                                        /*                                                                                           */
                                        /* mais, je prefere revenir a la valeur standard...                                          */

DEFV(Common,DEFV(FonctionP,POINTERp(Iverhulst_dans_C(imageR
                                                    ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                    ,ARGUMENT_POINTERs(coin_haut_droite)
                                                    ,ARGUMENT_POINTERs(taux_de_croissance)
                                                    ,nombre_maximal_d_iterations
                                                    ,visualisation_arguments_de_sortie
                                                     )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(complexe,POINTERs(taux_de_croissance)));
                                        /* Taux de croissance complexe 'R' de l'ensemble de Verhulst que l'on veut calculer.         */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle))                    */
                                        /* de Z  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX').  */
                                        /*     n                                                                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_C
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */
                                        /* 20061219090342).                                                                          */

     gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
                                        /* Introduit le 20190314183222...                                                            */

     begin_image
          Bblock
          F_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(Iverhulst_dans_C_____seuil_du_carre_du_module)
                            ,BLOC(Bblock
                                  Cegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres complexes sur le "point Courant" 'C',              */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  Z  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                  EGAL(nombre_courant_d_iterations,UN);
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */
                                        /* valeur non nulle soit rangee...                                                           */
                                  Eblock
                                  )
                            ,BLOC(Bblock
                                  Test(IL_FAUT(Iverhulst_dans_C_____utiliser_la_forme_la_plus_simple))
                                        /* Ce test a ete introduit le 20040921105449...                                              */
                                       Bblock
                                       DEFV(complexe,point_manoeuvre_1);
                                       DEFV(complexe,point_manoeuvre_2);
                                        /* Points complexes de maneuvre lors de l'iteration.                                         */

                                       aCforme_lineaire(point_manoeuvre_1,NEGA(FU),suite_point,FU);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  1 - Z  = -Z  + 1                                                         */
                                        /*                       n     n                                                             */
                                        /*                                                                                           */

                                       aCproduit(point_manoeuvre_2,suite_point,point_manoeuvre_1);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  Z .(1 - Z )                                                              */
                                        /*                   n       n                                                               */
                                        /*                                                                                           */

                                       aCproduit(suite_point,INDIRECT(taux_de_croissance),point_manoeuvre_2);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  Z    = R.Z .(1 - Z )                                                     */
                                        /*                   n+1      n       n                                                      */
                                        /*                                                                                           */
                                       Eblock
                                  ATes
                                       Bblock
                                        /* Cette formulation a ete introduite le 20040921105449...                                   */
                                       DEFV(complexe,point_manoeuvre_1);
                                       DEFV(complexe,point_manoeuvre_2);
                                       DEFV(complexe,point_manoeuvre_3);
                                       DEFV(complexe,point_manoeuvre_4);
                                        /* Points complexes de maneuvre lors de l'iteration.                                         */

                                       aCproduit(point_manoeuvre_1,suite_point,suite_point);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                   2                                                                       */
                                        /*                  Z                                                                        */
                                        /*                   n                                                                       */
                                        /*                                                                                           */

                                       aCproduit(point_manoeuvre_2,INDIRECT(taux_de_croissance),point_manoeuvre_1);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                     2                                                                     */
                                        /*                  R.Z                                                                      */
                                        /*                     n                                                                     */
                                        /*                                                                                           */

                                       aCforme_lineaire(point_manoeuvre_3,FU,INDIRECT(taux_de_croissance),FU);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  R+1                                                                      */
                                        /*                                                                                           */

                                       aCproduit(point_manoeuvre_4,point_manoeuvre_3,suite_point);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  (R+1).Z                                                                  */
                                        /*                         n                                                                 */
                                        /*                                                                                           */

                                       aCdifference(suite_point,point_manoeuvre_4,point_manoeuvre_2);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                                      2                                                    */
                                        /*                  Z    = (R+1).Z - R.Z                                                     */
                                        /*                   n+1          n     n                                                    */
                                        /*                                                                                           */
                                       Eblock
                                  ETes
                                  Eblock
                                  )
                            ,EXPOSANT_INUTILE
                                        /* Le 20111130114853, je note que cet argument ('DEUX') est inutile ici, de meme que         */
                                        /* calcul de 'point_manoeuvre' via 'Cpuissance(...)'.                                        */
                                        /*                                                                                           */
                                        /* Le 20111130125631, 'DEUX' fut d'ailleurs remplace par 'EXPOSANT_INUTILE'...               */
                            ,BLOC(VIDE;
                                  )
                                        /* Introduit le 20150225152454...                                                            */
                             );
          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' E N S E M B L E   D E   C O L O N N A    D A N S   U N E    F E N E T R E                          */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

#define   TRANSFORMATION_COLONNA_1(point)                                                                                               \
                    Bblock                                                                                                              \
                    Eblock                                                                                                              \
                                        /* "Transformation" de type 1...                                                             */
#define   TRANSFORMATION_COLONNA_2(point)                                                                                               \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(module,FLOT__UNDEF));                                                                               \
                                        /* Module du nombre complexe 'point',                                                        */ \
                    DEFV(Float,INIT(argument,FLOT__UNDEF));                                                                             \
                                        /* Argument du nombre complexe 'point'.                                                      */ \
                    EGAL(module,Cmodule(point));                                                                                        \
                                        /* Calcul du module du nombre complexe de manoeuvre,                                         */ \
                    EGAL(argument,Cargument_PI(point));                                                                                 \
                                        /* Et calcul de son argument.                                                                */ \
                    Cinitialisation(point                                                                                               \
                                   ,Xcartesienne_2D(module,argument)                                                                    \
                                   ,Ycartesienne_2D(module,argument)                                                                    \
                                    );                                                                                                  \
                                        /* Et "reconstitution" du nombre complexe de manoeuvre...                                    */ \
                    Eblock                                                                                                              \
                                        /* "Transformation" de type 2...                                                             */
#define   TRANSFORMATION_COLONNA_3(point)                                                                                               \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(module,FLOT__UNDEF));                                                                               \
                                        /* Module du nombre complexe 'point',                                                        */ \
                    DEFV(Float,INIT(argument,FLOT__UNDEF));                                                                             \
                                        /* Argument du nombre complexe 'point'.                                                      */ \
                    EGAL(module,Cmodule(point));                                                                                        \
                                        /* Calcul du module du nombre complexe de manoeuvre,                                         */ \
                    EGAL(argument,Cargument_PI(point));                                                                                 \
                                        /* Et calcul de son argument,                                                                */ \
                    EGAL(argument,MUL2(MUL2(amplitude,module),argument));                                                               \
                                        /* Puis transformation de ce dernier par modulation par le 'module',                         */ \
                                        /* afin de creer un effet de spirale.                                                        */ \
                    Cinitialisation(point                                                                                               \
                                   ,Xcartesienne_2D(module,argument)                                                                    \
                                   ,Ycartesienne_2D(module,argument)                                                                    \
                                    );                                                                                                  \
                                        /* Et "reconstitution" du nombre complexe de manoeuvre...                                    */ \
                    Eblock                                                                                                              \
                                        /* "Transformation" de type 3...                                                             */
#define   TRANSFORMATION_COLONNA(point)                                                                                                 \
                    Bblock                                                                                                              \
                    TRANSFORMATION_COLONNA_3(point)                                                                                     \
                    Eblock                                                                                                              \
                                        /* Transformation choisie...                                                                 */

DEFV(Common,DEFV(FonctionP,POINTERp(Icolonna_dans_C(imageR
                                                   ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                   ,ARGUMENT_POINTERs(coin_haut_droite)
                                                   ,ARGUMENT_POINTERs(nombre_argument)
                                                   ,amplitude
                                                   ,nombre_maximal_d_iterations
                                                   ,visualisation_arguments_de_sortie
                                                    )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(complexe,POINTERs(nombre_argument)));
                                        /* Nombre complexe "generateur" de l'ensemble de COLONNA que l'on veut calculer.             */
DEFV(Argument,DEFV(Float,amplitude));
                                        /* Afin de moduler le module...                                                              */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle))                    */
                                        /* de Z  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX').  */
                                        /*     n                                                                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_C
     DEFV(complexe,point_argument);
                                        /* Point complexe argument.                                                                  */
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */
                                        /* 20061219090342).                                                                          */

     gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
                                        /* Introduit le 20190314183222...                                                            */

     Cegal(point_argument,INDIRECT(nombre_argument));
                                        /* Recuperation du nombre complexe "generateur"...                                           */
     begin_image
          Bblock
          F_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(iterations_diverses_dans_C_____seuil_du_carre_du_module)
                            ,BLOC(Bblock
                                  Cegal(suite_point,C_____nombre_complexe__0__0);
                                        /* Initialisation de la suite des nombres complexes sur l'origine,                           */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  Z  = 0                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                        /* On notera que l'on pourrait optimiser, en partant directement sur 'C', mais la difference */
                                        /* difference entre Julia et Mandelbrot ne serait plus evidente...                           */
                                  CLIR(nombre_courant_d_iterations);
                                        /* Initialisation du compteur des iterations.                                                */
                                  Eblock
                                  )
                            ,BLOC(Bblock
                                  TRANSFORMATION_COLONNA(point_manoeuvre);
                                  aCsomme(suite_point,point_manoeuvre,point_courant);
                                  aCproduit(point_manoeuvre,point_argument,point_courant);
                                  TRANSFORMATION_COLONNA(point_manoeuvre);
                                  aCsomme(suite_point,suite_point,point_manoeuvre);
                                        /* Puis :                                                                                    */
                                        /*                                                                                           */
                                        /*                           2                                                               */
                                        /*                  Z    = Z   + (A.Z ) + C                                                  */
                                        /*                   n+1    n        n                                                       */
                                        /*                                                                                           */
                                        /* ou 'C' designe le point Courant et 'A' le point Argument.                                 */
                                  Eblock
                                  )
                            ,DEUX
                            ,BLOC(VIDE;
                                  )
                                        /* Introduit le 20150225152454...                                                            */
                             );
          Eblock
     end_image

     RETI(imageR);
     Eblock

#undef    TRANSFORMATION_COLONNA
#undef    TRANSFORMATION_COLONNA_3
#undef    TRANSFORMATION_COLONNA_2
#undef    TRANSFORMATION_COLONNA_1

EFonctionP

/*===================================================================================================================================*/
/*        :Debut_listMN_RACINES_TROISIEMES_UNITE_COMPLEXES_11:                                                                       */
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E S   R A C I N E S   T R O I S I E M E S   D E   L ' U N I T E                                            */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Rappelons la methode iterative de                                                                              */
/*                  Newton pour la resolution d'une equation                                                                         */
/*                  du type :                                                                                                        */
/*                                                                                                                                   */
/*                                      f(x) = 0                                                                                     */
/*                                                                                                                                   */
/*                   Soit 'G' la courbe d'equation y=f(x) :                                                                          */
/*                                                                                                                                   */
/*                            ^                                                                                                      */
/*                          Y |                       +  / tangente en T a la courbe G                                               */
/*                            |                         /                                                                            */
/*                            |                      + /                                                                             */
/*                            |                       /                                                                              */
/*                            |                     +/                                                                               */
/*                            |                     *T                                                                               */
/*                            |         y = f(x) + /.                                                                                */
/*                            |               +   / .                                                                                */
/*                            |             +    /  .                                                                                */
/*                            |            +    /   .                                                                                */
/*                            |           +    /    .                                                                                */
/*                  ----------O----------+----/--------------------------------->                                                    */
/*                            |        +     /X     X                          X                                                     */
/*                            |   G +       /  n+1   n                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    Partant de l'abscisse X , on determine                                                                         */
/*                                           n                                                                                       */
/*                  la tangente au point (X ,f(X )) a la courbe 'G'.                                                                 */
/*                                         n    n                                                                                    */
/*                  Son equation est :                                                                                               */
/*                                                                                                                                   */
/*                                      y = f'(X )(x - X ) + f(X )                                                                   */
/*                                              n       n       n                                                                    */
/*                                                                                                                                   */
/*                  Son intersection avec l'axe 'OX' a pour                                                                          */
/*                  abscisse :                                                                                                       */
/*                                                                                                                                   */
/*                                                   f(X )                                                                           */
/*                                                      n                                                                            */
/*                                      X    = X  - --------                                                                         */
/*                                       n+1    n    f'(X )                                                                          */
/*                                                       n                                                                           */
/*                                                                                                                                   */
/*                  Enfin, on itere ce processus.                                                                                    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  De meme dans le plan complexe, soit a                                                                            */
/*                  resoudre l'equation :                                                                                            */
/*                                                                                                                                   */
/*                                       3                                                                                           */
/*                                      Z    = 1                                                                                     */
/*                                                                                                                                   */
/*                  qui donne les trois racines de l'unite, on                                                                       */
/*                  procede a l'iteration suivante :                                                                                 */
/*                                                                                                                                   */
/*                                      Z    = C                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                                                    3                                                                              */
/*                                                   Z  - 1                                                                          */
/*                                                    n                                                                              */
/*                                      Z    = Z  - --------                                                                         */
/*                                       n+1    n        2                                                                           */
/*                                                    3.Z                                                                            */
/*                                                       n                                                                           */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point courant).                                                                               */
/*                                                                                                                                   */
/*                    Si |Z | tend vers l'infini, 'C'                                                                                */
/*                         n                                                                                                         */
/*                  n'appartient pas a l'ensemble de Racine3.                                                                        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Forme generale :                                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  ::::::::::::::::::::::::::::::::::::::::::::o:ooooooooooooo                                                      */
/*                  ::::::::::::::::::::::::::::::::::::::::::::oooooooooo::                                                         */
/*                  :::::::::::::::::::::::::::::::::::::::::::::ooooooo::                                                           */
/*                  :::::::::::::::::::::::::::::::::::::::::::::ooooo                                                               */
/*                  :::::::::::::::::::::::::::::::::::::o                                                                           */
/*                  :::::::::::::::::::::::::::::::::::oo     ooo:::                                                                 */
/*                  ::::::::::::::::::::::::::::::::::: o::oooooo::::                                                                */
/*                  :::::::::::::::::::::::::::::::::o  ooooooooo::::o                                                               */
/*                  ::::::::::::::::::::::::::::::::: ooooooooooo ::o:                                                               */
/*                  :::::::::::::::::::::::::::::::::ooooooooooooo:                                                                  */
/*                  :::::::::::::::::::::::::::::::::ooooooooooo :o                                                                  */
/*                  :::::::::::: ::::::::::::::::::::oooooooooo::                                                                    */
/*                  ::::::::: oooooooo:oo :::::::::: oooooooo::                                                                      */
/*                  :o::::::ooooo:          o::::::: ooooo                                                                           */
/*                      :::oooo                  ::: ooo                                                                             */
/*                                                  .                                                                                */
/*                      ooo::::                  ooo :::                                                                             */
/*                  o:oooooo:::::o          :ooooooo :::::                                                                           */
/*                  ooooooooo ::::::::o:: oooooooooo ::::::::oo                                                                      */
/*                  oooooooooooo oooooooooooooooooooo::::::::::oo                                                                    */
/*                  ooooooooooooooooooooooooooooooooo::::::::::: o:                                                                  */
/*                  ooooooooooooooooooooooooooooooooo:::::::::::::o                                                                  */
/*                  ooooooooooooooooooooooooooooooooo ::::::::::: oo:o                                                               */
/*                  ooooooooooooooooooooooooooooooooo:  :::::::::oooo:                                                               */
/*                  ooooooooooooooooooooooooooooooooooo :oo::::::oooo                                                                */
/*                  ooooooooooooooooooooooooooooooooooo::     :::ooo                                                                 */
/*                  ooooooooooooooooooooooooooooooooooooo:                                                                           */
/*                  ooooooooooooooooooooooooooooooooooooooooooooo:::::                                                               */
/*                  ooooooooooooooooooooooooooooooooooooooooooooo:::::::oo                                                           */
/*                  oooooooooooooooooooooooooooooooooooooooooooo::::::::::oo                                                         */
/*                  oooooooooooooooooooooooooooooooooooooooooooo:o:::::::::::::                                                      */
/*                  oooooooooooooooooooooooooooooooooooooooooooooo::::::::::ooo:                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
/*        :Fin_listMN_RACINES_TROISIEMES_UNITE_COMPLEXES_11:                                                                         */

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iracines_troisiemes_de_l_unite_dans_C_____seuil_du_carre_du_module,F_INFINI)));
                                        /* Seuil de divergence du carre du module d'un nombre complexe de la suite dans le cas       */
                                        /* particulier de la recherche des racines troisiemes de l'unite...                          */

DEFV(Common,DEFV(FonctionP,POINTERp(Iracines_troisiemes_de_l_unite_dans_C(imageR
                                                                         ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                                         ,ARGUMENT_POINTERs(coin_haut_droite)
                                                                         ,nombre_maximal_d_iterations
                                                                         ,visualisation_arguments_de_sortie
                                                                          )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle))                    */
                                        /* de Z  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX').  */
                                        /*     n                                                                                     */
                                        /*                                                                                           */
                                        /* On notera le 20061205170611 que c'est le fait que l'on visualise a priori l'argument      */
                                        /* de sortie qui permet de visualiser la racine (parmi les 3) vers laquelle on converge,     */
                                        /* puisque qu'elles sont sur le cercle trigonometrique. Ainsi, les 3 arguments possibles     */
                                        /* sont tres differents les uns des autres et se distinguent par les couleurs.               */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_C
     DEFV(complexe,point_manoeuvre_reel);
                                        /* Constante imaginaire (1,0).                                                               */
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */
                                        /* 20061219090342).                                                                          */

     gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
                                        /* Introduit le 20190314183222...                                                            */

     Cegal(point_manoeuvre_reel,C_____nombre_complexe_p1__0);
                                        /* Initialisation de la constante imaginaire (1,0).                                          */
     begin_image
          Bblock
          F_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(Iracines_troisiemes_de_l_unite_dans_C_____seuil_du_carre_du_module)
                            ,BLOC(Bblock
                                  Cegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres complexes sur le "point Courant" 'C',              */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  Z  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                  EGAL(nombre_courant_d_iterations,UN);
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */
                                        /* valeur non nulle soit rangee...                                                           */
                                  Eblock
                                  )
                            ,BLOC(Bblock
                                  Test(IZNE(Cmodule2(suite_point)))
                                       Bblock
                                       DEFV(complexe,point_manoeuvre_1);
                                       DEFV(complexe,point_manoeuvre_2);
                                       DEFV(complexe,point_manoeuvre_3);
                                       DEFV(complexe,point_manoeuvre_4);
                                       DEFV(complexe,point_manoeuvre_5);
                                        /* Points complexes de maneuvre lors de l'iteration.                                         */

                                       aCforme_lineaire(point_manoeuvre_1,FLOT(TROIS),point_manoeuvre,FZERO)
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                     2                                                                     */
                                        /*                  3.Z                                                                      */
                                        /*                     n                                                                     */
                                        /*                                                                                           */

                                       aCproduit(point_manoeuvre_2,suite_point,point_manoeuvre);
                                       aCdifference(point_manoeuvre_3,point_manoeuvre_2,point_manoeuvre_reel);
                                        /* Puis de :                                                                                 */
                                        /*                                                                                           */
                                        /*                   3                                                                       */
                                        /*                  Z  - 1                                                                   */
                                        /*                   n                                                                       */
                                        /*                                                                                           */

                                       aCquotient(point_manoeuvre_4,point_manoeuvre_3,point_manoeuvre_1);
                                        /* Puis de :                                                                                 */
                                        /*                                                                                           */
                                        /*                    3                                                                      */
                                        /*                   Z  - 1                                                                  */
                                        /*                    n                                                                      */
                                        /*                  --------                                                                 */
                                        /*                       2                                                                   */
                                        /*                    3.Z                                                                    */
                                        /*                       n                                                                   */
                                        /*                                                                                           */

                                       aCdifference(point_manoeuvre_5,suite_point,point_manoeuvre_4);
                                       Cegal(suite_point,point_manoeuvre_5);
                                        /* Puis de :                                                                                 */
                                        /*                                                                                           */
                                        /*                                3                                                          */
                                        /*                               Z  - 1                                                      */
                                        /*                                n                                                          */
                                        /*                  Z    = Z  - --------                                                     */
                                        /*                   n+1    n        2                                                       */
                                        /*                                3.Z                                                        */
                                        /*                                   n                                                       */
                                        /*                                                                                           */
                                       Eblock
                                  ATes
                                       Bblock
                                        /* L'origine (0,0) est un point particulier...                                               */
                                       Eblock
                                  ETes
                                  Eblock
                                  )
                            ,EXPOSANT_INUTILE
                                        /* Le 20111130114853, je note que cet argument ('DEUX') est inutile ici, de meme que         */
                                        /* calcul de 'point_manoeuvre' via 'Cpuissance(...)'.                                        */
                                        /*                                                                                           */
                                        /* Le 20111130125631, 'DEUX' fut d'ailleurs remplace par 'EXPOSANT_INUTILE'...               */
                            ,BLOC(VIDE;
                                  )
                                        /* Introduit le 20150225152454...                                                            */
                             );
          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*        :Debut_listMN_RACINES_N_IEMES_UNITE_COMPLEXES_11:                                                                          */
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E S   R A C I N E S   N - I E M E S   D E   L ' U N I T E                                                  */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Rappelons la methode iterative de                                                                              */
/*                  Newton pour la resolution d'une equation                                                                         */
/*                  du type :                                                                                                        */
/*                                                                                                                                   */
/*                                      f(x) = 0                                                                                     */
/*                                                                                                                                   */
/*                   Soit 'G' la courbe d'equation y=f(x) :                                                                          */
/*                                                                                                                                   */
/*                            ^                                                                                                      */
/*                          Y |                       +  / tangente en T a la courbe G                                               */
/*                            |                         /                                                                            */
/*                            |                      + /                                                                             */
/*                            |                       /                                                                              */
/*                            |                     +/                                                                               */
/*                            |                     *T                                                                               */
/*                            |         y = f(x) + /.                                                                                */
/*                            |               +   / .                                                                                */
/*                            |             +    /  .                                                                                */
/*                            |            +    /   .                                                                                */
/*                            |           +    /    .                                                                                */
/*                  ----------O----------+----/--------------------------------->                                                    */
/*                            |        +     /X     X                          X                                                     */
/*                            |   G +       /  n+1   n                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    Partant de l'abscisse X , on determine                                                                         */
/*                                           n                                                                                       */
/*                  la tangente au point (X ,f(X )) a la courbe 'G'.                                                                 */
/*                                         n    n                                                                                    */
/*                  Son equation est :                                                                                               */
/*                                                                                                                                   */
/*                                      y = f'(X )(x - X ) + f(X )                                                                   */
/*                                              n       n       n                                                                    */
/*                                                                                                                                   */
/*                  Son intersection avec l'axe 'OX' a pour                                                                          */
/*                  abscisse :                                                                                                       */
/*                                                                                                                                   */
/*                                                   f(X )                                                                           */
/*                                                      n                                                                            */
/*                                      X    = X  - --------                                                                         */
/*                                       n+1    n    f'(X )                                                                          */
/*                                                       n                                                                           */
/*                                                                                                                                   */
/*                  Enfin, on itere ce processus.                                                                                    */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
/*        :Fin_listMN_RACINES_N_IEMES_UNITE_COMPLEXES_11:                                                                            */

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iracines_n_iemes_de_l_unite_dans_C_____seuil_du_carre_du_module,F_INFINI)));
                                        /* Seuil de divergence du carre du module d'un nombre complexe de la suite dans le cas       */
                                        /* particulier de la recherche des racines n_iemes de l'unite...                             */

DEFV(Common,DEFV(Logical,SINT(Iracines_n_iemes_de_l_unite_dans_C_____marquer_les_racines_de_l_unite,FAUX)));
DEFV(Common,DEFV(genere_p,SINT(Iracines_n_iemes_de_l_unite_dans_C_____niveau_des_racines_de_l_unite,BLANC)));
                                        /* Introduit le 20200623115258 pour montrer la position des racines de l'unite...            */
                                        /*                                                                                           */
                                        /* Le 20200627112145, je note un danger : que 'niveau_des_racines_de_l_unite', niveau de     */
                                        /* marquage des racines de l'unite soit rencontre dans 'F_ITERATION_DANS_C(...)' (soit       */
                                        /* 'v $ximcf/iterations$FON store_point.niveau_courant.imageR.X.Y.FVARIABLE..'). Mais que    */
                                        /* faire a part le test introduit le 20200627112145 ci-apres ?                               */

DEFV(Common,DEFV(FonctionP,POINTERp(Iracines_n_iemes_de_l_unite_dans_C(imageR
                                                                      ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                                      ,ARGUMENT_POINTERs(coin_haut_droite)
                                                                      ,exposant
                                                                      ,nombre_maximal_d_iterations
                                                                      ,visualisation_arguments_de_sortie
                                                                       )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Positive,exposant));
                                        /* Exposant 'N'.                                                                             */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle))                    */
                                        /* de Z  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX').  */
                                        /*     n                                                                                     */
                                        /*                                                                                           */
                                        /* On notera le 20061205170611 que c'est le fait que l'on visualise a priori l'argument      */
                                        /* de sortie qui permet de visualiser la racine (parmi les N) vers laquelle on converge,     */
                                        /* puisque qu'elles sont sur le cercle trigonometrique. Ainsi, les N arguments possibles     */
                                        /* sont tres differents les uns des autres et se distinguent par les couleurs. C'est la      */
                                        /* raison pour laquelle cet argument n'est pas un parametre des programmes appelant          */
                                        /* ('v $xrc/racN.01$K visualisation_arguments_de_sortie')...                                 */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_C
     DEFV(complexe,exposant_complexe_moins_1);
                                        /* Exposant complexe moins 1.                                                                */
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */
                                        /* 20061219090342).                                                                          */

     gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
                                        /* Introduit le 20190314183222...                                                            */

     begin_image
          Bblock
          F_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(Iracines_n_iemes_de_l_unite_dans_C_____seuil_du_carre_du_module)
                            ,BLOC(Bblock
                                  Cinitialisation(exposant_complexe_moins_1,FLOT(PRED(exposant)),I0_Complexe);
                                        /* Conversion complexe de l'exposant moins 1.                                                */
                                  Cegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres complexes sur le "point Courant" 'C',              */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  Z  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                  EGAL(nombre_courant_d_iterations,UN);
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */
                                        /* valeur non nulle soit rangee...                                                           */
                                  Eblock
                                  )
                            ,BLOC(Bblock
                                  Test(IZNE(Cmodule2(suite_point)))
                                       Bblock
                                       DEFV(complexe,point_manoeuvre_1);
                                       DEFV(complexe,point_manoeuvre_3);
                                       DEFV(complexe,point_manoeuvre_4);
                                       DEFV(complexe,point_manoeuvre_5);
                                       DEFV(complexe,point_manoeuvre_6);
                                       DEFV(complexe,point_manoeuvre_7);
                                        /* Points complexes de maneuvre lors de l'iteration.                                         */

                                       Cexponentielle_complexe(point_manoeuvre_6,suite_point,exposant_complexe_moins_1);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                 N-1                                                                       */
                                        /*                Z                                                                          */
                                        /*                 n                                                                         */
                                        /*                                                                                           */
                                       aCproduit(point_manoeuvre_7,suite_point,point_manoeuvre_6);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                 N                                                                         */
                                        /*                Z                                                                          */
                                        /*                 n                                                                         */
                                        /*                                                                                           */
                                       aCforme_lineaire(point_manoeuvre_1,FLOT(exposant),point_manoeuvre_6,FZERO)
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                     N-1                                                                   */
                                        /*                  N.Z                                                                      */
                                        /*                     n                                                                     */
                                        /*                                                                                           */

                                       aCdifference(point_manoeuvre_3,point_manoeuvre_7,C_____nombre_complexe_p1__0);
                                        /* Puis de :                                                                                 */
                                        /*                                                                                           */
                                        /*                   N                                                                       */
                                        /*                  Z  - 1                                                                   */
                                        /*                   n                                                                       */
                                        /*                                                                                           */

                                       aCquotient(point_manoeuvre_4,point_manoeuvre_3,point_manoeuvre_1);
                                        /* Puis de :                                                                                 */
                                        /*                                                                                           */
                                        /*                    N                                                                      */
                                        /*                   Z  - 1                                                                  */
                                        /*                    n                                                                      */
                                        /*                  ---------                                                                */
                                        /*                       N-1                                                                 */
                                        /*                   N.Z                                                                     */
                                        /*                      n                                                                    */
                                        /*                                                                                           */

                                       aCdifference(point_manoeuvre_5,suite_point,point_manoeuvre_4);
                                       Cegal(suite_point,point_manoeuvre_5);
                                        /* Puis de :                                                                                 */
                                        /*                                                                                           */
                                        /*                                N                                                          */
                                        /*                               Z  - 1                                                      */
                                        /*                                n                                                          */
                                        /*                  Z    = Z  - --------                                                     */
                                        /*                   n+1    n       N-1                                                      */
                                        /*                               N.Z                                                         */
                                        /*                                  n                                                        */
                                        /*                                                                                           */
                                       Eblock
                                  ATes
                                       Bblock
                                        /* L'origine (0,0) est un point particulier...                                               */
                                       Eblock
                                  ETes
                                  Eblock
                                  )
                            ,EXPOSANT_INUTILE
                                        /* Le 20111130114853, je note que cet argument ('DEUX') est inutile ici, de meme que         */
                                        /* calcul de 'point_manoeuvre' via 'Cpuissance(...)'.                                        */
                                        /*                                                                                           */
                                        /* Le 20111130125631, 'DEUX' fut d'ailleurs remplace par 'EXPOSANT_INUTILE'...               */
                            ,BLOC(VIDE;
                                  )
                                        /* Introduit le 20150225152454...                                                            */
                             );
          Eblock
     end_image

     Test(IL_FAUT(Iracines_n_iemes_de_l_unite_dans_C_____marquer_les_racines_de_l_unite))
                                        /* Introduit le 20200623115258...                                                            */
          Bblock
          Test(IFGE(niveau_courant_maximal,Iracines_n_iemes_de_l_unite_dans_C_____niveau_des_racines_de_l_unite))
                                        /* Introduit le 20200627112145...                                                            */
               Bblock
               PRINT_ATTENTION("le niveau de marquage des racines de l'unite a ete rencontre lors du marquage des iterations");
               CAL1(Prer2("(il vaut %d alors qu'au moins un niveau egal a %d a ete rencontre)\n"
                         ,Iracines_n_iemes_de_l_unite_dans_C_____niveau_des_racines_de_l_unite
                         ,niveau_courant_maximal
                          )
                    );
                                        /* Que faire alors ? Diminuer le nombre d'iterations ?                                       */
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Repe(exposant)
               Bblock
               DEFV(complexe,suite_point);

               Cinitialisation_polaire(suite_point
                                      ,Rho1_Complexe
                                      ,SCAL(CERCLE_TRIGONOMETRIQUE
                                           ,exposant
                                           ,SOUS(compteur_des_repetitions_du_Repe,PREMIERE_ITERATION_D_UN_Repe)
                                            )
                                       );
                                        /* Calcul exact de l'une des 'exposant's racines de l'unite...                               */

               store_point(Iracines_n_iemes_de_l_unite_dans_C_____niveau_des_racines_de_l_unite
                          ,imageR
                          ,X_PLAN_IMAGE,Y_PLAN_IMAGE
                          ,FVARIABLE
                           );
                                        /* Marquage de l'une des 'exposant's racines de l'unite...                                   */
               Eblock
          ERep
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L ' E X P O S A N T   D E   L Y A P U N O V                                                    */
/*        D ' U N   S Y S T E M E   D Y N A M I Q U E   D E F I N I   P A R   U N E   S U I T E  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   BVARIABLES_F_EXPOSANT_LYAPUNOV_SANS_point_courant                                                                             \
                                        /* Definition des variables communes a toutes les fonctions calculant l'exposant de Lyapunov */ \
                                        /* d'un systeme dynamique...                                                                 */ \
                    DEFV(Int,INIT(mode_de_calcul_utilise_pour_l_exposant_de_Lyapunov                                                    \
                                 ,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov                                                    \
                                  )                                                                                                     \
                         );                                                                                                             \
                                        /* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la         */ \
                                        /* fonction iteree ; en effet, suivant les circonstances (cas ou les calculs sont purement   */ \
                                        /* elles), le mode utilise peut etre different de celui qui a ete demande...                 */ \
                    BVARIABLES_D_HOMOTHETIE_C_HC_HHC                                                                                    \
                                        /* "Taille" reelle et imaginaire de la fenetre rapportee a la taille des images.             */
#define   BVARIABLES_F_EXPOSANT_LYAPUNOV                                                                                                \
                                        /* Definition des variables communes a toutes les fonctions calculant l'exposant de Lyapunov */ \
                                        /* d'un systeme dynamique...                                                                 */ \
                    BVARIABLES_F_EXPOSANT_LYAPUNOV_SANS_point_courant                                                                   \
                                        /* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la         */ \
                                        /* fonction iteree ; en effet, suivant les circonstances (cas ou les calculs sont purement   */ \
                                        /* elles), le mode utilise peut etre different de celui qui a ete demande, de meme que       */ \
                                        /* "taille" reelle et imaginaire de la fenetre rapportee a la taille des images.             */ \
                    DEFV(complexe,point_courant);                                                                                       \
                                        /* Point complexe courant 'C' dans la fenetre ; il n'est utile que pour les fonctions du     */ \
                                        /* type :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  IFmandelbrot_Lyapunov_dans_C(...),                                       */ \
                                        /*                  IFjulia_Lyapunov_dans_C(...),                                            */ \
                                        /*                  IFverhulst_Lyapunov_dans_C(...),                                         */ \
                                        /*                                                                                           */

#define   VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV                                                                        \
                    Bblock                                                                                                              \
                    Choi(mode_de_calcul_demande_pour_l_exposant_de_Lyapunov)                                                            \
                         Bblock                                                                                                         \
                         Ca3e(CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV_A_PARTIR_DE_LA_PARTIE_REELLE_DE_LA_DERIVEE                               \
                             ,CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV_A_PARTIR_DE_LA_PARTIE_IMAGINAIRE_DE_LA_DERIVEE                           \
                             ,CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV_A_PARTIR_DU_MODULE_DE_LA_DERIVEE                                         \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ECa3                                                                                                           \
                                                                                                                                        \
                         Defo                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("le mode de calcul de l'exposant de Lyapunov demande n'existe pas");                         \
                              EGAL(mode_de_calcul_utilise_pour_l_exposant_de_Lyapunov                                                   \
                                  ,CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV_A_PARTIR_DE_LA_PARTIE_REELLE_DE_LA_DERIVEE                          \
                                   );                                                                                                   \
                                        /* On force la facon de calculer l'exposant de Lyapunov lorsque le mode n'est pas reconnu.   */ \
                              Eblock                                                                                                    \
                         EDef                                                                                                           \
                         Eblock                                                                                                         \
                    ECho                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Validation du mode demande pour le calcul de l'exposant de Lyapunov.                      */
#define   MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV                                                                                      \
                    Bblock                                                                                                              \
                    VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;                                                             \
                                        /* Validation du mode demande pour le calcul de l'exposant de Lyapunov.                      */ \
                                                                                                                                        \
                    Test(IZEQ(Imaginaire(INDIRECT(valeur_initiale_P0_de_Pn))))                                                          \
                         Bblock                                                                                                         \
                         EGAL(mode_de_calcul_utilise_pour_l_exposant_de_Lyapunov                                                        \
                             ,CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV_A_PARTIR_DE_LA_PARTIE_REELLE_DE_LA_DERIVEE                               \
                              );                                                                                                        \
                                        /* Dans le cas ou le generateur est un nombre Reel, on force le mode de calcul de l'exposant */ \
                                        /* de Lyapunov...                                                                            */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel...       */

#define   COMMENT_CALCULER_LA_DERIVEE(methode)                                                                                          \
                    IFEQ(mode_de_calcul_utilise_pour_l_exposant_de_Lyapunov                                                             \
                        ,methode                                                                                                        \
                         )
#define   PASSAGE_DE_LA_DERIVEE_D_UNE_SUITE_A_L_EXPOSANT_DE_LYAPUNOV(derivee_courante)                                                  \
                    CON03(COMMENT_CALCULER_LA_DERIVEE(CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV_A_PARTIR_DE_LA_PARTIE_REELLE_DE_LA_DERIVEE)      \
                         ,ABSO(Reelle(derivee_courante))                                                                                \
                         ,COMMENT_CALCULER_LA_DERIVEE(CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV_A_PARTIR_DE_LA_PARTIE_IMAGINAIRE_DE_LA_DERIVEE)  \
                         ,ABSO(Imaginaire(derivee_courante))                                                                            \
                         ,COMMENT_CALCULER_LA_DERIVEE(CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV_A_PARTIR_DU_MODULE_DE_LA_DERIVEE)                \
                         ,Cmodule(derivee_courante)                                                                                     \
                         ,FLOT__UNDEF                                                                                                   \
                          )                                                                                                             \
                                        /* Definition de la methode de passage de la derivee de la fonction iteree (en general       */ \
                                        /* complexe) a l'exposant de Lyapunov (du moins a la partie a cumuler...).                   */

#define   TRES_PETIT_EXPOSANT_DE_LYAPUNOV                                                                                               \
                    F_MOINS_LE_PETIT_INFINI                                                                                             \
                                        /* Valeur de l'exposant de Lyapunov lorsque il est trop petit ('log(0)' par exemple...).     */ \
                                        /* Cette valeur est de loin preferable a 'F_MOINS_L_INFINI' qui si elle est ensuite traitee  */ \
                                        /* dans des expressions arithmetiques risque de provoquer des 'OVERFLOW's...                 */
#define   F_ITERATION_CALCUL_EXPOSANT_LYAPUNOV_DANS_C(numero_de_la_premiere_iteration,init_iteration,fonc_iteration)                    \
                    Bblock                                                                                                              \
                    DEFV(Int,INIT(numero_de_l_iteration,UNDEF));                                                                        \
                                        /* Indice 'n' de la suite 'X'...                                                             */ \
                    DEFV(complexe,element_courant_de_la_suite_Pn);                                                                      \
                                        /* Element courant Z  de la suite.                                                           */ \
                                        /*                  n                                                                        */ \
                    DEFV(Float,INIT(approximation_de_l_exposant_de_Lyapunov,FZERO));                                                    \
                                        /* Valeur courante de l'approximation de l'exposant de Lyapunov.                             */ \
                                                                                                                                        \
                    BLOC(init_iteration);                                                                                               \
                                        /* Initialisation de la suite definissant le systeme dynamique...                            */ \
                                                                                                                                        \
                    DoIn(numero_de_l_iteration                                                                                          \
                        ,numero_de_la_premiere_iteration                                                                                \
                        ,LSTX(numero_de_la_premiere_iteration,nombre_d_iterations)                                                      \
                        ,I                                                                                                              \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         DEFV(complexe,derivee_de_la_suite_Pn);                                                                         \
                         Cinitialisation(derivee_de_la_suite_Pn,FLOT__UNDEF,FLOT__UNDEF);                                               \
                                        /* Destinee a memoriser la derivee de l'element courant de la suite ; cette variable a ete   */ \
                                        /* introduite afin d'alleger les tests 'Test(...)' et 'ABSO(...)' qui vont suivre...         */ \
                         BLOC(fonc_iteration);                                                                                          \
                                        /* Calcul du systeme dynamique par iteration du calcul de la suite...                        */ \
                                                                                                                                        \
                                        /* ATTENTION : les tests de debordements qui suivent ne figuraient pas dans l'ancien code    */ \
                                        /* de la fonction 'IFespace_de_Lyapunov(...)', c'est-a-dire avant que ne soient introduites  */ \
                                        /* les fonctions :                                                                           */ \
                                        /*                                                                                           */ \
                                        /*                  IFmandelbrot_Lyapunov_dans_C(...),                                       */ \
                                        /*                  IFjulia_Lyapunov_dans_C(...),                                            */ \
                                        /*                  IFverhulst_Lyapunov_dans_C(...),                                         */ \
                                        /*                                                                                           */ \
                                                                                                                                        \
                         TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE(element_courant_de_la_suite_Pn,iterations_dans_C_HC_HHC_____epsilon);    \
                                        /* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter                      */ \
                                        /* des underflows flottants...                                                               */ \
                         TEST_D_OVERFLOW_D_UNE_SUITE_COMPLEXE(element_courant_de_la_suite_Pn,RACX(F_INFINI));                           \
                                        /* Lorsqu'une composante devient trop grande, on la plafonne afin d'eviter des underflows    */ \
                                        /* flottants. On notera l'utilisation de 'RACX(...)' pour prendre en compte l'elevation au   */ \
                                        /* carre lors de l'eventuelle iteration suivante...                                          */ \
                                                                                                                                        \
                         TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE(derivee_de_la_suite_Pn,pEPSILON);                                        \
                         TEST_D_OVERFLOW_D_UNE_SUITE_COMPLEXE(derivee_de_la_suite_Pn,RACX(F_INFINI));                                   \
                                        /* Et on fait de meme pour la derivee...                                                     */ \
                                                                                                                                        \
                                        /* ATTENTION : les tests de debordements qui precedent ne figuraient pas dans l'ancien code  */ \
                                        /* de la fonction 'IFespace_de_Lyapunov(...)', c'est-a-dire avant que ne soient introduites  */ \
                                        /* les fonctions :                                                                           */ \
                                        /*                                                                                           */ \
                                        /*                  IFmandelbrot_Lyapunov_dans_C(...),                                       */ \
                                        /*                  IFjulia_Lyapunov_dans_C(...),                                            */ \
                                        /*                  IFverhulst_Lyapunov_dans_C(...),                                         */ \
                                        /*                                                                                           */ \
                                                                                                                                        \
                         Test(IZNE(PASSAGE_DE_LA_DERIVEE_D_UNE_SUITE_A_L_EXPOSANT_DE_LYAPUNOV(derivee_de_la_suite_Pn)))                 \
                              Bblock                                                                                                    \
                              INCR(approximation_de_l_exposant_de_Lyapunov                                                              \
                                  ,LOGX(PASSAGE_DE_LA_DERIVEE_D_UNE_SUITE_A_L_EXPOSANT_DE_LYAPUNOV(derivee_de_la_suite_Pn))             \
                                   );                                                                                                   \
                                        /* Et calcul itere de l'approximation de l'exposant de Lyapunov ; on regarde pour cela la    */ \
                                        /* "vitesse" a laquelle les valeurs successives de la suite augmentent ou diminuent, d'ou    */ \
                                        /* la derivee de la suite...                                                                 */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              INCR(approximation_de_l_exposant_de_Lyapunov                                                              \
                                  ,TRES_PETIT_EXPOSANT_DE_LYAPUNOV                                                                      \
                                   );                                                                                                   \
                                        /* Et ce afin d'eviter de calculer 'LOGX(0)'.                                                */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, la valeur 'TRES_PETIT_EXPOSANT_DE_LYAPUNOV' est telle qu'elle peut etre        */ \
                                        /* cumulee comme toute autre valeur sans risque d'OVERFLOWs ulterieurs...                    */ \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    EDoI                                                                                                                \
                                                                                                                                        \
                    EGAL(approximation_de_l_exposant_de_Lyapunov                                                                        \
                        ,fDIVZ(DIVI(approximation_de_l_exposant_de_Lyapunov                                                             \
                                   ,LOGX(FDEUX)                                                                                         \
                                    )                                                                                                   \
                              ,FLOT(nombre_d_iterations)                                                                                \
                               )                                                                                                        \
                         );                                                                                                             \
                                        /* Et calcul de l'approximation de l'exposant de Lyapunov. On notera que l'on divise d'une   */ \
                                        /* part par log(2), et d'autre part par le nombre d'iterations. C'est uniquement pour faire  */ \
                                        /* "joli", puisqu'en general il y a apres un appel a 'Ifloat_std_avec_renormalisation(...)'. */ \
                                        /*                                                                                           */ \
                                        /* Le 20071201105941 'DIVZ(...)' fut remplace tardivement par 'fDIVZ(...)'...                */ \
                                                                                                                                        \
                    Test(IFET(IL_NE_FAUT_PAS(visualiser_les_exposants_negatifs)                                                         \
                             ,IZLT(approximation_de_l_exposant_de_Lyapunov)                                                             \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         EGAL(approximation_de_l_exposant_de_Lyapunov,FZERO);                                                           \
                                        /* Lorsqu'il faut ignorer les exposants negatifs (correspondant, rappelons-le aux parties    */ \
                                        /* stables), on ramene l'approximation a zero...                                             */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    Test(IFET(IL_NE_FAUT_PAS(visualiser_les_exposants_positifs)                                                         \
                             ,IZGT(approximation_de_l_exposant_de_Lyapunov)                                                             \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         EGAL(approximation_de_l_exposant_de_Lyapunov,FZERO);                                                           \
                                        /* Lorsqu'il faut ignorer les exposants positifs (correspondant, rappelons-le aux parties    */ \
                                        /* chaotiques), on ramene l'approximation a zero...                                          */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    storeF_point(MUL2(facteur_multiplicatif,approximation_de_l_exposant_de_Lyapunov)                                    \
                                ,imageR                                                                                                 \
                                ,X,Y                                                                                                    \
                                 );                                                                                                     \
                                        /* Generation de l'image "flottante"...                                                      */ \
                    Eblock                                                                                                              \
                                        /* Calcul general de l'exposant de Lyapunov d'un systeme dynamique defini par une suite...   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   " F L O T T A N T "   D E   L ' E X P O S A N T   D E   L Y A P U N O V                                      */
/*        P O U R   L ' E N S E M B L E   D E   M A N D E L B R O T                                                                  */
/*        D A N S   U N E    F E N E T R E                                                                                           */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Voir la fonction 'Imandelbrot_dans_C(...)'.                                                                    */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,POINTERF(IFmandelbrot_Lyapunov_dans_C(imageR
                                                                ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                                ,ARGUMENT_POINTERs(coin_haut_droite)
                                                                ,nombre_d_iterations
                                                                ,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
                                                                ,visualiser_les_exposants_negatifs
                                                                ,visualiser_les_exposants_positifs
                                                                ,facteur_multiplicatif
                                                                 )
                                    )
                 )
     )
DEFV(Argument,DEFV(imageF,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
                                        /* Nombre d'iterations demande.                                                              */
DEFV(Argument,DEFV(Int,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
                                        /* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la         */
                                        /* fonction iteree (voir 'choix_du_mode_de_calcul_de_l_exposant_de_Lyapunov' dans le         */
                                        /* fichier 'v $ximcf/iterations$DEF').                                                       */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_negatifs));
                                        /* Cet indicateur logique controle la visualisation des zones des parties stables. Il        */
                                        /* permet de visualiser les exposants negatifs ('VRAI'), ou de les ignorer ('FAUX') auquel   */
                                        /* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux       */
                                        /* parties stables.                                                                          */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_positifs));
                                        /* Cet indicateur logique controle la visualisation des zones des parties chaotiques. Il     */
                                        /* permet de visualiser les exposants positifs ('VRAI'), ou de les ignorer ('FAUX') auquel   */
                                        /* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux       */
                                        /* parties chaotiques.                                                                       */
DEFV(Argument,DEFV(Float,facteur_multiplicatif));
                                        /* Ce facteur multiplicatif est la uniquement pour permettre de faire en quelque sorte une   */
                                        /* inversion video du champ genere (pour la valeur -1.0).                                    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_EXPOSANT_LYAPUNOV
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;
                                        /* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel...       */

     CALS(IFinitialisation(imageR,FZERO));
                                        /* Initialisation, on ne sait jamais...                                                      */

     begin_image
          Bblock
          F_ITERATION_CALCUL_EXPOSANT_LYAPUNOV_DANS_C(PREMIERE_ITERATION_DANS_L_ESPACE_DE_LYAPUNOV
                                                     ,BLOC(Bblock
                                                           INITIALISATION_DU_POINT_COURANT_DANS_C;
                                        /* Initialisation du "point Courant" 'C'.                                                    */

                                                           Cegal(element_courant_de_la_suite_Pn,C_____nombre_complexe__0__0);
                                        /* Initialisation de la suite des nombres complexes sur l'origine, soit :                    */
                                        /*                                                                                           */
                                        /*                  Z  = 0                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                        /* on notera que l'on pourrait optimiser, en partant directement sur 'C', mais alors, la     */
                                        /* difference entre Julia et Mandelbrot ne serait plus evidente...                           */
                                                           Eblock
                                                           )
                                                     ,BLOC(Bblock
                                                           DEFV(complexe,point_manoeuvre);
                                        /* Point complexe de maneuvre lors de l'iteration.                                           */

                                                           aCproduit(point_manoeuvre
                                                                    ,element_courant_de_la_suite_Pn
                                                                    ,element_courant_de_la_suite_Pn
                                                                     );
                                                           aCsomme(element_courant_de_la_suite_Pn,point_manoeuvre ,point_courant);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                          2                                                                */
                                        /*                  Z    = Z  + C                                                            */
                                        /*                   n+1    n                                                                */
                                        /*                                                                                           */
                                        /* ou 'C' designe le point complexe Courant.                                                 */

                                                           aCforme_lineaire(derivee_de_la_suite_Pn
                                                                           ,FDEUX
                                                                           ,element_courant_de_la_suite_Pn
                                                                           ,FZERO
                                                                            );
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  d(Z   ) = 2.Z                                                            */
                                        /*                     n+1       n                                                           */
                                        /*                                                                                           */
                                                           Eblock
                                                           )
                                                      );
          Eblock
     end_image

     RETIF(imageR);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   " S T A N D A R D "   D E   L ' E X P O S A N T   D E   L Y A P U N O V                                      */
/*        P O U R   L ' E N S E M B L E   D E   M A N D E L B R O T                                                                  */
/*        D A N S   U N E    F E N E T R E                                                                                           */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Voir la fonction 'Imandelbrot_dans_C(...)'.                                                                    */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,POINTERp(Imandelbrot_Lyapunov_dans_C(imageR
                                                               ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                               ,ARGUMENT_POINTERs(coin_haut_droite)
                                                               ,nombre_d_iterations
                                                               ,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
                                                               ,visualiser_les_exposants_negatifs
                                                               ,visualiser_les_exposants_positifs
                                                               ,facteur_multiplicatif
                                                                )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
                                        /* Nombre d'iterations demande.                                                              */
DEFV(Argument,DEFV(Int,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
                                        /* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la         */
                                        /* fonction iteree (voir 'choix_du_mode_de_calcul_de_l_exposant_de_Lyapunov' dans le         */
                                        /* fichier 'v $ximcf/iterations$DEF').                                                       */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_negatifs));
                                        /* Cet indicateur logique controle la visualisation des zones des parties stables. Il        */
                                        /* permet de visualiser les exposants negatifs ('VRAI'), ou de les ignorer ('FAUX') auquel   */
                                        /* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux       */
                                        /* parties stables.                                                                          */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_positifs));
                                        /* Cet indicateur logique controle la visualisation des zones des parties chaotiques. Il     */
                                        /* permet de visualiser les exposants positifs ('VRAI'), ou de les ignorer ('FAUX') auquel   */
                                        /* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux       */
                                        /* parties chaotiques.                                                                       */
DEFV(Argument,DEFV(Float,facteur_multiplicatif));
                                        /* Ce facteur multiplicatif est la uniquement pour permettre de faire en quelque sorte une   */
                                        /* inversion video du champ genere (pour la valeur -1.0).                                    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_EXPOSANT_LYAPUNOV_SANS_point_courant
     BDEFV(imageF,ensemble_de_Mandelbrot);
                                        /* Exposant de Lyapunov d'un morceau de l'ensemble de Mandelbrot "flottant"...               */
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;
                                        /* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel...       */

     CALS(IFmandelbrot_Lyapunov_dans_C(ensemble_de_Mandelbrot
                                      ,coin_bas_gauche
                                      ,coin_haut_droite
                                      ,nombre_d_iterations
                                      ,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
                                      ,visualiser_les_exposants_negatifs
                                      ,visualiser_les_exposants_positifs
                                      ,facteur_multiplicatif
                                       )
          );
                                        /* Calcul de l'exposant de Lyapunov d'un morceau de l'ensemble de Mandelbrot en "flottant",  */
                                        /* et donc sans renormalisation...                                                           */

     CALS(Ifloat_std_avec_renormalisation(imageR,ensemble_de_Mandelbrot));
                                        /* Et enfin, conversion du champ flottant en une image avec renormalisation.                 */

     EDEFV(imageF,ensemble_de_Mandelbrot);
                                        /* Exposant de Lyapunov d'un morceau de l'ensemble de Mandelbrot "flottant"...               */

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   " F L O T T A N T "   D E   L ' E X P O S A N T   D E   L Y A P U N O V                                      */
/*        P O U R   L ' E N S E M B L E   D E   J U L I A                                                                            */
/*        D A N S   U N E    F E N E T R E                                                                                           */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Voir la fonction 'Ijulia_dans_C(...)'.                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,POINTERF(IFjulia_Lyapunov_dans_C(imageR
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)
                                                           ,ARGUMENT_POINTERs(nombre_argument)
                                                           ,nombre_d_iterations
                                                           ,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
                                                           ,visualiser_les_exposants_negatifs
                                                           ,visualiser_les_exposants_positifs
                                                           ,facteur_multiplicatif
                                                            )
                                    )
                 )
     )
DEFV(Argument,DEFV(imageF,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(complexe,POINTERs(nombre_argument)));
                                        /* Nombre complexe "generateur" de l'ensemble de Julia que l'on veut calculer.               */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
                                        /* Nombre d'iterations demande.                                                              */
DEFV(Argument,DEFV(Int,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
                                        /* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la         */
                                        /* fonction iteree (voir 'choix_du_mode_de_calcul_de_l_exposant_de_Lyapunov' dans le         */
                                        /* fichier 'v $ximcf/iterations$DEF').                                                       */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_negatifs));
                                        /* Cet indicateur logique controle la visualisation des zones des parties stables. Il        */
                                        /* permet de visualiser les exposants negatifs ('VRAI'), ou de les ignorer ('FAUX') auquel   */
                                        /* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux       */
                                        /* parties stables.                                                                          */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_positifs));
                                        /* Cet indicateur logique controle la visualisation des zones des parties chaotiques. Il     */
                                        /* permet de visualiser les exposants positifs ('VRAI'), ou de les ignorer ('FAUX') auquel   */
                                        /* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux       */
                                        /* parties chaotiques.                                                                       */
DEFV(Argument,DEFV(Float,facteur_multiplicatif));
                                        /* Ce facteur multiplicatif est la uniquement pour permettre de faire en quelque sorte une   */
                                        /* inversion video du champ genere (pour la valeur -1.0).                                    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_EXPOSANT_LYAPUNOV
     DEFV(complexe,point_argument);
                                        /* Point complexe argument.                                                                  */
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;
                                        /* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel...       */

     CALS(IFinitialisation(imageR,FZERO));
                                        /* Initialisation, on ne sait jamais...                                                      */

     Cegal(point_argument,INDIRECT(nombre_argument));
                                        /* Recuperation du nombre complexe "generateur"...                                           */
     begin_image
          Bblock
          F_ITERATION_CALCUL_EXPOSANT_LYAPUNOV_DANS_C(PREMIERE_ITERATION_DANS_L_ESPACE_DE_LYAPUNOV
                                                     ,BLOC(Bblock
                                                           INITIALISATION_DU_POINT_COURANT_DANS_C;
                                        /* Initialisation du "point Courant" 'C'.                                                    */

                                                           Cegal(element_courant_de_la_suite_Pn,point_courant);
                                        /* Initialisation de la suite des nombres complexes sur le "point Courant" 'C', soit :       */
                                        /*                                                                                           */
                                        /*                  Z  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                                           Eblock
                                                           )
                                                     ,BLOC(Bblock
                                                           DEFV(complexe,point_manoeuvre);
                                        /* Point complexe de maneuvre lors de l'iteration.                                           */

                                                           aCproduit(point_manoeuvre
                                                                    ,element_courant_de_la_suite_Pn
                                                                    ,element_courant_de_la_suite_Pn
                                                                     );
                                                           aCsomme(element_courant_de_la_suite_Pn,point_manoeuvre,point_argument);
                                        /* Calcul de :                                                                               */
                                        /*                          2                                                                */
                                        /*                  Z    = Z  + A                                                            */
                                        /*                   n+1    n                                                                */
                                        /*                                                                                           */
                                        /* ou 'A' designe le point complexe Argument.                                                */

                                                           aCforme_lineaire(derivee_de_la_suite_Pn
                                                                           ,FDEUX
                                                                           ,element_courant_de_la_suite_Pn
                                                                           ,FZERO
                                                                            );
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  d(Z   ) = 2.Z                                                            */
                                        /*                     n+1       n                                                           */
                                        /*                                                                                           */
                                                           Eblock
                                                           )
                                                      );
          Eblock
     end_image

     RETIF(imageR);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   " S T A N D A R D "   D E   L ' E X P O S A N T   D E   L Y A P U N O V                                      */
/*        P O U R   L ' E N S E M B L E   D E   J U L I A                                                                            */
/*        D A N S   U N E    F E N E T R E                                                                                           */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Voir la fonction 'Ijulia_dans_C(...)'.                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,POINTERp(Ijulia_Lyapunov_dans_C(imageR
                                                          ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                          ,ARGUMENT_POINTERs(coin_haut_droite)
                                                          ,ARGUMENT_POINTERs(nombre_argument)
                                                          ,nombre_d_iterations
                                                          ,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
                                                          ,visualiser_les_exposants_negatifs
                                                          ,visualiser_les_exposants_positifs
                                                          ,facteur_multiplicatif
                                                           )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(complexe,POINTERs(nombre_argument)));
                                        /* Nombre complexe "generateur" de l'ensemble de Julia que l'on veut calculer.               */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
                                        /* Nombre d'iterations demande.                                                              */
DEFV(Argument,DEFV(Int,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
                                        /* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la         */
                                        /* fonction iteree (voir 'choix_du_mode_de_calcul_de_l_exposant_de_Lyapunov' dans le         */
                                        /* fichier 'v $ximcf/iterations$DEF').                                                       */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_negatifs));
                                        /* Cet indicateur logique controle la visualisation des zones des parties stables. Il        */
                                        /* permet de visualiser les exposants negatifs ('VRAI'), ou de les ignorer ('FAUX') auquel   */
                                        /* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux       */
                                        /* parties stables.                                                                          */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_positifs));
                                        /* Cet indicateur logique controle la visualisation des zones des parties chaotiques. Il     */
                                        /* permet de visualiser les exposants positifs ('VRAI'), ou de les ignorer ('FAUX') auquel   */
                                        /* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux       */
                                        /* parties chaotiques.                                                                       */
DEFV(Argument,DEFV(Float,facteur_multiplicatif));
                                        /* Ce facteur multiplicatif est la uniquement pour permettre de faire en quelque sorte une   */
                                        /* inversion video du champ genere (pour la valeur -1.0).                                    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_EXPOSANT_LYAPUNOV_SANS_point_courant
     BDEFV(imageF,ensemble_de_Julia);
                                        /* Exposant de Lyapunov d'un morceau de l'ensemble de Julia "flottant"...                    */
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;
                                        /* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel...       */

     CALS(IFjulia_Lyapunov_dans_C(ensemble_de_Julia
                                 ,coin_bas_gauche
                                 ,coin_haut_droite
                                 ,nombre_argument
                                 ,nombre_d_iterations
                                 ,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
                                 ,visualiser_les_exposants_negatifs
                                 ,visualiser_les_exposants_positifs
                                 ,facteur_multiplicatif
                                  )
          );
                                        /* Calcul de l'exposant de Lyapunov d'un morceau de l'ensemble de Julia en "flottant",       */
                                        /* et donc sans renormalisation...                                                           */

     CALS(Ifloat_std_avec_renormalisation(imageR,ensemble_de_Julia));
                                        /* Et enfin, conversion du champ flottant en une image avec renormalisation.                 */

     EDEFV(imageF,ensemble_de_Julia);
                                        /* Exposant de Lyapunov d'un morceau de l'ensemble de Julia "flottant"...                    */

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   " F L O T T A N T "   D E   L ' E X P O S A N T   D E   L Y A P U N O V                                      */
/*        P O U R   L ' E N S E M B L E   D E   V E R H U L S T                                                                      */
/*        D A N S   U N E    F E N E T R E                                                                                           */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Voir la fonction 'Iverhulst_dans_C(...)'.                                                                      */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,POINTERF(IFverhulst_Lyapunov_dans_C(imageR
                                                              ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                              ,ARGUMENT_POINTERs(coin_haut_droite)
                                                              ,ARGUMENT_POINTERs(taux_de_croissance)
                                                              ,nombre_d_iterations
                                                              ,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
                                                              ,visualiser_les_exposants_negatifs
                                                              ,visualiser_les_exposants_positifs
                                                              ,facteur_multiplicatif
                                                               )
                                    )
                 )
     )
DEFV(Argument,DEFV(imageF,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(complexe,POINTERs(taux_de_croissance)));
                                        /* Taux de croissance complexe 'R' de l'ensemble de Verhulst que l'on veut calculer.         */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
                                        /* Nombre d'iterations demande.                                                              */
DEFV(Argument,DEFV(Int,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
                                        /* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la         */
                                        /* fonction iteree (voir 'choix_du_mode_de_calcul_de_l_exposant_de_Lyapunov' dans le         */
                                        /* fichier 'v $ximcf/iterations$DEF').                                                       */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_negatifs));
                                        /* Cet indicateur logique controle la visualisation des zones des parties stables. Il        */
                                        /* permet de visualiser les exposants negatifs ('VRAI'), ou de les ignorer ('FAUX') auquel   */
                                        /* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux       */
                                        /* parties stables.                                                                          */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_positifs));
                                        /* Cet indicateur logique controle la visualisation des zones des parties chaotiques. Il     */
                                        /* permet de visualiser les exposants positifs ('VRAI'), ou de les ignorer ('FAUX') auquel   */
                                        /* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux       */
                                        /* parties chaotiques.                                                                       */
DEFV(Argument,DEFV(Float,facteur_multiplicatif));
                                        /* Ce facteur multiplicatif est la uniquement pour permettre de faire en quelque sorte une   */
                                        /* inversion video du champ genere (pour la valeur -1.0).                                    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_EXPOSANT_LYAPUNOV
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;
                                        /* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel...       */

     CALS(IFinitialisation(imageR,FZERO));
                                        /* Initialisation, on ne sait jamais...                                                      */

     begin_image
          Bblock
          F_ITERATION_CALCUL_EXPOSANT_LYAPUNOV_DANS_C(PREMIERE_ITERATION_DANS_L_ESPACE_DE_LYAPUNOV
                                                     ,BLOC(Bblock
                                                           INITIALISATION_DU_POINT_COURANT_DANS_C;
                                        /* Initialisation du "point Courant" 'C'.                                                    */

                                                           Cegal(element_courant_de_la_suite_Pn,point_courant);
                                        /* Initialisation de la suite des nombres complexes sur le "point Courant" 'C', soit :       */
                                        /*                                                                                           */
                                        /*                  Z  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                                           Eblock
                                                           )
                                                     ,BLOC(Bblock
                                                           DEFV(complexe,point_manoeuvre_1);
                                                           DEFV(complexe,point_manoeuvre_2);
                                        /* Points complexes de maneuvre lors de l'iteration.                                         */

                                                           aCforme_lineaire(point_manoeuvre_1
                                                                           ,NEGA(FU)
                                                                           ,element_courant_de_la_suite_Pn
                                                                           ,FU
                                                                            );
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  1 - Z  = -Z  + 1                                                         */
                                        /*                       n     n                                                             */
                                        /*                                                                                           */

                                                           aCproduit(point_manoeuvre_2
                                                                    ,element_courant_de_la_suite_Pn
                                                                    ,point_manoeuvre_1
                                                                     );
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  Z .(1 - Z )                                                              */
                                        /*                   n       n                                                               */
                                        /*                                                                                           */

                                                           aCproduit(element_courant_de_la_suite_Pn
                                                                    ,INDIRECT(taux_de_croissance)
                                                                    ,point_manoeuvre_2
                                                                     );
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  Z    = R.Z .(1 - Z )                                                     */
                                        /*                   n+1      n       n                                                      */
                                        /*                                                                                           */

                                                           aCproduit(point_manoeuvre_1
                                                                    ,INDIRECT(taux_de_croissance)
                                                                    ,element_courant_de_la_suite_Pn
                                                                     );
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  R.Z                                                                      */
                                        /*                     n                                                                     */
                                        /*                                                                                           */

                                                           aCforme_lineaire(point_manoeuvre_2,NEGA(FDEUX),point_manoeuvre_1,FZERO);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  -2.R.Z                                                                   */
                                        /*                        n                                                                  */
                                        /*                                                                                           */

                                                           aCsomme(derivee_de_la_suite_Pn
                                                                  ,point_manoeuvre_2
                                                                  ,INDIRECT(taux_de_croissance)
                                                                   );
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  d(Z   ) = R - 2.R.Z                                                      */
                                        /*                     n+1             n                                                     */
                                        /*                                                                                           */
                                        /*                  d(Z   ) = -2.R.Z  + R                                                    */
                                        /*                     n+1          n                                                        */
                                        /*                                                                                           */
                                                           Eblock
                                                           )
                                                      );
          Eblock
     end_image

     RETIF(imageR);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   " S T A N D A R D "   D E   L ' E X P O S A N T   D E   L Y A P U N O V                                      */
/*        P O U R   L ' E N S E M B L E   D E   V E R H U L S T                                                                      */
/*        D A N S   U N E    F E N E T R E                                                                                           */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Voir la fonction 'Iverhulst_dans_C(...)'.                                                                      */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,POINTERp(Iverhulst_Lyapunov_dans_C(imageR
                                                             ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                             ,ARGUMENT_POINTERs(coin_haut_droite)
                                                             ,ARGUMENT_POINTERs(taux_de_croissance)
                                                             ,nombre_d_iterations
                                                             ,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
                                                             ,visualiser_les_exposants_negatifs
                                                             ,visualiser_les_exposants_positifs
                                                             ,facteur_multiplicatif
                                                              )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(complexe,POINTERs(taux_de_croissance)));
                                        /* Taux de croissance complexe 'R' de l'ensemble de Verhulst que l'on veut calculer.         */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
                                        /* Nombre d'iterations demande.                                                              */
DEFV(Argument,DEFV(Int,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
                                        /* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la         */
                                        /* fonction iteree (voir 'choix_du_mode_de_calcul_de_l_exposant_de_Lyapunov' dans le         */
                                        /* fichier 'v $ximcf/iterations$DEF').                                                       */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_negatifs));
                                        /* Cet indicateur logique controle la visualisation des zones des parties stables. Il        */
                                        /* permet de visualiser les exposants negatifs ('VRAI'), ou de les ignorer ('FAUX') auquel   */
                                        /* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux       */
                                        /* parties stables.                                                                          */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_positifs));
                                        /* Cet indicateur logique controle la visualisation des zones des parties chaotiques. Il     */
                                        /* permet de visualiser les exposants positifs ('VRAI'), ou de les ignorer ('FAUX') auquel   */
                                        /* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux       */
                                        /* parties chaotiques.                                                                       */
DEFV(Argument,DEFV(Float,facteur_multiplicatif));
                                        /* Ce facteur multiplicatif est la uniquement pour permettre de faire en quelque sorte une   */
                                        /* inversion video du champ genere (pour la valeur -1.0).                                    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_EXPOSANT_LYAPUNOV_SANS_point_courant
     BDEFV(imageF,ensemble_de_Verhulst);
                                        /* Exposant de Lyapunov d'un morceau de l'ensemble de Verhulst "flottant"...                 */
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;
                                        /* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel...       */

     CALS(IFverhulst_Lyapunov_dans_C(ensemble_de_Verhulst
                                    ,coin_bas_gauche
                                    ,coin_haut_droite
                                    ,taux_de_croissance
                                    ,nombre_d_iterations
                                    ,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
                                    ,visualiser_les_exposants_negatifs
                                    ,visualiser_les_exposants_positifs
                                    ,facteur_multiplicatif
                                     )
          );
                                        /* Calcul de l'exposant de Lyapunov d'un morceau de l'ensemble de Verhulst en "flottant",    */
                                        /* et donc sans renormalisation...                                                           */

     CALS(Ifloat_std_avec_renormalisation(imageR,ensemble_de_Verhulst));
                                        /* Et enfin, conversion du champ flottant en une image avec renormalisation.                 */

     EDEFV(imageF,ensemble_de_Verhulst);
                                        /* Exposant de Lyapunov d'un morceau de l'ensemble de Verhulst "flottant"...                 */

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*        :Debut_listMN_ESPACE_LYAPUNOV_COMPLEXE_11:                                                                                 */
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E S P A C E   D E   V E R H U L S T - L Y A P U N O V  :                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Rappelons le principe de la Dynamique de                                                                       */
/*                  Verhulst (voir les fichiers 'v $xrk/verhulst.??$K').                                                             */
/*                  Une version "simplifiee" est donnee par l'iteration                                                              */
/*                  suivante :                                                                                                       */
/*                                                                                                                                   */
/*                                      X    = R.X .(1 - X )                                                                         */
/*                                       n+1      n       n                                                                          */
/*                                                                                                                                   */
/*                    Le comportement de cette suite depend fortement de                                                             */
/*                  la valeur de 'R', et pour R > 3.56994571869, son                                                                 */
/*                  comportement devient chaotique, ainsi que le montre                                                              */
/*                  le graphe suivant :                                                                                              */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  R ^                                                                                                              */
/*                    |                                                             .                                                */
/*                    |***   * ***  *                        *         *      *     .                                                */
/*                    |       * *      * ***   * *    *   * **   *           *  **  .                                                */
/*                    |                                         *                   .                                                */
/*                    |        *** **  **      * *               * *    **         *.                                                */
/*                    |                                       * *                   .                                                */
/*                    |             * ***   **            *  *          *    *   * *.                                                */
/*                    |               *     *  *        **       *     * *    * *   .                                                */
/*                    |                   *          **                *    *** *   .                                                */
/*                    |                           * *     *                    ** * .                                                */
/*                    |                       *        *    *  *          *   *  *  .                                                */
/*                    |                        *     *  *  *         * ** * *   **  .                                                */
/*                    |                           ** **  **       *    *     *      .                                                */
/*                    |                           **   ****  *  *        *          .                                                */
/*                    |                             * *          *     *            .                                                */
/*                    |                               *            * *              .                                                */
/*                    |                                 *           *               .                                                */
/*                    |                                   *        *                .                                                */
/*                    |                                      *    *                 .                                                */
/*                    |                                         *                   .                                                */
/*                    |                                         *                   .                                                */
/*                    |                                          *                  .                                                */
/*                    |                                           *                 .                                                */
/*                    |                                            *                .                                                */
/*                    |                                             *               .                                                */
/*                    |                                              *              .                                                */
/*                    |                                               *             .                                                */
/*                    |                                                *            .                                                */
/*                    |                                                 *           .                                                */
/*                    |                                                   *         .                                                */
/*                    |                                                             .                                                */
/*                    |------------------------------------------------------------------------->                                    */
/*                    0                                                             1          X                                     */
/*                                                                                              n                                    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    La dynamique de Markus, utilise la meme suite,                                                                 */
/*                  mais le taux de croissance 'R' change a chaque                                                                   */
/*                  iteration suivant une certaine loi en prenant                                                                    */
/*                  deux valeurs possibles 'R1' et 'R2'. J'ai etendu                                                                 */
/*                  cela a 3 valeurs 'R1', 'R2' et 'R3'. Ainsi, la loi                                                               */
/*                  de variation pourra etre :                                                                                       */
/*                                                                                                                                   */
/*                                      R1 --> R2 --> R3 --> R1 --> R2 --> R3 --> ...                                                */
/*                                                                                                                                   */
/*                    Le triplet (R1,R2,R3) est considere comme etant                                                                */
/*                  les coordonnees {X,Y,Z} d'un point d'un espace                                                                   */
/*                  tridimensionnel, dont le coloriage est fonction                                                                  */
/*                  du caractere chaotique de la suite 'X' associe.                                                                  */
/*                  Le critere de chaos est donne par l'exposant de                                                                  */
/*                  Lyapunov ; lorsque celui-ci est negatif, la suite                                                                */
/*                  'X' est stable, alors que lorsqu'il est positif,                                                                 */
/*                  cette derniere est chaotique. Ainsi, seront obtenues                                                             */
/*                  des coupes du type :                                                                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  #########################*o*####################################                                                 */
/*                  #########################*o*####################################                                                 */
/*                  #########################o**####################################                                                 */
/*                  ########################*-*#######*#############################                                                 */
/*                  ########################*o*#######*#############################                                                 */
/*                  #######################*o**#####################################                                                 */
/*                  #######################*o*######################################                                                 */
/*                  ######################*o**######################################                                                 */
/*                  ######################*-**#######*##############################                                                 */
/*                  #####################**o*########o###########################*##                                                 */
/*                  #####################*+**########*##############################                                                 */
/*                  ####################**o*########################################                                                 */
/*                  ####################*o**########################################                                                 */
/*                  ###################**o**########################################                                                 */
/*                  ###################*o**#########*####################*****######                                                 */
/*                  ##################**o**#########*###############################                                                 */
/*                  #######***o***####*o**##########################################                                                 */
/*                  #################**o**##########################################                                                 */
/*                  ################**o**###############################********o+*o                                                 */
/*                  ################*oo**##########*###############**oo+o*****######                                                 */
/*                  ###############**+***##########o###############**###############                                                 */
/*                  ###############*oo**###########*################################                                                 */
/*                  ##############**:***############################################                                                 */
/*                  ########*####**oo**#############################################                                                 */
/*                  *********###**o+***#############################################                                                 */
/*                  ***ooo+o####**+o**############*#################################                                                 */
/*                  +oo****####**oo***############o#################################                                                 */
/*                  ****######**o+***#############*#################################                                                 */
/*                  #########***+o**##############*#################################                                                 */
/*                  ########***oo***################################################                                                 */
/*                  #######***oo***##############*##################################                                                 */
/*                  ######***o-o***##############*##################################                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  ou en "negatif" :                                                                                                */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                     .                                              .                                                              */
/*                                                                                                                                   */
/*                    .                                                                                                              */
/*                    .                            .                   .                                                             */
/*                                                                   .                                                               */
/*                   .                                               :                                                               */
/*                                          .                        :                                                               */
/*                  .                                                .                                                               */
/*                  .                                                .                                                               */
/*                  .                                                                                                                */
/*                                                 .                                                                                 */
/*                                        .      .                  .                                                                */
/*                                                          .       .                                                                */
/*                                            .                     - .                                                              */
/*                                              .                   .                                                                */
/*                                         .   .                    .                                                                */
/*                                        .   :                                                                                      */
/*                  .                   ..   .                     .                                                                 */
/*                  ..                ...  ..                      .                                                                 */
/*                  ...              .......                       +                                                                 */
/*                  .....         ...:....                         .                                                                 */
/*                    ..:...........::-..                          .                                                                 */
/*                     ....:::.:::-:+:..                           .                                                                 */
/*                        .........::..                           .                                                                  */
/*                           ......:...                           :            .                                                     */
/*                             ........                           :                                                                  */
/*                               ...+..                           .                                                                  */
/*                                ...:..                          .                                                                  */
/*                                 ...:..                        .                -                                                  */
/*                                   .....                       :  .          .                                                     */
/*                                     ......                    :         ..                                                        */
/*                                         ..:..                 .     ..                                                            */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
/*        :Fin_listMN_ESPACE_LYAPUNOV_COMPLEXE_11:                                                                                   */

#define   FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_01(x,precision)                                                       \
                    NEUT(x)                                                                                                             \
                                        /* Choix d'une precision egale a celle de la machine telle qu'elle est programmee.           */
#nodefine FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_02(x,precision)                                                       \
                    DIVI(ARRO(MUL2(x,FLOT(precision)))                                                                                  \
                        ,FLOT(precision)                                                                                                \
                         )                                                                                                              \
                                        /* Choix d'une precision variable definie par 'precision' qui sera en general une puissance  */ \
                                        /* de 10...                                                                                  */ \
                                        /*                                                                                           */ \
                                        /* Le 20030222103003, 'FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_02(...)'      */ \
                                        /* est passe de 'define' a 'nodefine' afin de ne pas etre recupere par le processus          */ \
                                        /* 'v $xcc/cpp$Z _VERSION_'.                                                                 */

#ifdef    FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_01            /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */
DEFV(Common,DEFV(Logical,_____FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_01));
#Aifdef   FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_01            /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */
#Eifdef   FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_01            /* Common,DEFV(Fonction,) : avec 'VERSION_01'.       */

#ifdef    FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_02            /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */
DEFV(Common,DEFV(Logical,_____FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_02));
#Aifdef   FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_02            /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */
#Eifdef   FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_02            /* Common,DEFV(Fonction,) : avec 'VERSION_02'.       */

DEFV(Common,DEFV(Int,ZINT(espace_de_Lyapunov_____precision,CENT_MILLE)));
                                        /* Definition de la precision des calculs en 'VERSION_02'...                                 */
#define   FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV(x)                                                                            \
                    FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_01(x,espace_de_Lyapunov_____precision)                      \
                                        /* Choix d'une precision courante a adopter pour les calculs. Cette fonction devra etre      */ \
                                        /* appliquee a toute valeur flottante : les variables, mais aussi malheureusement toutes     */ \
                                        /* les expressions intermediaires. Pour simplifier, on pourra ecrire peut-etre :             */ \
                                        /*                                                                                           */ \
                                        /*        #define   DYNAMIQUE_DE_VERHULST_REELLE(...)                                     \  */ \
                                        /*                            FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV(MUL2(...    \  */ \
                                        /*                                                                                 ...    \  */ \
                                        /*                                                                                 )      \  */ \
                                        /*                                                                            )           \  */ \
                                        /*                                                                                           */ \
                                        /*        #define   DERIVEE_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE(...)                       \  */ \
                                        /*                            FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV(MUL2(...    \  */ \
                                        /*                                                                                 ...    \  */ \
                                        /*                                                                                 )      \  */ \
                                        /*                                                                            )           \  */ \
                                        /*                                                                                           */ \
                                        /* la fonction de precision portant globalement sur la formule, et non pas sur tous les      */ \
                                        /* resultats intermediaires...                                                               */

#define   QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV(taux_de_croissance)                                                         \
                    IFEQ(ITb0(suite_des_taux_de_croissance                                                                              \
                             ,INDX(numero_de_l_iteration,PREMIERE_ITERATION_DANS_L_ESPACE_DE_LYAPUNOV)                                  \
                              )                                                                                                         \
                        ,taux_de_croissance                                                                                             \
                         )
#define   TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV                                                                                  \
                    CON07(QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV(TAUX_DE_CROISSANCE_R1_DANS_L_ESPACE_DE_LYAPUNOV)            \
                         ,IFespace_de_Lyapunov_____R1                                                                                   \
                         ,QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV(TAUX_DE_CROISSANCE_R2_DANS_L_ESPACE_DE_LYAPUNOV)            \
                         ,IFespace_de_Lyapunov_____R2                                                                                   \
                         ,QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV(TAUX_DE_CROISSANCE_R3_DANS_L_ESPACE_DE_LYAPUNOV)            \
                         ,IFespace_de_Lyapunov_____R3                                                                                   \
                         ,QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV(TAUX_DE_CROISSANCE_R4_DANS_L_ESPACE_DE_LYAPUNOV)            \
                         ,IFespace_de_Lyapunov_____R4                                                                                   \
                         ,QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV(TAUX_DE_CROISSANCE_R5_DANS_L_ESPACE_DE_LYAPUNOV)            \
                         ,IFespace_de_Lyapunov_____R5                                                                                   \
                         ,QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV(TAUX_DE_CROISSANCE_R6_DANS_L_ESPACE_DE_LYAPUNOV)            \
                         ,IFespace_de_Lyapunov_____R6                                                                                   \
                         ,QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV(TAUX_DE_CROISSANCE_R7_DANS_L_ESPACE_DE_LYAPUNOV)            \
                         ,IFespace_de_Lyapunov_____R7                                                                                   \
                         ,ABSO(ITb0(suite_des_taux_de_croissance                                                                        \
                                   ,INDX(numero_de_l_iteration,PREMIERE_ITERATION_DANS_L_ESPACE_DE_LYAPUNOV)                            \
                                    )                                                                                                   \
                               )                                                                                                        \
                          )
                                        /* Fonction de selection d'un taux de croissance en fonction de l'indice courant 'n' de      */
                                        /* de l'iteration. On choisit pour :                                                         */
                                        /*                                                                                           */
                                        /*                  R1 : la coordonnee 'X' dans le plan complexe,                            */
                                        /*                  R2 : la coordonnee 'Y' dans le plan complexe,                            */
                                        /*                  R3 : la coordonnee 'Z' Argument.                                         */
                                        /*                                                                                           */
                                        /* Le 20101103112420 la valeur 'FLOT__UNDEF' qui etait forcee jusqu'a cette date dans le     */
                                        /* cas ou aucun code {R1,R2,R3} n'etait reconnu a ete remplace par la valeur courante de     */
                                        /* 'suite_des_taux_de_croissance' afin de permettre ainsi des taux de croissance absolument  */
                                        /* quelconques. On notera que l'on prend la valeur absolue car, en effet, un taux de         */
                                        /* croissance est evidemment positif ; malgre cela, il est suggere dans ce cas de mettre     */
                                        /* dans 'suite_des_taux_de_croissance' des valeurs negatives afin d'eviter des confusions    */
                                        /* avec {R1,R2,R3}...                                                                        */
                                        /*                                                                                           */
                                        /* Le 20151006085649 a ete introduite 'CON03(...)' afin d'alleger la syntaxe et d'anticiper  */
                                        /* l'introduction de 'CON05(...)'.                                                           */
                                        /*                                                                                           */
                                        /* L'introduction de 'CON05(...)' a eu lieu le 20151006091325.                               */
                                        /*                                                                                           */
                                        /* Le 20151007091822, 'CON05(...)' a ete remplace par 'CON07(...)'. On notera que            */
                                        /* l'utilisation d'un nombre impair de coordonnees {R1,R2,R3,R4,R5,R6,R7} est destine a      */
                                        /* faciliter l'usage fait dans 'v $xiirc/.LYAP.C3.1.$U .xci.valeurs_trig.X'...               */

DEFV(Common,DEFV(Float,ZINT(espace_de_Lyapunov_____constante_de_complementation,FU)));
                                        /* Constante introduite le 20160721163549 lorsque je me suis rendu compte que cette          */
                                        /* constante pouvait varier jusqu'a 1.1111111...                                             */

#define   CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE(suite_Pn,taux_de_croissance)                                                        \
                    Bblock                                                                                                              \
                    DEFV(complexe,suite_Pn_etendue);                                                                                    \
                                        /* Pour calculer l'eventuelle suite etendue...                                               */ \
                                                                                                                                        \
                    Test(IFEQ(IFespace_de_Lyapunov_____exposant,FU))                                                                    \
                         Bblock                                                                                                         \
                         Cegal(suite_Pn_etendue                                                                                         \
                              ,suite_Pn                                                                                                 \
                               );                                                                                                       \
                                        /* Optimisation pour un exposant egal a 1...                                                 */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Cinitialisation(suite_Pn_etendue                                                                               \
                                        ,PUIX(Reelle(suite_Pn),IFespace_de_Lyapunov_____exposant)                                       \
                                        ,NEUT(Imaginaire(suite_Pn))                                                                     \
                                         );                                                                                             \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_C                                                               \
                        (VRAI                                                                                                           \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              Cinitialisation(suite_Pn                                                                                  \
                                             ,MUL2(taux_de_croissance                                                                   \
                                                  ,MUL2(Reelle(suite_Pn_etendue)                                                        \
                                                       ,SOUS(espace_de_Lyapunov_____constante_de_complementation                        \
                                                            ,Reelle(suite_Pn_etendue)                                                   \
                                                             )                                                                          \
                                                        )                                                                               \
                                                   )                                                                                    \
                                             ,NEUT(Imaginaire(suite_Pn_etendue))                                                        \
                                              );                                                                                        \
                                        /* Calcul itere de la suite :                                                                */ \
                                        /*                                                                                           */ \
                                        /*                  X    = R.X .(1 - X )                                                     */ \
                                        /*                   n+1      n       n                                                      */ \
                                        /*                                                                                           */ \
                                        /* L'utilisation possible du 'GooF' a ete introduit le 20181108123454 et on notera qu'elle   */ \
                                        /* est controlee par 'C_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique...'  */ \
                                        /* meme si on semble etre dans les reels, mais en fait il s'agit de complexes a parties      */ \
                                        /* imaginaires nulles...                                                                     */ \
                                        /*                                                                                           */ \
                                        /* Le 20151031085602, la suite a ete generalisee de la facon suivante :                      */ \
                                        /*                                                                                           */ \
                                        /*                            p       p                                                      */ \
                                        /*                  X    = R.X .(1 - X )                                                     */ \
                                        /*                   n+1      n       n                                                      */ \
                                        /*                                                                                           */ \
                                        /* ou 'p' designe un certain exposant (evidemment egal a 1 par defaut...).                   */ \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                         );                                                                                                             \
                    Eblock                                                                                                              \
                                        /* Procedure introduite le 20151030100641...                                                 */
#define   CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_IMAGINAIRE(suite_Pn,taux_de_croissance)                                                    \
                    Bblock                                                                                                              \
                    DEFV(complexe,point_manoeuvre_1);                                                                                   \
                    DEFV(complexe,point_manoeuvre_2);                                                                                   \
                                        /* Points complexes de maneuvre lors de l'iteration.                                         */ \
                    DEFV(complexe,suite_Pn_etendue);                                                                                    \
                                        /* Pour calculer l'eventuelle suite etendue...                                               */ \
                                                                                                                                        \
                    aCpuissance(suite_Pn_etendue                                                                                        \
                               ,suite_Pn                                                                                                \
                               ,IFespace_de_Lyapunov_____exposant                                                                       \
                                );                                                                                                      \
                                        /* Le 20151031085602, la suite a ete generalisee de la facon suivante :                      */ \
                                        /*                                                                                           */ \
                                        /*                            p       p                                                      */ \
                                        /*                  Z    = R.Z .(1 - Z )                                                     */ \
                                        /*                   n+1      n       n                                                      */ \
                                        /*                                                                                           */ \
                                        /* ou 'p' designe un certain exposant (evidemment egal a 1 par defaut...).                   */ \
                                                                                                                                        \
                    aCforme_lineaire(point_manoeuvre_1                                                                                  \
                                    ,NEGA(FU)                                                                                           \
                                    ,suite_Pn_etendue                                                                                   \
                                    ,espace_de_Lyapunov_____constante_de_complementation                                                \
                                     );                                                                                                 \
                                        /* Calcul de :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                  1 - Z  = -Z  + 1                                                         */ \
                                        /*                       n     n                                                             */ \
                                        /*                                                                                           */ \
                                                                                                                                        \
                    aCproduit(point_manoeuvre_2                                                                                         \
                             ,suite_Pn_etendue                                                                                          \
                             ,point_manoeuvre_1                                                                                         \
                              );                                                                                                        \
                                        /* Calcul de :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                  Z .(1 - Z )                                                              */ \
                                        /*                   n       n                                                               */ \
                                        /*                                                                                           */ \
                                                                                                                                        \
                    aCforme_lineaire(suite_Pn                                                                                           \
                                    ,taux_de_croissance                                                                                 \
                                    ,point_manoeuvre_2                                                                                  \
                                    ,FZERO                                                                                              \
                                     );                                                                                                 \
                                        /* Calcul de :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                  Z    = R.Z .(1 - Z )                                                     */ \
                                        /*                   n+1      n       n                                                      */ \
                                        /*                                                                                           */ \
                    Eblock                                                                                                              \
                                        /* Procedure introduite le 20151030100641...                                                 */

#define   CALCUL_DE_LA_DERIVEE_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE(suite_Pn,derivee_suite_Pn,taux_de_croissance)                         \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(IFespace_de_Lyapunov_____calculer_formellement_les_derivees))                                          \
                                        /* Test introduit le 20151030110739...                                                       */ \
                         Bblock                                                                                                         \
                         EGAL(Reelle(derivee_suite_Pn)                                                                                  \
                             ,MUL2(taux_de_croissance                                                                                   \
                                  ,SOUS(espace_de_Lyapunov_____constante_de_complementation,DOUB(Reelle(suite_Pn)))                     \
                                   )                                                                                                    \
                              );                                                                                                        \
                                        /* Calcul de la derivee de la suite :                                                        */ \
                                        /*                                                                                           */ \
                                        /*                  d(X   ) = R.(1 - 2.X   )                                                 */ \
                                        /*                     n+1              n+1                                                  */ \
                                        /*                                                                                           */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         DEFV(complexe,suite_Pn_a_gauche);                                                                              \
                         DEFV(complexe,suite_Pn_a_droite);                                                                              \
                                                                                                                                        \
                         Cinitialisation(suite_Pn_a_gauche                                                                              \
                                        ,SOUS(Reelle(suite_Pn),IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees)           \
                                        ,NEUT(Imaginaire(suite_Pn))                                                                     \
                                         );                                                                                             \
                         Cinitialisation(suite_Pn_a_droite                                                                              \
                                        ,ADD2(Reelle(suite_Pn),IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees)           \
                                        ,NEUT(Imaginaire(suite_Pn))                                                                     \
                                         );                                                                                             \
                                                                                                                                        \
                         CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE(suite_Pn_a_gauche                                                    \
                                                                  ,taux_de_croissance                                                   \
                                                                   );                                                                   \
                         CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE(suite_Pn_a_droite                                                    \
                                                                  ,taux_de_croissance                                                   \
                                                                   );                                                                   \
                                                                                                                                        \
                         EGAL(Reelle(derivee_suite_Pn)                                                                                  \
                             ,DERIVATION_PARTIELLE(Reelle(suite_Pn_a_gauche)                                                            \
                                                  ,Reelle(suite_Pn_a_droite)                                                            \
                                                  ,DOUB(IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees)                  \
                                                   )                                                                                    \
                              );                                                                                                        \
                                        /* Calcul de la derivee de la suite par des differences finies...                            */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Procedure introduite le 20151030100641...                                                 */
#define   CALCUL_DE_LA_DERIVEE_DE_LA_DYNAMIQUE_DE_VERHULST_IMAGINAIRE(suite_Pn,derivee_suite_Pn,taux_de_croissance)                     \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(IFespace_de_Lyapunov_____calculer_formellement_les_derivees))                                          \
                                        /* Test introduit le 20151030110739...                                                       */ \
                         Bblock                                                                                                         \
                         DEFV(complexe,point_manoeuvre);                                                                                \
                                        /* Point complexe de maneuvre lors de l'iteration.                                           */ \
                                                                                                                                        \
                         aCforme_lineaire(point_manoeuvre                                                                               \
                                         ,NEGA(FDEUX)                                                                                   \
                                         ,suite_Pn                                                                                      \
                                         ,espace_de_Lyapunov_____constante_de_complementation                                           \
                                          );                                                                                            \
                                        /* Calcul de :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                  1 - 2.Z    = -2.Z    + 1                                                 */ \
                                        /*                         n+1       n+1                                                     */ \
                                        /*                                                                                           */ \
                                                                                                                                        \
                         aCforme_lineaire(derivee_suite_Pn                                                                              \
                                         ,taux_de_croissance                                                                            \
                                         ,point_manoeuvre                                                                               \
                                         ,FZERO                                                                                         \
                                          );                                                                                            \
                                        /* Calcul de :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                  d(Z   ) = R.(1 - 2.Z   )                                                 */ \
                                        /*                     n+1              n+1                                                  */ \
                                        /*                                                                                           */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         DEFV(complexe,suite_Pn_a_gauche);                                                                              \
                         DEFV(complexe,suite_Pn_a_droite);                                                                              \
                                                                                                                                        \
                         Cinitialisation(suite_Pn_a_gauche                                                                              \
                                        ,SOUS(Reelle(suite_Pn),IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees)           \
                                        ,SOUS(Imaginaire(suite_Pn),IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees)       \
                                         );                                                                                             \
                         Cinitialisation(suite_Pn_a_droite                                                                              \
                                        ,ADD2(Reelle(suite_Pn),IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees)           \
                                        ,ADD2(Imaginaire(suite_Pn),IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees)       \
                                         );                                                                                             \
                                                                                                                                        \
                         CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_IMAGINAIRE(suite_Pn_a_gauche                                                \
                                                                      ,taux_de_croissance                                               \
                                                                       );                                                               \
                         CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_IMAGINAIRE(suite_Pn_a_droite                                                \
                                                                      ,taux_de_croissance                                               \
                                                                       );                                                               \
                                                                                                                                        \
                         Cinitialisation(derivee_suite_Pn                                                                               \
                                        ,DERIVATION_PARTIELLE(Reelle(suite_Pn_a_gauche)                                                 \
                                                             ,Reelle(suite_Pn_a_droite)                                                 \
                                                             ,DOUB(IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees)       \
                                                              )                                                                         \
                                        ,DERIVATION_PARTIELLE(Imaginaire(suite_Pn_a_gauche)                                             \
                                                             ,Imaginaire(suite_Pn_a_droite)                                             \
                                                             ,DOUB(IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees)       \
                                                              )                                                                         \
                                         );                                                                                             \
                                        /* Calcul de la derivee de la suite par des differences finies...                            */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Procedure introduite le 20151030100641...                                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   " F L O T T A N T "   D E   L ' E S P A C E   D E   V E R H U S L T - L Y A P U N O V                        */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(Logical,SINT(IFespace_de_Lyapunov_____utiliser_la_dynamique_etendue,FAUX)));
DEFV(Common,DEFV(Float,SINT(IFespace_de_Lyapunov_____exposant,FU)));
                                        /* Le 20151031085602 a ete introduite la possibilite d'utiliser une dynamique plus           */
                                        /* compliquee que 'R.Z.(1-Z)'...                                                             */
DEFV(Common,DEFV(Logical,SINT(IFespace_de_Lyapunov_____calculer_formellement_les_derivees,VRAI)));
DEFV(Common,DEFV(Float,SINT(IFespace_de_Lyapunov_____epsilon_d_approximation_des_derivees,tgEPSILON)));
                                        /* Le 20151030110739 a ete introduite la possibilite de calculer les derviees par des        */
                                        /* differences finies dans le but de pouvoir compliquer un peu la definition de l'iteration  */
                                        /* de Verhulst.                                                                              */

DEFV(Common,DEFV(Logical,SINT(IFespace_de_Lyapunov_____faire_une_rotation_tridimensionnelle,FAUX)));
                                        /* Introduit le 20210815103934...                                                            */
                                        /*                                                                                           */
                                        /* On notera le 20210815121225 que cela ne fait pas en realite une rotation                  */
                                        /* tridimensionnelle (sauf peut-etre pour de tres petits angles) et ce a cause du            */
                                        /* fait que la dynamique de Verhulst est chaotique et qu'alors la moindre petite             */
                                        /* modification sur une valeur initiale (ou intermediaire), ce qui a necessairement          */
                                        /* lieu de la rotation, a des consequences macroscopiques sur la suite du processus.         */
                                        /* Cela fut en fait introduit pour le plaisir...                                             */

DEFV(Common,DEFV(Float,SINT(IFespace_de_Lyapunov_____R4,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFespace_de_Lyapunov_____R5,FZERO)));
                                        /* Les parametres 'R4' et 'R5' ont ete introduits le 20151006091325...                       */
DEFV(Common,DEFV(Float,SINT(IFespace_de_Lyapunov_____R6,FZERO)));
DEFV(Common,DEFV(Float,SINT(IFespace_de_Lyapunov_____R7,FZERO)));
                                        /* Les parametres 'R6' et 'R7' ont ete introduits le 20151007091822...                       */

DEFV(Common,DEFV(FonctionF,POINTERF(IFespace_de_Lyapunov(imageR
                                                        ,Zf
                                                        ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                        ,ARGUMENT_POINTERs(coin_haut_droite)
                                                        ,ARGUMENT_POINTERs(valeur_initiale_P0_de_Pn)
                                                        ,suite_des_taux_de_croissance
                                                        ,nombre_d_iterations
                                                        ,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
                                                        ,visualiser_les_exposants_negatifs
                                                        ,visualiser_les_exposants_positifs
                                                        ,facteur_multiplicatif
                                                         )
                                    )
                 )
     )
DEFV(Argument,DEFV(imageF,imageR));
                                        /* Image Resultat a generer en flottant.                                                     */
DEFV(Argument,DEFV(Float,Zf));
                                        /* Coordonnee 'Z' flottante donnant dans un segment du type [0,1] la tranche verticale       */
                                        /* dans laquelle on genere la coupe bi-dimensionnelle de l'espace de Lyapunov.               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(complexe,POINTERs(valeur_initiale_P0_de_Pn)));
                                        /* Nombre complexe "generateur" de l'espace de Lyapunov que l'on veut calculer. On notera    */
                                        /* que si ce nombre complexe se reduit a sa partie reelle, les calculs sont optimises...     */
DEFV(Argument,DEFV(Float,DTb0(suite_des_taux_de_croissance)));
                                        /* Donne la suite des taux de croissance. Ce tableau a autant d'elements qu'il est prevu     */
                                        /* d'iterations, soit 'nombre_d_iterations'...                                               */
                                        /*                                                                                           */
                                        /* Le 20101103112420, le type de 'suite_des_taux_de_croissance' est passe de 'Int' a         */
                                        /* 'Float' afin que ce vecteur puisse contenir des codes de taux de croissance (par          */
                                        /* exemple 'TAUX_DE_CROISSANCE_R1_DANS_L_ESPACE_DE_LYAPUNOV'), mais aussi les taux de        */
                                        /* croissance eux-memes, auquel cas il est suggere d'utiliser des valeurs negatives, les     */
                                        /* taux etant evidemment positifs, dont on prendra donc la valeur absolue ; ainsi il n'y     */
                                        /* aura pas de confusions entre les codes {R1,R2,R3} et ces valeurs specifiques...           */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
                                        /* Nombre d'iterations demande.                                                              */
DEFV(Argument,DEFV(Int,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
                                        /* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la         */
                                        /* fonction iteree (voir 'choix_du_mode_de_calcul_de_l_exposant_de_Lyapunov' dans le         */
                                        /* fichier 'v $ximcf/iterations$DEF').                                                       */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_negatifs));
                                        /* Cet indicateur logique controle la visualisation des zones des parties stables. Il        */
                                        /* permet de visualiser les exposants negatifs ('VRAI'), ou de les ignorer ('FAUX') auquel   */
                                        /* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux       */
                                        /* parties stables.                                                                          */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_positifs));
                                        /* Cet indicateur logique controle la visualisation des zones des parties chaotiques. Il     */
                                        /* permet de visualiser les exposants positifs ('VRAI'), ou de les ignorer ('FAUX') auquel   */
                                        /* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux       */
                                        /* parties chaotiques.                                                                       */
DEFV(Argument,DEFV(Float,facteur_multiplicatif));
                                        /* Ce facteur multiplicatif est la uniquement pour permettre de faire en quelque sorte une   */
                                        /* inversion video du champ genere (pour la valeur -1.0).                                    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_EXPOSANT_LYAPUNOV_SANS_point_courant
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;
                                        /* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel...       */

     CALS(IFinitialisation(imageR,FZERO));
                                        /* Initialisation, on ne sait jamais...                                                      */

     BSaveModifyVariable(Logical
                        ,IFespace_de_Lyapunov_____calculer_formellement_les_derivees
                        ,COND(IL_FAUT(IFespace_de_Lyapunov_____utiliser_la_dynamique_etendue)
                             ,FAUX
                             ,IFespace_de_Lyapunov_____calculer_formellement_les_derivees
                              )
                         );
                                        /* Ainsi, on force le calcul par differences finies des derivees pour la dynamique           */
                                        /* etendue, ce qui est logique puisque l'on ne connait pas a priori la derivee formelle.     */

     begin_image
          Bblock

#define   NE_PAS_TRANSLATER_TRANSFORMATION_3D_Fxyz                                                                                      \
                    NE_PAS_TRANSLATER_LORS_DE_TRANSFORMATION_GEOMETRIQUE_3D_Fxyz                                                        \
                                        /* Afin de raccourcir certaines lignes ci-dessous...                                         */

          F_ITERATION_CALCUL_EXPOSANT_LYAPUNOV_DANS_C(PREMIERE_ITERATION_DANS_L_ESPACE_DE_LYAPUNOV
                                                     ,BLOC(Bblock
                                                           Cegal(element_courant_de_la_suite_Pn,INDIRECT(valeur_initiale_P0_de_Pn));
                                        /* Recuperation du nombre complexe "generateur"...                                           */
                                                           Eblock
                                                           )
                                                     ,BLOC(Bblock
                                                           DEFV(Float,INIT(IFespace_de_Lyapunov_____R1,X_IMAGE_PLAN(X)));
                                                           DEFV(Float,INIT(IFespace_de_Lyapunov_____R2,Y_IMAGE_PLAN(Y)));
                                                           DEFV(Float,INIT(IFespace_de_Lyapunov_____R3,Zf));
                                        /* Introduit le 20210815100953 afin de permettre des transformations tridimensionnelles      */
                                        /* des coordonnees {X,Y,Z}...                                                                */

                                                           Test(IL_FAUT(IFespace_de_Lyapunov_____faire_une_rotation_tridimensionnelle))
                                        /* Possibilite introduite le 20210815103934...                                               */
                                                                Bblock
                                                                DEFV(Float,INIT(rotation_de_R1
                                                                               ,TRANSFORMATION_GEOMETRIQUE_3D_Fx
                                                                                    (IFespace_de_Lyapunov_____R1
                                                                                    ,IFespace_de_Lyapunov_____R2
                                                                                    ,IFespace_de_Lyapunov_____R3
                                                                                    ,NE_PAS_TRANSLATER_TRANSFORMATION_3D_Fxyz
                                                                                     )
                                                                                )
                                                                     );
                                                                DEFV(Float,INIT(rotation_de_R2
                                                                               ,TRANSFORMATION_GEOMETRIQUE_3D_Fy
                                                                                    (IFespace_de_Lyapunov_____R1
                                                                                    ,IFespace_de_Lyapunov_____R2
                                                                                    ,IFespace_de_Lyapunov_____R3
                                                                                    ,NE_PAS_TRANSLATER_TRANSFORMATION_3D_Fxyz
                                                                                     )
                                                                                )
                                                                     );
                                                                DEFV(Float,INIT(rotation_de_R3
                                                                               ,TRANSFORMATION_GEOMETRIQUE_3D_Fz
                                                                                    (IFespace_de_Lyapunov_____R1
                                                                                    ,IFespace_de_Lyapunov_____R2
                                                                                    ,IFespace_de_Lyapunov_____R3
                                                                                    ,NE_PAS_TRANSLATER_TRANSFORMATION_3D_Fxyz
                                                                                     )
                                                                                )
                                                                     );

                                                                EGAL(IFespace_de_Lyapunov_____R1,rotation_de_R1);
                                                                EGAL(IFespace_de_Lyapunov_____R2,rotation_de_R2);
                                                                EGAL(IFespace_de_Lyapunov_____R3,rotation_de_R3);
                                        /* Rotation de {R1,R2,R3} introduite le 20210815103934...                                    */
                                                                Eblock
                                                           ATes
                                                                Bblock
                                                                Eblock
                                                           ETes

                                                           Test(IZEQ(Imaginaire(INDIRECT(valeur_initiale_P0_de_Pn))))
                                                                Bblock
                                        /* Cas ou le generateur est un nombre Reel (c'est-a-dire un nombre complexe dont la partie   */
                                        /* imaginaire est nulle...), on optimise (du jamais vu...) :                                 */

                                                                CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE
                                                                    (element_courant_de_la_suite_Pn
                                                                    ,TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV
                                                                     );

                                                                CALCUL_DE_LA_DERIVEE_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE
                                                                    (element_courant_de_la_suite_Pn
                                                                    ,derivee_de_la_suite_Pn
                                                                    ,TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV
                                                                     );
                                                                Eblock
                                                           ATes
                                                                Bblock
                                        /* Cas ou le generateur est un nombre complexe (c'est-a-dire un nombre complexe dont la      */
                                        /* partie imaginaire n'est pas nulle...) :                                                   */
                                                                CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_IMAGINAIRE
                                                                    (element_courant_de_la_suite_Pn
                                                                    ,TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV
                                                                     );

                                                                CALCUL_DE_LA_DERIVEE_DE_LA_DYNAMIQUE_DE_VERHULST_IMAGINAIRE
                                                                    (element_courant_de_la_suite_Pn
                                                                    ,derivee_de_la_suite_Pn
                                                                    ,TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV
                                                                     );
                                                                Eblock
                                                           ETes
                                                           Eblock
                                                           )
                                                      );

#undef    NE_PAS_TRANSLATER_TRANSFORMATION_3D_Fxyz

          Eblock
     end_image

     ESaveModifyVariable(Logical
                        ,IFespace_de_Lyapunov_____calculer_formellement_les_derivees
                         );

     RETIF(imageR);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   " S T A N D A R D "   D E   L ' E S P A C E   D E   V E R H U S L T - L Y A P U N O V                        */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,POINTERp(Iespace_de_Lyapunov(imageR
                                                       ,Zf
                                                       ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                       ,ARGUMENT_POINTERs(coin_haut_droite)
                                                       ,ARGUMENT_POINTERs(valeur_initiale_P0_de_Pn)
                                                       ,suite_des_taux_de_croissance
                                                       ,nombre_d_iterations
                                                       ,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
                                                       ,visualiser_les_exposants_negatifs
                                                       ,visualiser_les_exposants_positifs
                                                       ,facteur_multiplicatif
                                                        )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer en "standard".                                                   */
DEFV(Argument,DEFV(Float,Zf));
                                        /* Coordonnee 'Z' flottante donnant dans un segment du type [0,1] la tranche verticale       */
                                        /* dans laquelle on genere la coupe bi-dimensionnelle de l'espace de Lyapunov.               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(complexe,POINTERs(valeur_initiale_P0_de_Pn)));
                                        /* Nombre complexe "generateur" de l'espace de Lyapunov que l'on veut calculer. On notera    */
                                        /* que si ce nombre complexe se reduit a sa partie reelle, les calculs sont optimises...     */
DEFV(Argument,DEFV(Float,DTb0(suite_des_taux_de_croissance)));
                                        /* Donne la suite des taux de croissance. Ce tableau a autant d'elements qu'il est prevu     */
                                        /* d'iterations, soit 'nombre_d_iterations'...                                               */
                                        /*                                                                                           */
                                        /* Le 20101103112420, le type de 'suite_des_taux_de_croissance' est passe de 'Int' a         */
                                        /* 'Float' afin que ce vecteur puisse contenir des codes de taux de croissance (par          */
                                        /* exemple 'TAUX_DE_CROISSANCE_R1_DANS_L_ESPACE_DE_LYAPUNOV'), mais aussi les taux de        */
                                        /* croissance eux-memes, auquel cas il est suggere d'utiliser des valeurs negatives, les     */
                                        /* taux etant evidemment positifs, dont on prendra donc la valeur absolue ; ainsi il n'y     */
                                        /* aura pas de confusions entre les codes {R1,R2,R3} et ces valeurs specifiques...           */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
                                        /* Nombre d'iterations demande.                                                              */
DEFV(Argument,DEFV(Int,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
                                        /* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la         */
                                        /* fonction iteree (voir 'choix_du_mode_de_calcul_de_l_exposant_de_Lyapunov' dans le         */
                                        /* fichier 'v $ximcf/iterations$DEF').                                                       */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_negatifs));
                                        /* Cet indicateur logique controle la visualisation des zones des parties stables. Il        */
                                        /* permet de visualiser les exposants negatifs ('VRAI'), ou de les ignorer ('FAUX') auquel   */
                                        /* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux       */
                                        /* parties stables.                                                                          */
DEFV(Argument,DEFV(Logical,visualiser_les_exposants_positifs));
                                        /* Cet indicateur logique controle la visualisation des zones des parties chaotiques. Il     */
                                        /* permet de visualiser les exposants positifs ('VRAI'), ou de les ignorer ('FAUX') auquel   */
                                        /* cas, ils sont mis a zero. Cela permet d'uniformiser les zones qui correspondent aux       */
                                        /* parties chaotiques.                                                                       */
DEFV(Argument,DEFV(Float,facteur_multiplicatif));
                                        /* Ce facteur multiplicatif est la uniquement pour permettre de faire en quelque sorte une   */
                                        /* inversion video du champ genere (pour la valeur -1.0).                                    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Int,INIT(mode_de_calcul_utilise_pour_l_exposant_de_Lyapunov,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov));
                                        /* Choix de la facon de calculer l'exposant de Lyapunov a partir de la derivee de la         */
                                        /* fonction iteree ; en effet, suivant les circonstances (cas ou les calculs sont purement   */
                                        /* elles), le mode utilise peut etre different de celui qui a ete demande...                 */
     BDEFV(imageF,coupe_dans_l_espace_de_Lyapunov);
                                        /* Coupe bidimensionnelle dans l'espace tridimensionnel de Lyapunov.                         */
     /*..............................................................................................................................*/
     MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV;
                                        /* Choix du mode calcul de l'exposant de Lyapunov en fonction des arguments d'appel...       */

     CALS(IFespace_de_Lyapunov(coupe_dans_l_espace_de_Lyapunov
                              ,Zf
                              ,coin_bas_gauche
                              ,coin_haut_droite
                              ,valeur_initiale_P0_de_Pn
                              ,suite_des_taux_de_croissance
                              ,nombre_d_iterations
                              ,mode_de_calcul_demande_pour_l_exposant_de_Lyapunov
                              ,visualiser_les_exposants_negatifs
                              ,visualiser_les_exposants_positifs
                              ,facteur_multiplicatif
                               )
          );
                                        /* Calcul de l'espace de Lyapunov en "flottant", et donc sans renormalisation...             */

     CALS(Ifloat_std_avec_renormalisation(imageR,coupe_dans_l_espace_de_Lyapunov));
                                        /* Et enfin, conversion du champ flottant en une image avec renormalisation. Mais on fera    */
                                        /* tres ATTENTION au fait que cet 'Ifloat_std_avec_renormalisation(...)' est dependant du    */
                                        /* contenu de l'image courante uniquement. Dans ces conditions, lors du calcul d'une suite   */
                                        /* d'images, par exemple a l'aide de 'v $xrk/lyapunov.01$K', les extrema utilises par cette  */
                                        /* renormalisation pourront varier d'une image a une autre. C'est ceci qui explique le       */
                                        /* phenomene de "pompage" des niveaux que l'on observe dans la sequence suivante :           */
                                        /*                                                                                           */
                                        /*                  xivPdf 2 1 / 009320_009447                                               */
                                        /*                                                                                           */
                                        /* Je vois difficilement comment eviter ce phenomene, qui va jusqu'a donner l'impression     */
                                        /* de retour en arriere dans le zoom precedent. On pourrait bien sur utiliser directement    */
                                        /* la fonction 'IFespace_de_Lyapunov(...)', et faire dans le programme appelant l'operation  */
                                        /* de renormalisation suivant les extrema globaux pour l'ensemble des images, mais cela      */
                                        /* serait d'une grande lourdeur...                                                           */

     EDEFV(imageF,coupe_dans_l_espace_de_Lyapunov);
                                        /* Coupe bidimensionnelle dans l'espace tridimensionnel de Lyapunov.                         */

     RETI(imageR);
     Eblock

EFonctionP

#undef    CALCUL_DE_LA_DERIVEE_DE_LA_DYNAMIQUE_DE_VERHULST_IMAGINAIRE
#undef    CALCUL_DE_LA_DERIVEE_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE
#undef    CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_IMAGINAIRE
#undef    CALCUL_DE_LA_DYNAMIQUE_DE_VERHULST_REELLE
#undef    TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV
#undef    QUEL_TAUX_DE_CROISSANCE_DANS_L_ESPACE_DE_LYAPUNOV
#undef    FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV
#Undef    FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_02
                                        /* Le 20030222103003, 'FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_02(...)'      */
                                        /* est passe de 'undef' a 'Undef' afin de ne pas etre recupere par le processus              */
                                        /* 'v $xcc/cpp$Z _VERSION_'.                                                                 */
#undef    FONCTION_DE_PRECISION_DANS_L_ESPACE_DE_LYAPUNOV_VERSION_01
#undef    F_ITERATION_CALCUL_EXPOSANT_LYAPUNOV_DANS_C
#undef    TRES_PETIT_EXPOSANT_DE_LYAPUNOV
#undef    PASSAGE_DE_LA_DERIVEE_D_UNE_SUITE_A_L_EXPOSANT_DE_LYAPUNOV
#undef    COMMENT_CALCULER_LA_DERIVEE
#undef    MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV
#undef    VALIDATION_DU_MODE_DE_CALCUL_DE_L_EXPOSANT_DE_LYAPUNOV
#undef    BVARIABLES_F_EXPOSANT_LYAPUNOV
#undef    BVARIABLES_F_EXPOSANT_LYAPUNOV_SANS_point_courant

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D ' U N E   S U I T E   Q U E L C O N Q U E                                                          */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   BVARIABLES_F_ITERATION_QUELCONQUE_DANS_C_SANS_point_courant                                                                   \
                                        /* Definition des variables communes a toutes les fonctions calculant une suite quelconque   */ \
                                        /* dans le plan Complexe...                                                                  */ \
                    BVARIABLES_D_HOMOTHETIE_C_HC_HHC                                                                                    \
                                        /* "Taille" reelle et imaginaire de la fenetre rapportee a la taille des images.             */
#define   BVARIABLES_F_ITERATION_QUELCONQUE_DANS_C                                                                                      \
                                        /* Definition des variables communes a toutes les fonctions calculant une suite quelconque   */ \
                                        /* dans le plan Complexe...                                                                  */ \
                    BVARIABLES_F_ITERATION_QUELCONQUE_DANS_C_SANS_point_courant                                                         \
                                        /* "Taille" reelle et imaginaire de la fenetre rapportee a la taille des images.             */ \
                    DEFV(complexe,point_courant);                                                                                       \
                                        /* Point complexe courant 'C' dans la fenetre.                                               */

#define   F_ITERATION_QUELCONQUE_DANS_C(premiere_iteration_absolue,premiere_iteration_effective,initialisation,iteration,test_defaut)   \
                    Bblock                                                                                                              \
                    DEFV(Int,INIT(numero_de_l_iteration,UNDEF));                                                                        \
                                        /* Indice 'n' de la suite 'X'...                                                             */ \
                    DEFV(complexe,element_courant_de_la_suite_Pn);                                                                      \
                                        /* Element courant Z  de la suite.                                                           */ \
                                        /*                  n                                                                        */ \
                    BLOC(initialisation);                                                                                               \
                                        /* Initialisation de la suite definissant le systeme dynamique...                            */ \
                                                                                                                                        \
                    DoIn(numero_de_l_iteration                                                                                          \
                        ,premiere_iteration_effective                                                                                   \
                        ,LSTX(premiere_iteration_absolue,nombre_d_iterations)                                                           \
                        ,I                                                                                                              \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         BLOC(iteration);                                                                                               \
                                        /* Calcul du systeme dynamique par iteration du calcul de la suite...                        */ \
                                                                                                                                        \
                         Test(IL_FAUT(test_defaut))                                                                                     \
                              Bblock                                                                                                    \
                              TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE(element_courant_de_la_suite_Pn                                      \
                                                                   ,iterations_dans_C_HC_HHC_____epsilon                                \
                                                                    );                                                                  \
                                        /* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter                      */ \
                                        /* des underflows flottants...                                                               */ \
                              TEST_D_OVERFLOW_D_UNE_SUITE_COMPLEXE(element_courant_de_la_suite_Pn,RACX(F_INFINI));                      \
                                        /* Lorsqu'une composante devient trop grande, on la plafonne afin d'eviter des underflows    */ \
                                        /* flottants. On notera l'utilisation de 'RACX(...)' pour prendre en compte l'elevation au   */ \
                                        /* carre lors de l'eventuelle iteration suivante...                                          */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         Eblock                                                                                                         \
                    EDoI                                                                                                                \
                                                                                                                                        \
                    storeJ_point(element_courant_de_la_suite_Pn                                                                         \
                                ,imageR                                                                                                 \
                                ,X,Y                                                                                                    \
                                 );                                                                                                     \
                                        /* Generation de l'image "complexe"...                                                       */ \
                    Eblock                                                                                                              \
                                        /* Calcul general d'une suite quelconque dans le plan complexe...                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T E U R   D E   F O N C T I O N S   C A L C U L A N T                                                          */
/*        U N E   F O N C T I O N   D A N S   L E   P L A N   C O M P L E X E  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#pragma   xcg__gen_ext_Z__gen_Fonction_SE__GENERE__Fonction                     GENERE__FonctionJ_I_FONCTION_C          POINTERJ
                                        /* Introduit le 20040520121238.                                                              */
#define   GENERE__FonctionJ_I_FONCTION_C(nom_et_arguments_de_la_fonction,Nfonction,Vfonction,alpha,beta_,gamma,delta,nom,editer,simp)   \
                                        /* ATTENTION : le nom de la fonction est suivi de ses arguments pour des raisons liees       */ \
                                        /* a la recuperation automatique des fichiers d'arguments ; on trouvera donc :               */ \
                                        /*                                                                                           */ \
                                        /*        GENERE__FonctionP_FONCTION_C(nom_et_arguments_de_la_fonction,Nfonction,Vfonction)  */ \
                                        /*                                                                                           */ \
                                        /* D'autre part, la fonction 'Nfonction' devra etre de nom '__...' afin que son nombre       */ \
                                        /* d'arguments ne soit pas verifie ('v $xcg/gen.arg$D/debut$I __f').                         */ \
                                        /*                                                                                           */ \
                                        /* Les arguments {alpha,beta_,gamma,delta} ont ete introduits le 20091021152725 suite a      */ \
                                        /* l'extension 'v $ximcd/operator$FON Cforme_homographique'. En general, ils vaudront :      */ \
                                        /* definie par :                                                                             */ \
                                        /*                                                                                           */ \
                                        /*                  alpha = 1                                                                */ \
                                        /*                  beta_ = 0                                                                */ \
                                        /*                  gamma = 0                                                                */ \
                                        /*                  delta = 1                                                                */ \
                                        /*                                                                                           */ \
                                        /* afin que la transformation homographique soit neutre...                                   */ \
                                        /*                                                                                           */ \
                                        /* Les arguments {nom,editer} ont ete introduits le 20120121174948...                        */ \
                                        /*                                                                                           */ \
                                        /* L'argument {simp} (pour "SIMPlifier") a ete introduit le 20120124091005...                */ \
DEFV(FonctionJ,POINTERJ(nom_et_arguments_de_la_fonction))                                                                               \
                                        /* ATTENTION, il ne faut pas ecrire :                                                        */ \
                                        /*                                                                                           */ \
                                        /*        DEFV(Common,DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction)))             */ \
                                        /*                                                                                           */ \
                                        /* puisqu'en effet la directive 'Common' est utilisee lors de l'appel par :                  */ \
                                        /*                                                                                           */ \
                                        /*        DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(...))                                   */ \
                                        /*                                                                                           */ \
                                        /* Actuellement cette redondance ne serait pas genante, mais plus tard...                    */ \
DEFV(Argument,DEFV(imageJ,imageR));                                                                                                     \
                                        /* Image Resultat a generer.                                                                 */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));                                                                                \
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));                                                                               \
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */ \
/*-----------------------------------------------------------------------------------------------------------------------------------*/ \
     Bblock                                                                                                                             \
     BVARIABLES_F_ITERATION_QUELCONQUE_DANS_C                                                                                           \
     /*..............................................................................................................................*/ \
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;                                                         \
                                                                                                                                        \
     begin_image                                                                                                                        \
          Bblock                                                                                                                        \
          DEFV(complexe,point_courant_transforme);                                                                                      \
                                                                                                                                        \
          INITIALISATION_DU_POINT_COURANT_DANS_C;                                                                                       \
                                        /* Initialisation du "point Courant" 'C'.                                                    */ \
                                                                                                                                        \
          Cforme_homographique(point_courant_transforme,alpha,point_courant,beta_,gamma,point_courant,delta);                           \
                                        /* Transformation homographique du "point Courant" 'C'. Ceci fut introduit le 20091021152725 */ \
                                        /* afin de pouvoir representer la fonction 'exp(1/z)' en utilisant directement la fonction   */ \
                                        /* 'fFCexponentielle_neperienne(...)' et en appliquant la transformation homographique       */ \
                                        /* definie par :                                                                             */ \
                                        /*                                                                                           */ \
                                        /*                  alpha = 0                                                                */ \
                                        /*                  beta_ = 1                                                                */ \
                                        /*                  gamma = 1                                                                */ \
                                        /*                  delta = 0                                                                */ \
                                        /*                                                                                           */ \
                                        /* astucieux...                                                                              */ \
                                                                                                                                        \
          CALS(Nfonction(point_courant_transforme));                                                                                    \
                                        /* Application de la transformation...                                                       */ \
                                                                                                                                        \
          Test(IL_FAUT(editer))                                                                                                         \
               Bblock                                                                                                                   \
               Test(IL_NE_FAUT_PAS(simp))                                                                                               \
                                        /* Test introduit le 20120124091005...                                                       */ \
                    Bblock                                                                                                              \
                    CAL3(Prme5("%s(%+.^^^,%+.^^^)=(%+.^^^,%+.^^^)\n"                                                                    \
                              ,nom                                                                                                      \
                              ,Reelle(point_courant_transforme),Imaginaire(point_courant_transforme)                                    \
                              ,Reelle(Vfonction),Imaginaire(Vfonction)                                                                  \
                               )                                                                                                        \
                         );                                                                                                             \
                                        /* Possibilite introduite le 20120121174948...                                               */ \
                    Eblock                                                                                                              \
               ATes                                                                                                                     \
                    Bblock                                                                                                              \
                    CAL3(Prme4("%+.^^^ %+.^^^ %+.^^^ %+.^^^\n"                                                                          \
                              ,Reelle(point_courant_transforme),Imaginaire(point_courant_transforme)                                    \
                              ,Reelle(Vfonction),Imaginaire(Vfonction)                                                                  \
                               )                                                                                                        \
                         );                                                                                                             \
                                        /* Possibilite introduite le 20120124091005 pour simplifier le traitement de ces sorties...  */ \
                    Eblock                                                                                                              \
               ETes                                                                                                                     \
               Eblock                                                                                                                   \
          ATes                                                                                                                          \
               Bblock                                                                                                                   \
               Eblock                                                                                                                   \
          ETes                                                                                                                          \
                                                                                                                                        \
          storeJ_point(Vfonction                                                                                                        \
                      ,imageR                                                                                                           \
                      ,X,Y                                                                                                              \
                       );                                                                                                               \
                                        /* Generation de l'image "complexe"...                                                       */ \
          Eblock                                                                                                                        \
     end_image                                                                                                                          \
                                                                                                                                        \
     RETIJ(imageR);                                                                                                                     \
     Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' gamma '                                                                      */
/*        D A N S   L E   P L A N   C O M P L E X E   A V E C   L E   P R O L O N G E M E N T   A N A L Y T I Q U E  :               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionJ

DEFV(Common,DEFV(Logical,SINT(IJfonction_prolongement_analytique_gamma_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_prolongement_analytique_gamma_dans_C_____simp,FAUX)));
                                        /* Possibilite introduite le 20120121174948 et completee le 20120124091005...                */

DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_prolongement_analytique_gamma_dans_C(imageR   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                                                           )        /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCgamma_sommation_Euler_MacLaurin                       /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCgamma_sommation_Euler_MacLaurin_____valeur            /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCgamma_sommation_Euler_MacLaurin_____Halpha            /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCgamma_sommation_Euler_MacLaurin_____Hbeta_            /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCgamma_sommation_Euler_MacLaurin_____Hgamma            /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCgamma_sommation_Euler_MacLaurin_____Hdelta            /* Common,DEFV(Fonction,) :   \  */
                                          ,"gamma"                                                  /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_prolongement_analytique_gamma_dans_C_____edit /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_prolongement_analytique_gamma_dans_C_____simp /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   " F L O T T A N T "   D E   L A   F O N C T I O N   ' zeta '   D E   R I E M A N N                           */
/*        D A N S   L E   P L A N   C O M P L E X E   A V E C   L A   S E R I E   D ' E U L E R                                      */
/*        S U I V A N T   U N   P R O C E S S U S   L I N E A I R E   E N   T E M P S  :                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    La fonction 'zeta' de Riemann est definie                                                                      */
/*                  dans le plan Complexe par :                                                                                      */
/*                                                                                                                                   */
/*                                                 1      1            1                                                             */
/*                                      zeta(z) = ---- + ---- + ... + ---- + ...                                                     */
/*                                                  z      z            z                                                            */
/*                                                 1      2            n                                                             */
/*                                                                                                                                   */
/*                  ce qui peut se reecrire :                                                                                        */
/*                                                                                                                                   */
/*                                                 -z    -z          -z                                                              */
/*                                      zeta(z) = 1   + 2   + ... + n   + ...                                                        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                               n=+infini                                                                           */
/*                                                _______                                                                            */
/*                                                \                                                                                  */
/*                                                 \       -z                                                                        */
/*                                      zeta(z) =  /      n                                                                          */
/*                                                /______                                                                            */
/*                                                                                                                                   */
/*                                                  n=1                                                                              */
/*                                                                                                                                   */
/*                  sachant que :                                                                                                    */
/*                                                                                                                                   */
/*                                       -z    -z.Log(n)                                                                             */
/*                                      n   = e                                                                                      */
/*                                                                                                                                   */
/*                  ou en posant :                                                                                                   */
/*                                                                                                                                   */
/*                                      x = R(z)                                                                                     */
/*                                      y = I(z)                                                                                     */
/*                                                                                                                                   */
/*                                       -z    -(x + i.y).Log(n)                                                                     */
/*                                      n   = e                                                                                      */
/*                                                                                                                                   */
/*                                       -z    -x.Log(n)  -i.y.Log(n)                                                                */
/*                                      n   = e         .e                                                                           */
/*                                                                                                                                   */
/*                                       -z    -x.Log(n)                                                                             */
/*                                      n   = e         .[cos(-y.Log(n)) + i.sin(-y.Log(n))]                                         */
/*                                                                                                                                   */
/*                  d'ou :                                                                                                           */
/*                                                                                                                                   */
/*                                               n=+infini                                                                           */
/*                                                _______                                                                            */
/*                                                \                                                                                  */
/*                                                 \       -x.Log(n)                                                                 */
/*                                      zeta(z) =  /      e         .[cos(-y.Log(n)) + i.sin(-y.Log(n))]                             */
/*                                                /______                                                                            */
/*                                                                                                                                   */
/*                                                  n=1                                                                              */
/*                                                                                                                                   */
/*                  ou encore :                                                                                                      */
/*                                                                                                                                   */
/*                                               n=+infini                                                                           */
/*                                                _______                                                                            */
/*                                                \                                                                                  */
/*                                                 \       -R(z).Log(n)                                                              */
/*                                      zeta(z) =  /      e            .[cos(-I(z).Log(n)) + i.sin(-I(z).Log(n))]                    */
/*                                                /______                                                                            */
/*                                                                                                                                   */
/*                                                  n=1                                                                              */
/*                                                                                                                                   */
/*                  et nous nous contenterons des 'N' premiers termes de la suite,                                                   */
/*                  c'est-a-dire que nous n'irons pas jusqu'a l'infini...                                                            */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    La fonction 'zeta' de Riemann possede un                                                                       */
/*                  pole de residu 1 : le nombre z=1. Elle possede                                                                   */
/*                  une infinite de zeros "triviaux" qui sont les                                                                    */
/*                  nombres entiers negatifs et pairs. Elle possede                                                                  */
/*                  aussi une infinite de zeros non triviaux de la                                                                   */
/*                  forme :                                                                                                          */
/*                                                                                                                                   */
/*                                           1                                                                                       */
/*                                      z = --- + h.i                                                                                */
/*                                           2                                                                                       */
/*                                                                                                                                   */
/*                  sachant que le fait que la partie Reelle soit                                                                    */
/*                  constante (et egale a 1/2) constitue ce que l'on                                                                 */
/*                  appelle l'hypothese de Riemann (non encore demontree                                                             */
/*                  a la date de 19990607172302). Voici les 6 premieres                                                              */
/*                  valeurs positives de 'h' :                                                                                       */
/*                                                                                                                                   */
/*                                      14.134725...                                                                                 */
/*                                      21.02...                                                                                     */
/*                                      25.01...                                                                                     */
/*                                      30.42...                                                                                     */
/*                                      32.93...                                                                                     */
/*                                      37.58...                                                                                     */
/*                                                                                                                                   */
/*                  la dixieme etant egale a 49.773832...                                                                            */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    Donnons quelques valeurs particulieres de                                                                      */
/*                  la fonction 'zeta' de Riemann :                                                                                  */
/*                                                                                                                                   */
/*                                                    2.n-1                                                                          */
/*                                                   2        2.n                                                                    */
/*                                      zeta(2.n) = --------.p   B                                                                   */
/*                                                   (2.n)!       n                                                                  */
/*                                                                                                                                   */
/*                  ou 'Bn' designe les nombres de Bernoulli                                                                         */
/*                  et 'p' le nombre 'pi'. On a en particulier :                                                                     */
/*                                                                                                                                   */
/*                                                  2                                                                                */
/*                                                 p                                                                                 */
/*                                      zeta(2) = ----                                                                               */
/*                                                 6                                                                                 */
/*                                                                                                                                   */
/*                                                  4                                                                                */
/*                                                 p                                                                                 */
/*                                      zeta(4) = ----                                                                               */
/*                                                 90                                                                                */
/*                                                                                                                                   */
/*                    Enfin, on notera que :                                                                                         */
/*                                                                                                                                   */
/*                                      zeta(3) = 1.20205...                                                                         */
/*                                                                                                                                   */
/*                  ce qui va permettre de faire des tests de                                                                        */
/*                  validite...                                                                                                      */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionJ

DEFV(Common,DEFV(FonctionJ,POINTERJ(IJfonction_serie_zeta_dans_C(imageR
                                                                ,imageA
                                                                ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                                ,ARGUMENT_POINTERs(coin_haut_droite)
                                                                ,numero_de_la_premiere_iteration
                                                                ,nombre_d_iterations
                                                                 )
                                    )
                 )
     )
DEFV(Argument,DEFV(imageJ,imageR));
                                        /* Image Resultat a generer.                                                                 */
DEFV(Argument,DEFV(imageJ,imageA));
                                        /* Image Argument servant a initialiser le processus, ce qui autorise donc la programmation  */
                                        /* d'un calcul iteratif en un temps lineaire (voir par exemple 'v $xrc/zeta.02$K') ; dans    */
                                        /* ces conditions :                                                                          */
                                        /*                                                                                           */
                                        /* imageA : correspond a un nombre d'iterations inferieur a 'nombre_d_iterations',           */
                                        /* imageR : correspondra a 'nombre_d_iterations', et en fait seul les iterations "comprises" */
                                        /*          entre 'imageA' et 'imageR' seront calculees...                                   */
                                        /*                                                                                           */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Positive,numero_de_la_premiere_iteration));
                                        /* Numero de la premiere iteration demandee qui, notons le, n'est pas necessairement la      */
                                        /* valeur 'PREMIER_ELEMENT_DE_LA_FONCTION_ZETA_DE_RIEMANN', mais bien plutot une valeur      */
                                        /* superieure, ce qui permet la mise en place de calculs "progressifs" (voir a ce propos     */
                                        /* les commentaires de 'imageR' et 'imageA').                                                */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
                                        /* Nombre d'iterations demande. Par contre 'nombre_d_iterations' lui est compte a partir     */
                                        /* de 'PREMIER_ELEMENT_DE_LA_FONCTION_ZETA_DE_RIEMANN', sachant, bien entendu, que les       */
                                        /* premieres iterations ne seront pas obligatoirement calculees, car elles pourront etre     */
                                        /* recuperees d'un calcul anterieur...                                                       */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_QUELCONQUE_DANS_C
     /*..............................................................................................................................*/
                                        /* ATTENTION, on ne fait pas :                                                               */
                                        /*                                                                                           */
                                        /*                  DEFV(complexe,valeur_initiale);                                          */
                                        /*                  Cegal(valeur_initiale,C_____nombre_complexe__0__0);                      */
                                        /*                  CALS(IJinitialisation(imageR,ADRESSE(valeur_initiale)));                 */
                                        /*                                                                                           */
                                        /* au cas ou les images 'imageA' et 'imageR' seraient equivalentes...                        */

     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     Test(IFLE(X_COIN_BAS_GAUCHE,FU))
          Bblock
          PRINT_ATTENTION("la fenetre de calcul coupe la droite x=1, la serie ne converge donc pas dans toute la fenetre");
                                        /* A ce propos, 'v $ximcf/operator$FON fFCzeta_sommation_Euler_MacLaurin' qui propose un     */
                                        /* prolongement analytique de la serie utilisee ici, et qui semble fonctionner correctement. */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     begin_image
          Bblock
          F_ITERATION_QUELCONQUE_DANS_C(PREMIER_ELEMENT_DE_LA_FONCTION_ZETA_DE_RIEMANN
                                       ,numero_de_la_premiere_iteration
                                       ,BLOC(Bblock
                                             INITIALISATION_DU_POINT_COURANT_DANS_C;
                                        /* Initialisation du "point Courant" 'C'.                                                    */
                                             Cegal(element_courant_de_la_suite_Pn
                                                  ,loadJ_point(imageA
                                                              ,X,Y
                                                               )
                                                   );
                                        /* Initialisation de l'approximation de la fonction 'zeta(c)'. Par exemple lorsque l'on      */
                                        /* sera sur la premiere iteration :                                                          */
                                        /*                                                                                           */
                                        /* numero_de_la_premiere_iteration == PREMIER_ELEMENT_DE_LA_FONCTION_ZETA_DE_RIEMANN         */
                                        /*                                                                                           */
                                        /* on fera en general (voir 'Ifonction_serie_zeta_dans_C(...)') :                            */
                                        /*                                                                                           */
                                        /*                  zeta(C) = 0                                                              */
                                        /*                                                                                           */
                                        /* Pour les iterations suivantes, on pourra ainsi cumuler les resultats des iterations       */
                                        /* precedentes...                                                                            */
                                             Eblock
                                             )
                                       ,BLOC(Bblock
                                             DEFV(Float,INIT(moins_Log_de_n,NEGA(LOGX(numero_de_l_iteration))));
                                        /* Oppose du logarithme neperien du numero d'iteration courant 'n'.                          */
                                             DEFV(complexe,point_manoeuvre_1);
                                             DEFV(complexe,point_manoeuvre_2);
                                        /* Points complexes de maneuvre lors de l'iteration.                                         */

                                             Cnegation(point_manoeuvre_1
                                                      ,point_courant
                                                       );
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  z  = -z = -(x + i.y)                                                     */
                                        /*                   1                                                                       */
                                        /*                                                                                           */
                                        /* ou {x,y} designe le nombre complexe 'C' courant.                                          */

                                             aCexponentielle(point_manoeuvre_2
                                                            ,numero_de_l_iteration
                                                            ,point_manoeuvre_1
                                                             );
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                        -x.Log(n)                                                          */
                                        /*                  z  = e         .[cos(-y.Log(n)) + i.sin(-y.Log(n))]                      */
                                        /*                   2                                                                       */
                                        /*                                                                                           */
                                        /* ATTENTION, on notera de plus que pour les valeurs de 'x' negatives, l'exponentielle       */
                                        /* ci-dessus peut prendre tres "facilement" des valeurs enormes. A titre d'illustration      */
                                        /* de cela, lorsque dans la fenetre de calcul, il y a des points d'abscisses negatives,      */
                                        /* c'est la colonne de points la plus a gauche (donc contenant en valeur absolue les plus    */
                                        /* grandes abscisses negatives) qui domine completement tout le reste du champ qui se        */
                                        /* retrouve (suite a la quantification en octets des niveaux) pratiquement uniforme, alors   */
                                        /* que cette colonne de gauche presente des "details". Cela peut se voir (et cela s'est vu   */
                                        /* le 19990602093737) avec le pave [-33,-31]x[-32,-30] ; on trouve alors les valeurs         */
                                        /* suivantes :                                                                               */
                                        /*                                                                                           */
                                        /*                            Zn=(0.000000,0.000000)                                         */
                                        /*                                                                                           */
                                        /*                  n=1                                                                      */
                                        /*                       -Log(n)=0.000000                                                    */
                                        /*                       {x,y}=(-33.000000,-32.000000)                                       */
                                        /*                            m2=(1.000000,0.000000)                                         */
                                        /*                            Zn=(1.000000,0.000000)                                         */
                                        /*                                                                                           */
                                        /*                  n=2                                                                      */
                                        /*                       -Log(n)=-0.693147                                                   */
                                        /*                       {x,y}=(-33.000000,-32.000000)                                       */
                                        /*                            m2=(-8436063190.993355,-1618583989.913671)                     */
                                        /*                            Zn=(-8436063189.993355,-1618583989.913671)                     */
                                        /*                                                                                           */
                                        /* ou 'm2' designe 'point_manoeuvre_2'...                                                    */

                                             aCsomme(element_courant_de_la_suite_Pn,element_courant_de_la_suite_Pn,point_manoeuvre_2);
                                        /* Et enfin calcul iteratif de l'approximation de la fonction 'zeta(C)' :                    */
                                        /*                                                                                           */
                                        /*                  zeta(C) = zeta(C) + z                                                    */
                                        /*                                       2                                                   */
                                        /*                                                                                           */
                                             Eblock
                                             )
                                       ,NE_PAS_TESTER_L_UNDERFLOW_ET_L_OVERFLOW
                                        );
          Eblock
     end_image

     RETIJ(imageR);
     Eblock

EFonctionJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' zeta '   D E   R I E M A N N                                                 */
/*        D A N S   L E   P L A N   C O M P L E X E   A V E C   L A   S E R I E   D ' E U L E R                                      */
/*        S U I V A N T   U N   P R O C E S S U S   N O N   O P T I M I S E  :                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Voir la fonction 'IJfonction_serie_zeta_dans_C(...)',                                                          */
/*                  avec, il faut le noter, une petite difference au niveau                                                          */
/*                  des temps de calcul. En effet, lorsque l'on cherche a                                                            */
/*                  faire plusieurs calculs de suite en augmentant le nombre                                                         */
/*                  d'iterations :                                                                                                   */
/*                                                                                                                                   */
/*                  IJfonction_serie_zeta_dans_C(...)                 : peut exploiter les iterations anterieures, alors que         */
/*                  IFfonction_serie_zeta_dans_C(...)                 : refait systematiquement tous les calculs, c'est-a-dire a     */
/*                                                                      partir de 'PREMIER_ELEMENT_DE_LA_FONCTION_ZETA_DE_RIEMANN'   */
/*                                                                      et donne des images "non standard".                          */
/*                  Ifonction_serie_zeta_dans_C(...)                  : refait systematiquement tous les calculs, c'est-a-dire a     */
/*                                                                      partir de 'PREMIER_ELEMENT_DE_LA_FONCTION_ZETA_DE_RIEMANN'   */
/*                                                                      et donne des images "standard".                              */
/*                                                                                                                                   */
/*                  On verra a ce propos 'v $xrc/zeta.01$K' qui "tourne" en                                                          */
/*                  un temps proportionnel au carre du nombre d'iterations,                                                          */
/*                  alors que 'v $xrc/zeta.02$K' tourne en un temps lineaire...                                                      */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   " N O N - S T A N D A R D "   D E   L A   F O N C T I O N   ' zeta '   D E   R I E M A N N                   */
/*        C O M P L E X E  :                                                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,POINTERF(IFfonction_serie_zeta_dans_C(partie_reelle_de_la_fonction_zeta_de_Riemann
                                                                ,partie_imaginaire_de_la_fonction_zeta_de_Riemann
                                                                ,module_de_la_fonction_zeta_de_Riemann
                                                                ,phase_de_la_fonction_zeta_de_Riemann
                                                                ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                                ,ARGUMENT_POINTERs(coin_haut_droite)
                                                                ,nombre_d_iterations
                                                                 )
                                    )
                 )
     )
DEFV(Argument,DEFV(imageF,partie_reelle_de_la_fonction_zeta_de_Riemann));
DEFV(Argument,DEFV(imageF,partie_imaginaire_de_la_fonction_zeta_de_Riemann));
DEFV(Argument,DEFV(imageF,module_de_la_fonction_zeta_de_Riemann));
DEFV(Argument,DEFV(imageF,phase_de_la_fonction_zeta_de_Riemann));
                                        /* Quatre images Resultat a generer qui donne respectivement la partie Reelle, la partie     */
                                        /* Imaginaire, le Module et la Phase d'une approximation de la fonction Zeta de Riemann.     */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
                                        /* Nombre d'iterations demande.                                                              */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BDEFV(imageJ,fonction_zeta_de_Riemann);
                                        /* Valeur de la fonction 'zeta' de Riemann dans la fenetre Argument sous la forme d'une      */
                                        /* image Complexe.                                                                           */
     DEFV(complexe,valeur_initiale);
                                        /* Valeur initiale de l'image Resultat.                                                      */
     /*..............................................................................................................................*/
     Cegal(valeur_initiale,C_____nombre_complexe__0__0);
     CALS(IJinitialisation(fonction_zeta_de_Riemann,ADRESSE(valeur_initiale)));
                                        /* Initialisation du processus iteratif sur :                                                */
                                        /*                                                                                           */
                                        /*                  zeta(C) = 0                                                              */
                                        /*                                                                                           */

     CALS(IJfonction_serie_zeta_dans_C(fonction_zeta_de_Riemann
                                      ,fonction_zeta_de_Riemann
                                      ,coin_bas_gauche
                                      ,coin_haut_droite
                                      ,PREMIER_ELEMENT_DE_LA_FONCTION_ZETA_DE_RIEMANN
                                      ,nombre_d_iterations
                                       )
          );
                                        /* Calcul de la valeur de la fonction 'zeta' de Riemann en "complexe" depuis la toute        */
                                        /* premiere iteration...                                                                     */

     CALS(Icomplexe_reelle(partie_reelle_de_la_fonction_zeta_de_Riemann,fonction_zeta_de_Riemann));
     CALS(Icomplexe_imaginaire(partie_imaginaire_de_la_fonction_zeta_de_Riemann,fonction_zeta_de_Riemann));
                                        /* Recuperation des parties Reelles et Imaginaires de la fonction 'zeta' de Riemann,         */
     CALS(Iconversion_XY_RT(module_de_la_fonction_zeta_de_Riemann,phase_de_la_fonction_zeta_de_Riemann
                           ,partie_reelle_de_la_fonction_zeta_de_Riemann,partie_imaginaire_de_la_fonction_zeta_de_Riemann
                            )
          );
                                        /* Puis calcul du Module et de la Phase dans [0,2.PI].                                       */

     EDEFV(imageJ,fonction_zeta_de_Riemann);
                                        /* Valeur de la fonction 'zeta' de Riemann dans la fenetre Argument.                         */

     RETIF(module_de_la_fonction_zeta_de_Riemann);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   " S T A N D A R D "   D E   L A   F O N C T I O N   ' zeta '   D E   R I E M A N N   C O M P L E X E  :      */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,POINTERp(Ifonction_serie_zeta_dans_C(partie_reelleR
                                                               ,partie_imaginaireR
                                                               ,moduleR
                                                               ,phaseR
                                                               ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                               ,ARGUMENT_POINTERs(coin_haut_droite)
                                                               ,nombre_d_iterations
                                                                )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,partie_reelleR));
DEFV(Argument,DEFV(image,partie_imaginaireR));
DEFV(Argument,DEFV(image,moduleR));
DEFV(Argument,DEFV(image,phaseR));
                                        /* Quatre images Resultat a generer qui donne respectivement la partie Reelle, la partie     */
                                        /* Imaginaire, le Module et la Phase d'une approximation de la fonction Zeta de Riemann.     */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Positive,nombre_d_iterations));
                                        /* Nombre d'iterations demande.                                                              */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BDEFV(imageJ,fonction_zeta_de_Riemann);
                                        /* Valeur de la fonction 'zeta' de Riemann dans la fenetre Argument sous la forme d'une      */
                                        /* image Complexe.                                                                           */
     BDEFV(imageF,partie_reelle_de_la_fonction_zeta_de_Riemann);
     BDEFV(imageF,partie_imaginaire_de_la_fonction_zeta_de_Riemann);
                                        /* Valeur de la fonction 'zeta' de Riemann dans la fenetre Argument sous la forme de deux    */
                                        /* images Flottantes donnant la partie Reelle et la partie Imaginaire.                       */
     BDEFV(imageF,module_de_la_fonction_zeta_de_Riemann);
     BDEFV(imageF,phase_de_la_fonction_zeta_de_Riemann);
                                        /* Valeur de la fonction 'zeta' de Riemann dans la fenetre Argument sous la forme de deux    */
                                        /* images Flottantes donnant le Module et la Phase.                                          */
     /*..............................................................................................................................*/
     CALS(IFfonction_serie_zeta_dans_C(partie_reelle_de_la_fonction_zeta_de_Riemann
                                      ,partie_imaginaire_de_la_fonction_zeta_de_Riemann
                                      ,module_de_la_fonction_zeta_de_Riemann
                                      ,phase_de_la_fonction_zeta_de_Riemann
                                      ,coin_bas_gauche
                                      ,coin_haut_droite
                                      ,nombre_d_iterations
                                       )
          );
                                        /* Calcul de la valeur de la fonction 'zeta' de Riemann en "complexe" depuis la toute        */
                                        /* premiere iteration.                                                                       */

     CALS(Ifloat_std_avec_renormalisation(partie_reelleR,partie_reelle_de_la_fonction_zeta_de_Riemann));
     CALS(Ifloat_std_avec_renormalisation(partie_imaginaireR,partie_imaginaire_de_la_fonction_zeta_de_Riemann));
     CALS(Ifloat_std_avec_renormalisation(moduleR,module_de_la_fonction_zeta_de_Riemann));
     CALS(Ifloat_std_avec_renormalisation(phaseR,phase_de_la_fonction_zeta_de_Riemann));
                                        /* Et enfin, conversion de la fonction 'zeta' de Riemann en quatre images "standards"...     */

     EDEFV(imageF,phase_de_la_fonction_zeta_de_Riemann);
     EDEFV(imageF,module_de_la_fonction_zeta_de_Riemann);
                                        /* Valeur de la fonction 'zeta' de Riemann dans la fenetre Argument sous la forme de deux    */
                                        /* images Flottantes donnant le Module et la Phase.                                          */
     EDEFV(imageF,partie_imaginaire_de_la_fonction_zeta_de_Riemann);
     EDEFV(imageF,partie_reelle_de_la_fonction_zeta_de_Riemann);
                                        /* Valeur de la fonction 'zeta' de Riemann dans la fenetre Argument sous la forme de deux    */
                                        /* images Flottantes.                                                                        */
     EDEFV(imageJ,fonction_zeta_de_Riemann);
                                        /* Valeur de la fonction 'zeta' de Riemann dans la fenetre Argument.                         */

     RETI(moduleR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' zeta '   D E   R I E M A N N                                                 */
/*        D A N S   L E   P L A N   C O M P L E X E   A V E C   L E   P R O L O N G E M E N T   A N A L Y T I Q U E  :               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Forme generale :                                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  ...###%%%%OOOOOoooooooo#.....                                                                                    */
/*                  -......###%%%%%OOOOOO%%%########################################                                                 */
/*                  :---......#####%%%%%%%%#########################################                                                 */
/*                  oo::---.......##################################################                                                 */
/*                  OOoo::---.........##############################################                                                 */
/*                  %%OOoo::---.............   #####################################                                                 */
/*                  #%%OOooo::---.................                                                                                   */
/*                  .##%%OOoo:::---.................                                                                                 */
/*                  ...#%%OOoo:::--..................                                                                                */
/*                  ....#%%OOoo::---................                                                                                 */
/*                  --...#%%OOo:::--.............                                                                                    */
/*                  :-...##%OOoo:---........ #######################################                                                 */
/*                  o:-...#%%Ooo:--.....############################################                                                 */
/*                  o::-..##%Ooo:-....##############################################                                                 */
/*                  Oo:-...#%Oo::-.. #%%OOO%%#######################################                                                 */
/*                   ::::    ::::     ::::::                                                                                         */
/*                  -:oO%##..-:ooO%##...--..........                                                                                 */
/*                  :ooO%#...-::oOO%##...............                                                                                */
/*                  :oO%%#...-::oOO%%### ............                                                                                */
/*                  oOO%#...--::ooOO%%%###### ...                                                                                    */
/*                  OO%##...--::ooOO%%%#############################################                                                 */
/*                  O%##...--::ooOOO%%%%############################################                                                 */
/*                  %##...--::oooOOO%%%%############################################                                                 */
/*                  #....--::oooOOO%%%%#############################################                                                 */
/*                  ...---::ooOOOO%%%%##############################################                                                 */
/*                  ..--::oooOOO%%%%###########                                                                                      */
/*                  --::oooOO%%%%##### .............                                                                                 */
/*                  ::ooOOO%%%####...................                                                                                */
/*                  ooOO%%%###.......................                                                                                */
/*                  O%%%###.........-----..........                                                                                  */
/*                  %## .......-----:::::::.########################################                                                 */
/*                  ......----:::::ooooooOO%########################################                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    Il s'agit de la phase calculee dans la                                                                         */
/*                  fenetre [-10.0,+20.0]x[-15.0,+15.0] a                                                                            */
/*                  l'aide du programme 'v $xrc/zeta.21$K'.                                                                          */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionJ

DEFV(Common,DEFV(Logical,SINT(IJfonction_prolongement_analytique_zeta_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_prolongement_analytique_zeta_dans_C_____simp,FAUX)));
                                        /* Possibilite introduite le 20120121174948 et completee le 20120124091005...                */

DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_prolongement_analytique_zeta_dans_C(imageR    /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                                                          )         /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCzeta_sommation_Euler_MacLaurin                        /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCzeta_sommation_Euler_MacLaurin_____valeur             /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCzeta_sommation_Euler_MacLaurin_____Halpha             /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCzeta_sommation_Euler_MacLaurin_____Hbeta_             /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCzeta_sommation_Euler_MacLaurin_____Hgamma             /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCzeta_sommation_Euler_MacLaurin_____Hdelta             /* Common,DEFV(Fonction,) :   \  */
                                          ,"zeta"                                                   /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_prolongement_analytique_zeta_dans_C_____edit  /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_prolongement_analytique_zeta_dans_C_____simp  /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' cos '   C O M P L E X E  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionJ

DEFV(Common,DEFV(Logical,SINT(IJfonction_cosinus_circulaire_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_cosinus_circulaire_dans_C_____simp,FAUX)));
                                        /* Possibilite introduite le 20120121174948 et completee le 20120124091005...                */

DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_cosinus_circulaire_dans_C(imageR              /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                                                )                   /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCcosinus_circulaire                                    /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCcosinus_circulaire_____valeur                         /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCcosinus_circulaire_____Halpha                         /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCcosinus_circulaire_____Hbeta_                         /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCcosinus_circulaire_____Hgamma                         /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCcosinus_circulaire_____Hdelta                         /* Common,DEFV(Fonction,) :   \  */
                                          ,"cos"                                                    /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_cosinus_circulaire_dans_C_____edit            /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_cosinus_circulaire_dans_C_____simp            /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' sin '   C O M P L E X E  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionJ

DEFV(Common,DEFV(Logical,SINT(IJfonction_sinus_circulaire_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_sinus_circulaire_dans_C_____simp,FAUX)));
                                        /* Possibilite introduite le 20120121174948 et completee le 20120124091005...                */

DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_sinus_circulaire_dans_C(imageR                /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                                              )                     /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCsinus_circulaire                                      /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCsinus_circulaire_____valeur                           /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCsinus_circulaire_____Halpha                           /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCsinus_circulaire_____Hbeta_                           /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCsinus_circulaire_____Hgamma                           /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCsinus_circulaire_____Hdelta                           /* Common,DEFV(Fonction,) :   \  */
                                          ,"sin"                                                    /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_sinus_circulaire_dans_C_____edit              /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_sinus_circulaire_dans_C_____simp              /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' tg '   C O M P L E X E  :                                                    */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionJ

DEFV(Common,DEFV(Logical,SINT(IJfonction_tangente_circulaire_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_tangente_circulaire_dans_C_____simp,FAUX)));
                                        /* Possibilite introduite le 20120121174948 et completee le 20120124091005...                */

DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_tangente_circulaire_dans_C(imageR             /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                                                 )                  /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCtangente_circulaire                                   /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCtangente_circulaire_____valeur                        /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCtangente_circulaire_____Halpha                        /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCtangente_circulaire_____Hbeta_                        /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCtangente_circulaire_____Hgamma                        /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCtangente_circulaire_____Hdelta                        /* Common,DEFV(Fonction,) :   \  */
                                          ,"tg"                                                     /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_tangente_circulaire_dans_C_____edit           /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_tangente_circulaire_dans_C_____simp           /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' ch '   C O M P L E X E  :                                                    */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionJ

DEFV(Common,DEFV(Logical,SINT(IJfonction_cosinus_hyperbolique_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_cosinus_hyperbolique_dans_C_____simp,FAUX)));
                                        /* Possibilite introduite le 20120121174948 et completee le 20120124091005...                */

DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_cosinus_hyperbolique_dans_C(imageR            /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                                                  )                 /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCcosinus_hyperbolique                                  /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCcosinus_hyperbolique_____valeur                       /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCcosinus_hyperbolique_____Halpha                       /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCcosinus_hyperbolique_____Hbeta_                       /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCcosinus_hyperbolique_____Hgamma                       /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCcosinus_hyperbolique_____Hdelta                       /* Common,DEFV(Fonction,) :   \  */
                                          ,"ch"                                                     /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_cosinus_hyperbolique_dans_C_____edit          /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_cosinus_hyperbolique_dans_C_____simp          /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' sh '   C O M P L E X E  :                                                    */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionJ

DEFV(Common,DEFV(Logical,SINT(IJfonction_sinus_hyperbolique_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_sinus_hyperbolique_dans_C_____simp,FAUX)));
                                        /* Possibilite introduite le 20120121174948 et completee le 20120124091005...                */

DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_sinus_hyperbolique_dans_C(imageR              /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                                                )                   /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCsinus_hyperbolique                                    /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCsinus_hyperbolique_____valeur                         /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCsinus_hyperbolique_____Halpha                         /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCsinus_hyperbolique_____Hbeta_                         /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCsinus_hyperbolique_____Hgamma                         /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCsinus_hyperbolique_____Hdelta                         /* Common,DEFV(Fonction,) :   \  */
                                          ,"sh"                                                     /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_sinus_hyperbolique_dans_C_____edit            /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_sinus_hyperbolique_dans_C_____simp            /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' th '   C O M P L E X E  :                                                    */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionJ

DEFV(Common,DEFV(Logical,SINT(IJfonction_tangente_hyperbolique_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_tangente_hyperbolique_dans_C_____simp,FAUX)));
                                        /* Possibilite introduite le 20120121174948 et completee le 20120124091005...                */

DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_tangente_hyperbolique_dans_C(imageR           /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                                                   )                /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCtangente_hyperbolique                                 /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCtangente_hyperbolique_____valeur                      /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCtangente_hyperbolique_____Halpha                      /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCtangente_hyperbolique_____Hbeta_                      /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCtangente_hyperbolique_____Hgamma                      /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCtangente_hyperbolique_____Hdelta                      /* Common,DEFV(Fonction,) :   \  */
                                          ,"th"                                                     /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_tangente_hyperbolique_dans_C_____edit         /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_tangente_hyperbolique_dans_C_____simp         /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' exp '   C O M P L E X E  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionJ

DEFV(Common,DEFV(Logical,SINT(IJfonction_exponentielle_neperienne_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_exponentielle_neperienne_dans_C_____simp,FAUX)));
                                        /* Possibilite introduite le 20120121174948 et completee le 20120124091005...                */

DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_exponentielle_neperienne_dans_C(imageR        /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                                                      )             /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCexponentielle_neperienne                              /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCexponentielle_neperienne_____valeur                   /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCexponentielle_neperienne_____Halpha                   /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCexponentielle_neperienne_____Hbeta_                   /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCexponentielle_neperienne_____Hgamma                   /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCexponentielle_neperienne_____Hdelta                   /* Common,DEFV(Fonction,) :   \  */
                                          ,"exp"                                                    /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_exponentielle_neperienne_dans_C_____edit      /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_exponentielle_neperienne_dans_C_____simp      /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20090303145735...                                                  */

EFonctionJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' log '   C O M P L E X E  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionJ

DEFV(Common,DEFV(Logical,SINT(IJfonction_logarithme_dans_C_____edit,FAUX)));
DEFV(Common,DEFV(Logical,SINT(IJfonction_logarithme_dans_C_____simp,FAUX)));
                                        /* Possibilite introduite le 20120121174948 et completee le 20120124091005...                */

DEFV(Common,GENERE__FonctionJ_I_FONCTION_C(IJfonction_logarithme_dans_C(imageR                      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                                        )                           /* Common,DEFV(Fonction,) :   \  */
                                          ,fFClogarithme                                            /* Common,DEFV(Fonction,) :   \  */
                                          ,fFClogarithme_____valeur                                 /* Common,DEFV(Fonction,) :   \  */
                                          ,fFClogarithme_____Halpha                                 /* Common,DEFV(Fonction,) :   \  */
                                          ,fFClogarithme_____Hbeta_                                 /* Common,DEFV(Fonction,) :   \  */
                                          ,fFClogarithme_____Hgamma                                 /* Common,DEFV(Fonction,) :   \  */
                                          ,fFClogarithme_____Hdelta                                 /* Common,DEFV(Fonction,) :   \  */
                                          ,"log"                                                    /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_logarithme_dans_C_____edit                    /* Common,DEFV(Fonction,) :   \  */
                                          ,IJfonction_logarithme_dans_C_____simp                    /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionJ

#undef    GENERE__FonctionJ_I_FONCTION_C

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T E U R   D E   F O N C T I O N S   I T E R A N T                                                              */
/*        U N E   F O N C T I O N   D A N S   L E   P L A N   C O M P L E X E  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#pragma   xcg__gen_ext_Z__gen_Fonction_SE__GENERE__Fonction                     GENERE__FonctionP_I_ITERAT_F_C          POINTERp
                                        /* Introduit le 20040520121238.                                                              */
#define   GENERE__FonctionP_I_ITERAT_F_C(nom_et_arguments_de_la_fonction,Nfonction,Vfonction,seuil_du_carre_du_module)                  \
                                        /* ATTENTION : le nom de la fonction est suivi de ses arguments pour des raisons liees       */ \
                                        /* a la recuperation automatique des fichiers d'arguments ; on trouvera donc :               */ \
                                        /*                                                                                           */ \
                                        /*        GENERE__FonctionP_FONCTION_C(nom_et_arguments_de_la_fonction,Nfonction,Vfonction)  */ \
                                        /*                                                                                           */ \
                                        /* D'autre part, la fonction 'Nfonction' devra etre de nom '__...' afin que son nombre       */ \
                                        /* d'arguments ne soit pas verifie ('v $xcg/gen.arg$D/debut$I __f').                         */ \
DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction))                                                                               \
                                        /* ATTENTION, il ne faut pas ecrire :                                                        */ \
                                        /*                                                                                           */ \
                                        /*        DEFV(Common,DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction)))             */ \
                                        /*                                                                                           */ \
                                        /* mais :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*        DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction))                          */ \
                                        /*                                                                                           */ \
                                        /* puisqu'en effet la directive 'Common' est utilisee lors de l'appel par :                  */ \
                                        /*                                                                                           */ \
                                        /*        DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(...))                                   */ \
                                        /*                                                                                           */ \
                                        /* Actuellement cette redondance ne serait pas genante, mais plus tard...                    */ \
DEFV(Argument,DEFV(image,imageR));                                                                                                      \
                                        /* Image Resultat a generer.                                                                 */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));                                                                                \
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));                                                                               \
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */ \
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));                                                                              \
                                        /* Nombre maximal d'iterations demande.                                                      */ \
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));                                                                         \
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */ \
                                        /* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle))                    */ \
                                        /* de Z  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX').  */ \
                                        /*     n                                                                                     */ \
/*-----------------------------------------------------------------------------------------------------------------------------------*/ \
     Bblock                                                                                                                             \
     BVARIABLES_F_ITERATION_DANS_C                                                                                                      \
     /*..............................................................................................................................*/ \
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;                                                         \
                                                                                                                                        \
     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;                                            \
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */ \
                                        /* 20061219090342).                                                                          */ \
                                                                                                                                        \
     gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;                                                                                     \
                                        /* Introduit le 20190314183222...                                                            */ \
                                                                                                                                        \
     begin_image                                                                                                                        \
          Bblock                                                                                                                        \
          gF_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(seuil_du_carre_du_module)                                                  \
                             ,BLOC(Bblock                                                                                               \
                                   INITIALISATION_DU_POINT_COURANT_DANS_C;                                                              \
                                   Eblock                                                                                               \
                                   )                                                                                                    \
                                        /* Introduit le 20091012111043...                                                            */ \
                             ,BLOC(Bblock                                                                                               \
                                   Cegal(suite_point,point_courant);                                                                    \
                                        /* Initialisation de la suite des nombres complexes sur le "point Courant" 'C',              */ \
                                        /* soit :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  Z  = C                                                                   */ \
                                        /*                   0                                                                       */ \
                                        /*                                                                                           */ \
                                   EGAL(nombre_courant_d_iterations,UN);                                                                \
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */ \
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */ \
                                        /* valeur non nulle soit rangee...                                                           */ \
                                   Eblock                                                                                               \
                                   )                                                                                                    \
                             ,BLOC(VIDE;                                                                                                \
                                   )                                                                                                    \
                             ,BLOC(Bblock                                                                                               \
                                   CALS(Nfonction(suite_point));                                                                        \
                                   Cegal(suite_point,Vfonction);                                                                        \
                                        /* Et iteration de la fonction :                                                             */ \
                                        /*                                                                                           */ \
                                        /*                  Z  = Nfonction(Z )                                                       */ \
                                        /*                   n              n                                                        */ \
                                        /*                                                                                           */ \
                                        /* en notant qu'il est preferable de ne pas ecrire :                                         */ \
                                        /*                                                                                           */ \
                                        /*                  Cegal(suite_point,Nfonction(suite_point));                               */ \
                                        /*                                                                                           */ \
                                        /* car cette derniere ecriture, de par la programmation de 'v $ximcd/operator$FON Cegal',    */ \
                                        /* provoquerait deux fois le calcul de la fonction 'Nfonction(suite_point)'...               */ \
                                   Eblock                                                                                               \
                                   )                                                                                                    \
                             ,BLOC(VIDE;                                                                                                \
                                   )                                                                                                    \
                                        /* Introduit le 20150225152454...                                                            */ \
                              );                                                                                                        \
          Eblock                                                                                                                        \
     end_image                                                                                                                          \
                                                                                                                                        \
     RETI(imageR);                                                                                                                      \
     Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' gamma '                                                                */
/*        D A N S   L E   P L A N   C O M P L E X E   A V E C   L E   P R O L O N G E M E N T   A N A L Y T I Q U E  :               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Forme generale :                                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                O:-..%Oo:-..#%Oo:o#-...-:ooO%%#...                                                 */
/*                                               :..#Oo:-..%Oo:-... # :ooO%##...-::o                                                 */
/*                                              .#%o:-.#%Oo:-..#% -#oO%#...--:ooO%%#                                                 */
/*                                             %Oo-..%Oo:-.#%Oo: . ....-:ooO%%##...-                                                 */
/*                                           Oo:..%Oo:..#%Oo:-...   :oOO%# ...--:ooO                                                 */
/*                                          :-.#Oo:..#Oo:-..#%O##.o%#...--::oOO%%##.                                                 */
/*                                        :. %o:..%Oo:..#%Oo:-o###.--:ooO%%##....--:                                                 */
/*                                      -.#O:-.#Oo-..%Oo:-..#O:.:oO%%##...--::oooOO%                                                 */
/*                                    ..%O:.#%o-.#%O:-..%Ooo ::%....-::ooOO%%###....                                                 */
/*                                   .%o-.%O:. %o:..#Oo:-..: o% ooOO%##.....---:::oo                                                 */
/*                                 .%o-.%o-.%O:..%o:-.#%Oo .::.#...--:::ooOOOO%%%###                                                 */
/*                              :.%o-.%o-.%o-.%o-.#%o:-... -Oo ooOO%%###.......-----                                                 */
/*                            :.#O-.%o.#O:.#O:.#O:-.#Oo :-o#O-...----:::oooooOOOOO%%                                                 */
/*                          O-.O:.%o-#O:.%o-.%:. %o-..:.%.#. OO%%%%#####............                                                 */
/*                        O:.%o-#O-.O:.%o-#O:.%o o-%:-#  .#. --:::::::::oooooooooooo                                                 */
/*                       o:#O: #:.#:.#::#o:#OO   O #O##  #%.%.......................                                                 */
/*                        .:%.:O -o#.o%.:O.-o#.: .% o  ##-.. OOOoooooooooo::::::::::                                                 */
/*                          -o#.o%.:O#-o%.:O#.:O#.:O:. #.:O. ---......... #######%%%                                                 */
/*                            :O.-o%.:O#-o%.-o%.-:O#..- #:  o##%%%OOOoooo:::::------                                                 */
/*                              :%.-O#.:O#.:O#.:o%..-oO%#.--:# ::--......###%%%%OOOO                                                 */
/*                                :%.:O#.:O%.-o%#.-oO%..-:o: .o.##%%OOoo:::---......                                                 */
/*                                  O#.:o%.-o%#.-oO#..:oO%#.#O: ::--....##%%%OOoooo:                                                 */
/*                                    O%.-o%#.:o%#.-:O%#..-: ..o.#%%OOo::---.... ##%                                                 */
/*                                      o%.-:O%.-:o%#.-:oO%#. -.%:--...##%%OOoo::---                                                 */
/*                                        o%#.-oO#.-:oO%..-:oOo##:%OOo::--...##%%OOO                                                 */
/*                                         .:O%..:oO#..-oO%#..-#-. ...#%%Ooo::--....                                                 */
/*                                           .:oO#.-:oO#..-:oO%#-#- o:--...#%%OOoo::                                                 */
/*                                             .-:o%#.-:oO%#..-: :o-##%Ooo:--...##%%                                                 */
/*                                              %..-:O%#..:oO%#.. -. -...#%OOo::--..                                                 */
/*                                               oO#..-oO%#..-:oO%%   oo:-...#%%OOo:                                                 */
/*                                                -:O%#.-:oO%#..-:o:o#.#%Ooo:-...##%                                                 */
/*                                                 ..:oO%#.-:oO%#..-O #-..#%%Ooo:--.                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    Il s'agit de l'image 'v $xiirc/ITGA.11$Ph p=$xiP/dentscie.R4'                                                  */
/*                  calculee a l'aide du programme 'v $xrc/gamma.31$K'.                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_prolongement_analytique_gamma_dans_C_____seuil,FLOT(MILLE))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_prolongement_analytique_gamma_dans_C(imageR   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                                                           )        /* Common,DEFV(Fonction,) :   \  */
                                     ,fFCgamma_sommation_Euler_MacLaurin                            /* Common,DEFV(Fonction,) :   \  */
                                     ,fFCgamma_sommation_Euler_MacLaurin_____valeur                 /* Common,DEFV(Fonction,) :   \  */
                                     ,Iiteration_prolongement_analytique_gamma_dans_C_____seuil     /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' zeta '   D E   R I E M A N N                                           */
/*        D A N S   L E   P L A N   C O M P L E X E   A V E C   L E   P R O L O N G E M E N T   A N A L Y T I Q U E  :               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Forme generale :                                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  --...##%OOoo:::--......#####%%-:::::#o%-........................                                                 */
/*                  Oo::-....#%%OOooo::---......-o-o:::O.%O:########################                                                 */
/*                  #%%Ooo:--...##%%OOOoo::::---::::::::::#.#%%%%%%%%%%%%%%%%%%%%%%%                                                 */
/*                  ...#%%Ooo:--....##%%OOOoooo:-:::::::::O.oOOOOOOOOOOOOOOOOOOOOOOO                                                 */
/*                  ::-...#%%Ooo:--....###%%%O-.:::::::::::.%ooooooooooooooooooooooo                                                 */
/*                  %Oo:--...#%OOoo:--.....##O-%.::::::::::.:----:::::::::::::::::::                                                 */
/*                  .#%Ooo:-...#%%Ooo::--...::#%O::::::::%:o........................                                                 */
/*                  -..#%%Oo:--..##%OOo::--:%.o-o-:O::O:-o%:........................                                                 */
/*                  o:-..#%%Oo:--..##%OOo-#o::::::::::#%OOo-########################                                                 */
/*                  %Oo:-..#%%Oo:-...#::.::::::::::::::::#:o%%%%%%%%%%%%%%%%%%%%%%%%                                                 */
/*                  .#%Oo:-..#%Oo::o#O%#:::::::::::::::::.o#OOOOOOOOOOOOOOOOOOOOOOOO                                                 */
/*                  -..#%Oo:-..#:#:::::::::::::::::::::::-:%oooooooooooooooooooooooo                                                 */
/*                  o:-.#%Oo:-%:O:::::::::::::::::::::::::O#::::::::::::::::::::::::                                                 */
/*                  %o:-..#o::::::::::::::::::::::::::::::..%-----------------------                                                 */
/*                  .%Oo::.O::::::::::::::::::::::::::::::.OO.......................                                                 */
/*                  :#%:::::::::::::::::::::::::::::::o.............................                                                 */
/*                  #.-#-::::::::::::::::::::::::::::::::.#-:%%%%%%%%%%%%%%%%%%%%%%%                                                 */
/*                  .-:O%#:::::::::::::::::::::::::::::::::.-OOOOOOOOOOOOOOOOOOOOOOO                                                 */
/*                  :oO% .-:oO-o-:::::::::::::::::::::::::.-oooooooooooooooooooooooo                                                 */
/*                  O%#..-:oO%#.:.::::::::::::::::::::::::O:::::::::::::::::::::::::                                                 */
/*                  #..-:oO%#..-::oO.-.-:::::::::::::::::.:.------------------------                                                 */
/*                  .-:oO%#...-:oO%%#....:::::::::::::::..O:........................                                                 */
/*                  :oO%##..-:oOO%#...--:##-::::::::::.:-:o%........................                                                 */
/*                  O%#...-:oOO%#...--::ooO%.#-O:o:.:O:oOo.O########################                                                 */
/*                  #..--:oOO%#...--:ooOO%%%::#..::::::::-:o%%%%%%%%%%%%%%%%%%%%%%%%                                                 */
/*                  .-:ooO%##...-::ooOO%%##...o.::::::::::O#OOOooooooooooooooooooooo                                                 */
/*                  :oO%%#...--:ooOO%%##.....-o%:::::::::::-O:::::::::::::::::::::::                                                 */
/*                  O%#...--:ooOO%##.....---:::.:::::::::::.%-----------------------                                                 */
/*                  ...-::ooO%%##....--:::oooOOO%-::::::::-#........................                                                 */
/*                  -::oOO%##....--::oooOOO%%%%#o-O-.::O.-:O........................                                                 */
/*                  oO%%#....--::ooOO%%%####....#.oO::::o:.%.#######################                                                 */
/*                  ##...--::ooOO%%##.......----O.::::::::::%%%%%%%%%%%%%%%%%%%%%%%%                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    Il s'agit de l'image 'v $xiirc/ITZE.11$Ph p=$xiP/dentscie.R4'                                                  */
/*                  calculee a l'aide du programme 'v $xrc/zeta.31$K'.                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_prolongement_analytique_zeta_dans_C_____seuil,FLOT(MILLE))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_prolongement_analytique_zeta_dans_C(imageR    /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                                                          )         /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCzeta_sommation_Euler_MacLaurin                        /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCzeta_sommation_Euler_MacLaurin_____valeur             /* Common,DEFV(Fonction,) :   \  */
                                          ,Iiteration_prolongement_analytique_zeta_dans_C_____seuil /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' cos '   C O M P L E X E  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_cosinus_circulaire_dans_C_____seuil,FLOT(MILLE))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_cosinus_circulaire_dans_C(imageR              /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                                                )                   /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCcosinus_circulaire                                    /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCcosinus_circulaire_____valeur                         /* Common,DEFV(Fonction,) :   \  */
                                          ,Iiteration_cosinus_circulaire_dans_C_____seuil           /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' sin '   C O M P L E X E  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_sinus_circulaire_dans_C_____seuil,FLOT(MILLE))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_sinus_circulaire_dans_C(imageR                /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                                              )                     /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCsinus_circulaire                                      /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCsinus_circulaire_____valeur                           /* Common,DEFV(Fonction,) :   \  */
                                          ,Iiteration_sinus_circulaire_dans_C_____seuil             /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' tg '   C O M P L E X E  :                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_tangente_circulaire_dans_C_____seuil,FDEUX)));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_tangente_circulaire_dans_C(imageR             /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                                                 )                  /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCtangente_circulaire                                   /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCtangente_circulaire_____valeur                        /* Common,DEFV(Fonction,) :   \  */
                                          ,Iiteration_tangente_circulaire_dans_C_____seuil          /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' ch '   C O M P L E X E  :                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_cosinus_hyperbolique_dans_C_____seuil,FLOT(MILLE))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_cosinus_hyperbolique_dans_C(imageR            /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                                                  )                 /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCcosinus_hyperbolique                                  /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCcosinus_hyperbolique_____valeur                       /* Common,DEFV(Fonction,) :   \  */
                                          ,Iiteration_cosinus_hyperbolique_dans_C_____seuil         /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' sh '   C O M P L E X E  :                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_sinus_hyperbolique_dans_C_____seuil,FLOT(MILLE))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_sinus_hyperbolique_dans_C(imageR              /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                                                )                   /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCsinus_hyperbolique                                    /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCsinus_hyperbolique_____valeur                         /* Common,DEFV(Fonction,) :   \  */
                                          ,Iiteration_sinus_hyperbolique_dans_C_____seuil           /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' th '   C O M P L E X E  :                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_tangente_hyperbolique_dans_C_____seuil,FDEUX)));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_tangente_hyperbolique_dans_C(imageR           /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                                                   )                /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCtangente_hyperbolique                                 /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCtangente_hyperbolique_____valeur                      /* Common,DEFV(Fonction,) :   \  */
                                          ,Iiteration_tangente_hyperbolique_dans_C_____seuil        /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' exp '   C O M P L E X E  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_exponentielle_neperienne_dans_C_____seuil,FLOT(MILLIARD))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */
                                        /*                                                                                           */
                                        /* Le 20090303182646, il est passe de 'FDEUX' a 'MILLIARD'...                                */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_exponentielle_neperienne_dans_C(imageR        /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                                                      )             /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCexponentielle_neperienne                              /* Common,DEFV(Fonction,) :   \  */
                                          ,fFCexponentielle_neperienne_____valeur                   /* Common,DEFV(Fonction,) :   \  */
                                          ,Iiteration_exponentielle_neperienne_dans_C_____seuil     /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20090303145735...                                                  */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' log '   C O M P L E X E  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_logarithme_dans_C_____seuil,FDEUX)));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_C(Iiteration_logarithme_dans_C(imageR                      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                                        )                           /* Common,DEFV(Fonction,) :   \  */
                                          ,fFClogarithme                                            /* Common,DEFV(Fonction,) :   \  */
                                          ,fFClogarithme_____valeur                                 /* Common,DEFV(Fonction,) :   \  */
                                          ,Iiteration_logarithme_dans_C_____seuil                   /* Common,DEFV(Fonction,) :   \  */
                                           )                                                        /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */

EFonctionP

#undef    GENERE__FonctionP_I_ITERAT_F_C

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D ' U N   P O L Y N O M E   V A R I A B L E   Q U E L C O N Q U E                                      */
/*        D A N S   L E   P L A N   C O M P L E X E  :                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Soit la suite :                                                                                                */
/*                                                                                                                                   */
/*                                      z    = C                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                                      z    = polynome(z )                                                                          */
/*                                       n+1             n                                                                           */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point Courant).                                                                               */
/*                                                                                                                                   */
/*                    La fonction 'polynome(...)' est definie                                                                        */
/*                  par (la translation 't' de l'exposant pouvant                                                                    */
/*                  etre negative a compter du 20100316172716) :                                                                     */
/*                                                                                                                                   */
/*                                                        0+t       1+t             p+t                                              */
/*                                      polynome(z) = A .z    + A .z    + ... + A .z    + alpha.A + beta.C                           */
/*                                                     0         1               p                                                   */
/*                                                                                                                                   */
/*                  (ou 'A' et 'C' designent respectivement un                                                                       */
/*                  nombre complexe arbitraire Argument et le                                                                        */
/*                  point Courant). Quant a la suite de coefficients                                                                 */
/*                  {A0,A1,...,Ap} elle est definie a partir d'un album                                                              */
/*                  d'images (indexe par 'Z' -majuscule-, d'ou ici le choix                                                          */
/*                  de 'z' -minuscule- pour designer un nombre complexe).                                                            */
/*                                                                                                                                   */
/*                    Mais ATTENTION, si cela permet de faire varier                                                                 */
/*                  localement le polynome au point {X,Y} on notera                                                                  */
/*                  bien que :                                                                                                       */
/*                                                                                                                                   */
/*                                      C # X + i.Y                                                                                  */
/*                                                                                                                                   */
/*                  a priori (les coordonnees {X,Y} sont relatives                                                                   */
/*                  a une image, alors que 'C' est dans le plan                                                                      */
/*                  complexe. Cela signifie que lors d'un changement                                                                 */
/*                  de la fenetre de calcul {coin_bas_gauche,coin_haut_droite}                                                       */
/*                  (par zoom et/ou translation), les coefficients {A0,A1,...,Ap}                                                    */
/*                  du polynome, eux, resteront les memes...                                                                         */
/*                                                                                                                                   */
/*                    Enfin, on notera deux choix importants possibles :                                                             */
/*                                                                                                                                   */
/*                                      {alpha=1,beta=0}  : ensemble de type "Julia",                                                */
/*                                      {alpha=0,beta=1}  : ensemble de type "Mandelbrot",                                           */
/*                                                                                                                                   */
/*                  toutes les autres combinaisons etant evidemment                                                                  */
/*                  possibles...                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Int,SINT(Iiteration_polynome_variable_quelconque_dans_C_____premier_exposant_du_polynome,ZERO)));
                                        /* Introduit le 20100316172716 afin de pouvoir des polynomes contenant des puissances        */
                                        /* negatives de 'Z'...                                                                       */

DEFV(Common,DEFV(FonctionP,POINTERp(Iiteration_polynome_variable_quelconque_dans_C(imageR
                                                                                  ,definition_du_polynome
                                                                                  ,ponderation_du_nombre_complexe_argument_A
                                                                                  ,ARGUMENT_POINTERs(nombre_complexe_argument_A)
                                                                                  ,ponderation_du_nombre_complexe_courant_C
                                                                                  ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                                                  ,ARGUMENT_POINTERs(coin_haut_droite)
                                                                                  ,nombre_maximal_d_iterations
                                                                                  ,seuil_du_carre_du_module
                                                                                  ,visualisation_arguments_de_sortie
                                                                                   )
                                    )
                 )
     )
                                        /* Fonction introduite le 20040508115225...                                                  */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat a generer.                                                                 */
DEFV(Argument,DEFV(albumF,definition_du_polynome));
                                        /* Definition du polynome variable (en {X,Y}) a l'aide d'un album.                           */
DEFV(Argument,DEFV(Float,ponderation_du_nombre_complexe_argument_A));
                                        /* Ponderation du nombre complexe argument 'A' (dit 'alpha' dans 'alpha.A + beta.C').        */
DEFV(Argument,DEFV(complexe,POINTERs(nombre_complexe_argument_A)));
                                        /* Nombre complexe argument 'A'.                                                             */
DEFV(Argument,DEFV(Float,ponderation_du_nombre_complexe_courant_C));
                                        /* Ponderation du nombre complexe courant 'C' (dit 'beta' dans 'alpha.A + beta.C').          */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Float,seuil_du_carre_du_module));
                                        /* Seuil du carre du module definissant l'arret des iterations.                              */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle))                    */
                                        /* de Z  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX').  */
                                        /*     n                                                                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_C
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */
                                        /* 20061219090342).                                                                          */

     gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES;
                                        /* Introduit le 20190314183222...                                                            */

     begin_image
          Bblock
          gF_ITERATION_DANS_C(TEST_DU_CARRE_DU_MODULE_DANS_C(seuil_du_carre_du_module)
                             ,BLOC(Bblock
                                   INITIALISATION_DU_POINT_COURANT_DANS_C;
                                   Eblock
                                   )
                                        /* Introduit le 20091012111043...                                                            */
                             ,BLOC(Bblock
                                   Cegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres complexes avec :                                   */
                                        /*                                                                                           */
                                        /*                  z  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                   EGAL(nombre_courant_d_iterations,UN);
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */
                                        /* valeur non nulle soit rangee...                                                           */
                                   Eblock
                                   )
                             ,BLOC(VIDE;
                                   )
                             ,BLOC(Bblock
                                   DEFV(complexe,puissance_courante);
                                   DEFV(complexe,polynome_courant);

                                   aCpuissance(puissance_courante
                                              ,point_courant
                                              ,Iiteration_polynome_variable_quelconque_dans_C_____premier_exposant_du_polynome
                                               );
                                        /* Avant le 20100316172716, il y avait ici :                                                 */
                                        /*                                                                                           */
                                        /*                  Cinitialisation(puissance_courante,R1_Complexe,I0_Complexe);             */
                                        /*                                                                                           */
                                        /* ce qui revient au meme lorsque l'exposant est nul :                                       */
                                        /*                                                                                           */
                                        /*                                  0                                                        */
                                        /*                  puissance(z) = z  = {1,0}                                                */
                                        /*                                                                                           */
                                        /* ce qui est le cas par defaut...                                                           */

                                   aCcombinaison_lineaire_2(polynome_courant
                                                           ,ponderation_du_nombre_complexe_argument_A
                                                           ,INDIRECT(nombre_complexe_argument_A)
                                                           ,ponderation_du_nombre_complexe_courant_C
                                                           ,point_courant
                                                            );
                                        /* Definition du polynome et initialisation avec :                                           */
                                        /*                                                                                           */
                                        /*                  polynome(z ) = alpha.A + beta.C                                          */
                                        /*                            n                                                              */
                                        /*                                                                                           */

                                   begin_fuite
                                        Bblock
                                        DEFV(Float,INIT(coefficient_polynomial,AloadF_point(definition_du_polynome,X,Y,Z)));
                                        /* ATTENTION : ne pas confondre le 'Z' ci-dessus qui indexe les pages de l'album et les      */
                                        /* nombres complexes 'Z' (notes d'ailleurs 'z' a cause de cela...).                          */
                                        DEFV(complexe,monome_courant);

                                        aCforme_lineaire(monome_courant,coefficient_polynomial,puissance_courante,FZERO);
                                        aCsomme(polynome_courant,polynome_courant,monome_courant);

                                        aCproduit(puissance_courante,puissance_courante,suite_point);
                                        /* Calcul du polynome courant :                                                              */
                                        /*                                                                                           */
                                        /*                                    0       1             p                                */
                                        /*                  polynome(z) = A .z  + A .z  + ... + A .z  + alpha.A + beta.C             */
                                        /*                                 0       1             p                                   */
                                        /*                                                                                           */
                                        /* ou 'A(i)' designe la i-ieme page de l'album 'definition_du_polynome'...                   */
                                        Eblock
                                   end_fuite

                                   Cegal(suite_point,polynome_courant);
                                        /* Et iteration de la fonction :                                                             */
                                        /*                                                                                           */
                                        /*                  z    = polynome(z )                                                      */
                                        /*                   n+1             n                                                       */
                                        /*                                                                                           */
                                   Eblock
                                   )
                             ,BLOC(VIDE;
                                   )
                                        /* Introduit le 20150225152454...                                                            */
                              );
          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

#undef    F_ITERATION_DANS_C
#undef    gF_ITERATION_DANS_C
#undef    gF_ITERATION_DANS_C__INITIALISATIONS_DIVERSES
#undef    BVARIABLES_F_ITERATION_DANS_C
#undef    gF_ITERATION_DANS_C__EDITION_EVENTUELLE_DES_TRAJECTOIRES
#undef    IGNORER__Xmax__Ymax
#undef    IGNORER__Xmin__Ymin
#undef    Xmax_Ymax__UNDEF
#undef    Xmin_Ymin__UNDEF

#undef    TEST_DU_CARRE_DU_MODULE_DANS_C

#undef    F_ITERATION_QUELCONQUE_DANS_C
#undef    BVARIABLES_F_ITERATION_QUELCONQUE_DANS_C
#undef    BVARIABLES_F_ITERATION_QUELCONQUE_DANS_C_SANS_point_courant

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   N E C E S S A I R E S   A U   C A L C U L   E N   " E N T I E R "   C O M P L E X E                    */
/*        S U I V A N T   U N   P R O C E S S U S   N O N   O P T I M I S E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   BVARIABLES_I_ITERATION_DANS_C                                                                                                 \
                                        /* Definition des variables communes a 'Julia' et 'Mandelbrot'.                              */ \
                    VARIABLES_RELATIVES_A_LA_NECESSITE_D_HOMOTHETIE;                                                                    \
                                        /* L'ajustement de la proportion des dimensions des fenetres au rapport dimX/dimY est-il     */ \
                                        /* necessaire (introduit le 20091124124351) ?                                                */ \
                                                                                                                                        \
                    DEFV(Float,INIT(x_homothetie                                                                                        \
                                   ,DIVI(SOUS(X_COIN_HAUT_DROITE                                                                        \
                                             ,X_COIN_BAS_GAUCHE                                                                         \
                                              )                                                                                         \
                                        ,FLOT(dimX)                                                                                     \
                                         )                                                                                              \
                                    )                                                                                                   \
                         );                                                                                                             \
                                        /* "Taille" reelle de la fenetre rapportee a la taille des images,                           */ \
                    DEFV(Float,INIT(y_homothetie                                                                                        \
                                   ,DIVI(SOUS(Y_COIN_HAUT_DROITE                                                                        \
                                             ,Y_COIN_BAS_GAUCHE                                                                         \
                                              )                                                                                         \
                                        ,FLOT(dimY)                                                                                     \
                                         )                                                                                              \
                                    )                                                                                                   \
                         );                                                                                                             \
                                        /* "Taille" imaginaire de la fenetre rapportee a la taille des images.                       */ \
                    DEFV(complexe,point_courant);                                                                                       \
                                        /* Point complexe courant 'C' dans la fenetre.                                               */ \
                    DEFV(complexe,suite_point);                                                                                         \
                                        /* Suite des points complexes Z  lors de l'iteration.                                        */ \
                                        /*                             n                                                             */ \
                    DEFV(complexe,point_manoeuvre);                                                                                     \
                                        /* Point complexe de maneuvre lors de l'iteration.                                           */ \
                    DEFV(pointI_2D,transforme);                                                                                         \
                                        /* Point transforme dans [Xmin,Xmax][Ymin,Ymax].                                             */ \
                    DEFV(pointI_2D,intermediaire);                                                                                      \
                                        /* Point intermediaire transforme dans [Xmin,Xmax][Ymin,Ymax].                               */ \
                    BDEFV(imageI,partie_reelle);                                                                                        \
                                        /* Partie reelle dans [Xmin,Xmax] de la transformee Z  = f(Z ).                              */ \
                                        /*                                                   1      0                                */ \
                    BDEFV(imageI,partie_imaginaire);                                                                                    \
                                        /* Partie imaginaire dans [Ymin,Ymax] de la transformee Z  = f(Z ).                          */ \
                                        /*                                                       1      0                            */ \
                    BDEFV(imageF,module_au_carre);                                                                                      \
                                        /* Module au carre dans R de la transformee Z  = f(Z ).                                      */ \
                                        /*                                           1      0                                        */ \
                    VARIABLES_COMMUNES_DES_ITERATIONS_DANS_C_HC_HHC;

#define   EVARIABLES_I_ITERATION_DANS_C                                                                                                 \
                                        /* Fin de definition des variables communes a 'Julia' et 'Mandelbrot'.                       */ \
                    EDEFV(imageF,module_au_carre);                                                                                      \
                                        /* Module au carre dans R de la transformee Z  = f(Z ).                                      */ \
                                        /*                                           1      0                                        */ \
                    EDEFV(imageI,partie_imaginaire);                                                                                    \
                                        /* Partie imaginaire dans [Ymin,Ymax] de la transformee Z  = f(Z ).                          */ \
                                        /*                                                       1      0                            */ \
                    EDEFV(imageI,partie_reelle);                                                                                        \
                                        /* Partie reelle dans [Xmin,Xmax] de la transformee Z  = f(Z ).                              */ \
                                        /*                                                   1      0                                */

#define   INITIALISATION_I_ITERATION_DANS_C(init_iteration,fonc_iteration)                                                              \
                                        /* Sequence d'initialisation du calcul iteratif au point {X,Y}.                              */ \
                    Bblock                                                                                                              \
                    INITIALISATION_DU_POINT_COURANT_DANS_C;                                                                             \
                                        /* Le "point_courant" 'C' est le point courant {X,Y} sur le maillage de l'image.             */ \
                    BLOC(init_iteration);                                                                                               \
                                        /* Initialisation de la suite des nombres complexes sur le "point_courant",                  */ \
                                        /* soit :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  Z  = 0                                                                   */ \
                                        /*                   0                                                                       */ \
                                        /*                                                                                           */ \
                                        /* ou :                                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  Z  = C                                                                   */ \
                                        /*                   0                                                                       */ \
                                        /*                                                                                           */ \
                    aCproduit(point_manoeuvre,suite_point,suite_point);                                                                 \
                                        /* Calculons :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                    2                                                                      */ \
                                        /*                  Z                                                                        */ \
                                        /*                   n                                                                       */ \
                                        /*                                                                                           */ \
                                                                                                                                        \
                    BLOC(fonc_iteration);                                                                                               \
                                        /* Puis :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                    2                                                                      */ \
                                        /*                  Z   + C                                                                  */ \
                                        /*                   n                                                                       */ \
                                        /*                                                                                           */ \
                                        /* ou :                                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                    2                                                                      */ \
                                        /*                  Z   + A                                                                  */ \
                                        /*                   n                                                                       */ \
                                        /*                                                                                           */ \
                                                                                                                                        \
                    TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE(suite_point,iterations_dans_C_HC_HHC_____epsilon);                            \
                                        /* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter                      */ \
                                        /* des underflows flottants...                                                               */ \
                                                                                                                                        \
                    storeI_point(X_PLAN_IMAGE_MODULO                                                                                    \
                                ,partie_reelle                                                                                          \
                                ,X,Y                                                                                                    \
                                 );                                                                                                     \
                                        /* Memorisation de la partie reelle de la transformee dans [Xmin,Xmax].                      */ \
                    storeI_point(Y_PLAN_IMAGE_MODULO                                                                                    \
                                ,partie_imaginaire                                                                                      \
                                ,X,Y                                                                                                    \
                                 );                                                                                                     \
                                        /* Memorisation de la partie imaginaire de la transformee dans [Ymin,Ymax].                  */ \
                    storeF_point(Cmodule2(suite_point)                                                                                  \
                                ,module_au_carre                                                                                        \
                                ,X,Y                                                                                                    \
                                 );                                                                                                     \
                                        /* Memorisation du carre du module de la transformee.                                        */ \
                    Eblock
#define   I_ITERATION_DANS_C(init_iteration)                                                                                            \
                                        /* Sequence de calcul de la valeur a donner au point courant {X,Y}.                          */ \
                    Bblock                                                                                                              \
                    INITIALISATION_POINT_2D(transforme,X,Y);                                                                            \
                                        /* Initialisation de Z  "entiere" sur le point courant {X,Y}.                                */ \
                                        /*                    n                                                                      */ \
                    BLOC(init_iteration);                                                                                               \
                                        /* Initialisation du compteur des iterations.                                                */ \
                                                                                                                                        \
                    Tant(IFET(IFLT(loadF_point(module_au_carre,ASD1(transforme,x),ASD1(transforme,y))                                   \
                                  ,iterations_diverses_dans_C_____seuil_du_carre_du_module                                              \
                                   )                                                                                                    \
                             ,PAS_ASSEZ_D_ITERATIONS                                                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         INCR(nombre_courant_d_iterations,I);                                                                           \
                         INITIALISATION_POINT_2D(intermediaire                                                                          \
                                                ,loadI_point(partie_reelle,ASD1(transforme,x),ASD1(transforme,y))                       \
                                                ,loadI_point(partie_imaginaire,ASD1(transforme,x),ASD1(transforme,y))                   \
                                                 );                                                                                     \
                         TRANSFERT_POINT_2D(transforme,intermediaire);                                                                  \
                                        /* Puis :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                           2                                                               */ \
                                        /*                  Z    = Z   + C                                                           */ \
                                        /*                   n+1    n                                                                */ \
                                        /*                                                                                           */ \
                                        /* ou :                                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                           2                                                               */ \
                                        /*                  Z    = Z   + A                                                           */ \
                                        /*                   n+1    n                                                                */ \
                                        /*                                                                                           */ \
                         Eblock                                                                                                         \
                    ETan                                                                                                                \
                                                                                                                                        \
                    Test(IL_FAUT(visualisation_arguments_de_sortie))                                                                    \
                         Bblock                                                                                                         \
                         Test(IL_NE_FAUT_PAS(iterations_dans_C_HC_HHC_____memoriser_le_module_plutot_que_les_arguments))                \
                              Bblock                                                                                                    \
                              EGAL(niveau_courant_precis                                                                                \
                                  ,ATAN(Y_IMAGE_PLAN(ASD1(transforme,y))                                                                \
                                       ,X_IMAGE_PLAN(ASD1(transforme,x))                                                                \
                                        )                                                                                               \
                                   );                                                                                                   \
                              EGAL(niveau_courant                                                                                       \
                                  ,GENP(SCAL(niveau_courant_precis                                                                      \
                                            ,CERCLE_TRIGONOMETRIQUE                                                                     \
                                            ,BLANC                                                                                      \
                                             )                                                                                          \
                                        )                                                                                               \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              EGAL(niveau_courant_precis                                                                                \
                                  ,Rho_2D(X_IMAGE_PLAN(ASD1(transforme,x))                                                              \
                                         ,Y_IMAGE_PLAN(ASD1(transforme,y))                                                              \
                                          )                                                                                             \
                                   );                                                                                                   \
                              EGAL(niveau_courant                                                                                       \
                                  ,GENP(SCAL(TRON(niveau_courant_precis                                                                 \
                                                 ,iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments   \
                                                 ,iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments   \
                                                  )                                                                                     \
                                            ,SOUS(iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments   \
                                                 ,iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments   \
                                                  )                                                                                     \
                                            ,BLANC                                                                                      \
                                             )                                                                                          \
                                        )                                                                                               \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         EGAL(niveau_courant_precis                                                                                     \
                             ,CASP_Float(nombre_courant_d_iterations)                                                                   \
                              );                                                                                                        \
                                        /* La procedure 'CASP_Float(...)' a remplace un 'CASP(genere_Float,...)' le 20090331103211.  */ \
                         EGAL(niveau_courant                                                                                            \
                             ,GENP(SCAL(nombre_courant_d_iterations                                                                     \
                                       ,nombre_maximal_d_iterations                                                                     \
                                       ,BLANC                                                                                           \
                                        )                                                                                               \
                                   )                                                                                                    \
                              );                                                                                                        \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    RANGEMENT_DU_NIVEAU_COURANT_ET_EVENTUELLEMENT_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;              \
                                        /* Et enfin, marquage du point courant.                                                      */ \
                    Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D ' U N   F A U X   E N S E M B L E   D E   M A N D E L B R O T    C O M P L E X E                           */
/*        D A N S   U N E   F E N E T R E   S U I V A N T   U N   P R O C E S S U S   N O N   O P T I M I S E  :                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Lors du calcul de l'ensemble                                                                                   */
/*                  de Mandelbrot, a chaque iteration,                                                                               */
/*                  on reprend en compte le nombre                                                                                   */
/*                  complexe courant 'C' d'ou on est                                                                                 */
/*                  parti ; or ici, on utilise une                                                                                   */
/*                  espece de matrice de permutation                                                                                 */
/*                  calculee une fois pour toute,                                                                                    */
/*                  dont l'apport de 'C' n'a lieu qu'a                                                                               */
/*                  la premiere iteration : c'est donc                                                                               */
/*                  un "faux" Mandelbrot...                                                                                          */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,POINTERp(Ifaux_mandelbrot_dans_C(imageR
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)
                                                           ,nombre_maximal_d_iterations
                                                           ,visualisation_arguments_de_sortie
                                                            )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle))                    */
                                        /* de Z  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX').  */
                                        /*     n                                                                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_I_ITERATION_DANS_C
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */
                                        /* 20061219090342).                                                                          */

     begin_image
          Bblock
          INITIALISATION_I_ITERATION_DANS_C(BLOC(Bblock
                                                 Cegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres complexes sur le point courant, soit :             */
                                        /*                                                                                           */
                                        /*                  Z  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                        /* On notera la difference avec 'IFmandelbrot' qui est rendue necessaire par le fait que     */
                                        /* lors de l'initialisation une seule iteration est effectuee, et que partant de '0', on     */
                                        /* trouverait ainsi :                                                                        */
                                        /*                                                                                           */
                                        /*                  Z  = C                                                                   */
                                        /*                   1                                                                       */
                                        /*                                                                                           */
                                        /* Ainsi, lors de l'iteration (vu son principe), on resterait sur place puisque :            */
                                        /*                                                                                           */
                                        /*                  transforme(X ou Y) = (X ou Y)                                            */
                                        /*                                                                                           */
                                        /* via les matrices 'partie_reelle' et 'partie_imaginaire'...                                */
                                                 Eblock
                                                 )
                                           ,BLOC(Bblock
                                                 aCsomme(suite_point,point_manoeuvre,point_courant);
                                        /* Puis :                                                                                    */
                                        /*                                                                                           */
                                        /*                           2                                                               */
                                        /*                  Z    = Z   + C                                                           */
                                        /*                   n+1    n                                                                */
                                        /*                                                                                           */
                                        /* ou 'C' designe le point Courant.                                                          */
                                                 Eblock
                                                 )
                                            );
          Eblock
     end_image

     begin_image
          Bblock
          I_ITERATION_DANS_C(BLOC(Bblock
                                  EGAL(nombre_courant_d_iterations,UN);
                                        /* Initialisation du compteur des iterations.                                                */
                                  Eblock
                                  )
                             );
          Eblock
     end_image

     EVARIABLES_I_ITERATION_DANS_C

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D ' U N   F A U X   E N S E M B L E   D E   J U L I A    C O M P L E X E                                     */
/*        D A N S   U N E   F E N E T R E   S U I V A N T   U N   P R O C E S S U S   N O N   O P T I M I S E  :                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,POINTERp(Ifaux_julia_dans_C(imageR
                                                      ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                      ,ARGUMENT_POINTERs(coin_haut_droite)
                                                      ,ARGUMENT_POINTERs(nombre_argument)
                                                      ,nombre_maximal_d_iterations
                                                      ,visualisation_arguments_de_sortie
                                                       )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(complexe,POINTERs(nombre_argument)));
                                        /* Nombre complexe "generateur" de l'ensemble de Julia que l'on veut calculer.               */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle))                    */
                                        /* de Z  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX').  */
                                        /*     n                                                                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_I_ITERATION_DANS_C
     DEFV(complexe,point_argument);
                                        /* Point complexe argument.                                                                  */
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */
                                        /* 20061219090342).                                                                          */

     Cegal(point_argument,INDIRECT(nombre_argument));
                                        /* Recuperation du nombre complexe "generateur"...                                           */

     begin_image
          Bblock
          INITIALISATION_I_ITERATION_DANS_C(BLOC(Bblock
                                                 Cegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres complexes sur le "point_courant", soit :           */
                                        /*                                                                                           */
                                        /*                  Z  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                                 Eblock
                                                 )
                                           ,BLOC(Bblock
                                                 aCsomme(suite_point,point_manoeuvre,point_argument);
                                        /* Puis :                                                                                    */
                                        /*                                                                                           */
                                        /*                           2                                                               */
                                        /*                  Z    = Z   + A                                                           */
                                        /*                   n+1    n                                                                */
                                        /*                                                                                           */
                                        /* ou 'A' designe le point Argument.                                                         */
                                                 Eblock
                                                 )
                                            );
          Eblock
     end_image

     begin_image
          Bblock
          I_ITERATION_DANS_C(BLOC(Bblock
                                  EGAL(nombre_courant_d_iterations,UN);
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */
                                        /* valeur non nulle soit rangee...                                                           */
                                  Eblock
                                  )
                             );
          Eblock
     end_image

     EVARIABLES_I_ITERATION_DANS_C

     RETI(imageR);
     Eblock

EFonctionP

#undef    I_ITERATION_DANS_C
#undef    INITIALISATION_I_ITERATION_DANS_C
#undef    EVARIABLES_I_ITERATION_DANS_C
#undef    BVARIABLES_I_ITERATION_DANS_C
#undef    SEUIL_MODULE_DANS_C

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S E U I L   D U   M O D U L E   " C H E V E L U "   C O M P L E X E  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Float,ZINT(F_ITERATION_CHEVELUE_DANS_C_____seuil_du_carre_du_module,EXP2(GRO16(UNITE)))));
                                        /* Seuil de divergence du carre du module d'un nombre complexe de la suite.                  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   N E C E S S A I R E S   A U   C A L C U L   " C H E V E L U "   C O M P L E X E                        */
/*        E N   " F L O T T A N T "   S U I V A N T   U N   P R O C E S S U S   N O N   O P T I M I S E  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   BVARIABLES_F_ITERATION_CHEVELUE_DANS_C                                                                                        \
                                        /* Definition des variables communes a 'Julia' et 'Mandelbrot'.                              */ \
                    VARIABLES_RELATIVES_A_LA_NECESSITE_D_HOMOTHETIE;                                                                    \
                                        /* L'ajustement de la proportion des dimensions des fenetres au rapport dimX/dimY est-il     */ \
                                        /* necessaire (introduit le 20091124124351) ?                                                */ \
                                                                                                                                        \
                    DEFV(Float                                                                                                          \
                        ,INIT(x_homothetie                                                                                              \
                             ,DIVI(SOUS(X_COIN_HAUT_DROITE                                                                              \
                                       ,X_COIN_BAS_GAUCHE                                                                               \
                                        )                                                                                               \
                                  ,FLOT(dimX)                                                                                           \
                                   )                                                                                                    \
                              )                                                                                                         \
                         );                                                                                                             \
                                        /* "Taille" reelle de la fenetre rapportee a la taille des images,                           */ \
                    DEFV(Float                                                                                                          \
                        ,INIT(y_homothetie                                                                                              \
                             ,DIVI(SOUS(Y_COIN_HAUT_DROITE                                                                              \
                                       ,Y_COIN_BAS_GAUCHE                                                                               \
                                        )                                                                                               \
                                  ,FLOT(dimY)                                                                                           \
                                   )                                                                                                    \
                              )                                                                                                         \
                         );                                                                                                             \
                                        /* "Taille" imaginaire de la fenetre rapportee a la taille des images.                       */ \
                    DEFV(Positive,INIT(nombre_courant_d_iterations,UNDEF));                                                             \
                                        /* Nombre courant d'iterations.                                                              */ \
                    DEFV(Logical,INIT(iterer,LUNDEF));                                                                                  \
                                        /* Indicateur precisant s'il faut iterer ('VRAI') ou s'arreter ('FAUX').                     */ \
                    DEFV(complexe,point_courant);                                                                                       \
                                        /* Point complexe courant 'C' dans la fenetre.                                               */ \
                    DEFV(complexe,suite_point);                                                                                         \
                                        /* Suite des points complexes Z  lors de l'iteration.                                        */ \
                                        /*                             n                                                             */ \
                    DEFV(complexe,derivee_suite_point);                                                                                 \
                                        /* Suite des derivees complexes dZ  lors de l'iteration, ou 'dZ' designe la derivee de       */ \
                                        /*                                n                                                          */ \
                                        /* l'iteration par rapport au point courant 'C' ; elle est definie par la recurrence :       */ \
                                        /*                                                                                           */ \
                                        /*                  dZ    = (2.Z .dZ ) + 1                                                   */ \
                                        /*                    n+1       n   n                                                        */ \
                                        /*                                                                                           */ \
                                        /* ou :                                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  dZ    = (2.Z .dZ ) + 0                                                   */ \
                                        /*                    n+1       n   n                                                        */ \
                                        /*                                                                                           */ \
                                        /* avec :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  dZ  = 0                                                                  */ \
                                        /*                    0                                                                      */ \
                                        /*                                                                                           */ \
                                        /* ou :                                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  dZ  = 1                                                                  */ \
                                        /*                    0                                                                      */ \
                                        /*                                                                                           */ \
                                        /* suivant que l'on calcule Mandelbrot ou Julia.                                             */ \
                    DEFV(complexe,increment_de_la_derivee_suite_point);                                                                 \
                                        /* Increment utilise pour le calcul de la derivee complexe ; il vaut suivant l'ensemble      */ \
                                        /* que l'on calcule : (1,0) ou (0,0).                                                        */ \
                    DEFV(Float,INIT(distance,FLOT__UNDEF));                                                                             \
                                        /* Valeur estimee de la distance courante du point 'z' a l'ensemble que l'on calcule ; il    */ \
                                        /* s'agit d'une approximation valant :                                                       */ \
                                        /*                                                                                           */ \
                                        /*                              |Z |                                                         */ \
                                        /*                          1   | n|                                                         */ \
                                        /*                  d(z) = ---.-------.Log(|Z |)                                             */ \
                                        /*                          2   |dZ |       n                                                */ \
                                        /*                              |  n|                                                        */ \
                                        /*                                                                                           */ \
                                        /* valable pour les petits modules et les grandes valeurs de 'n'.                            */ \
                    BDEFV(imageF,image_des_distances);                                                                                  \
                                        /* Image flottante contenant les distances avant la normalisation.                           */ \
                    DEFV(complexe,point_manoeuvre);                                                                                     \
                                        /* Point complexe de maneuvre lors de l'iteration.                                           */
#define   EVARIABLES_F_ITERATION_DANS_C                                                                                                 \
                                        /* Fin de definition des variables communes a 'Julia' et 'Mandelbrot'.                       */ \
                    EDEFV(imageF,image_des_distances);                                                                                  \
                                        /* Image flottante contenant les distances avant la normalisation.                           */
#define   DISTANCES_ANORMALES_AVANT                                                                                                     \
                    F_INFINI                                                                                                            \
                                        /* Valeur a donner aux distances pour lesquelles on risque '1/0' et 'Log(0)' ; cette valeur  */ \
                                        /* est fortement positive afin que les tests d'eloignement par rapport au seuil soient       */ \
                                        /* possibles...                                                                              */
#define   DISTANCES_ANORMALES_APRES                                                                                                     \
                    F_MOINS_L_INFINI                                                                                                    \
                                        /* Valeur a donner aux distances pour lesquelles on risque '1/0' et 'Log(0)' ; cette valeur  */ \
                                        /* est fortement negative afin que les tests de recherche de la vraie distance maximale      */ \
                                        /* pour la renormalisation soient possibles...                                               */
#define   F_ITERATION_CHEVELUE_DANS_C(init_iteration,derivee_fonc_iteration,fonc_iteration,fin_iteration)                               \
                                        /* Sequence de calcul de la valeur a donner au point courant {X,Y}.                          */ \
                    Bblock                                                                                                              \
                    INITIALISATION_DU_POINT_COURANT_DANS_C;                                                                             \
                                        /* Le "point_courant" 'C' est le point courant {X,Y} sur le maillage de l'image.             */ \
                    BLOC(init_iteration);                                                                                               \
                                        /* Initialisation de la suite des nombres complexes sur le "point_courant",                  */ \
                                        /* soit :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  Z  = 0                                                                   */ \
                                        /*                   0                                                                       */ \
                                        /*                                                                                           */ \
                                        /*                  dZ  = 0                                                                  */ \
                                        /*                    0                                                                      */ \
                                        /*                                                                                           */ \
                                        /* ou :                                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  Z  = C                                                                   */ \
                                        /*                   0                                                                       */ \
                                        /*                                                                                           */ \
                                        /*                  dZ  = 1                                                                  */ \
                                        /*                    0                                                                      */ \
                                        /*                                                                                           */ \
                                        /* et, initialisation du compteur des iterations.                                            */ \
                                                                                                                                        \
                    EGAL(iterer,VRAI);                                                                                                  \
                                        /* Ainsi, on fera au moins la premiere iteration...                                          */ \
                    Tant(IL_FAUT(iterer))                                                                                               \
                         Bblock                                                                                                         \
                         aCproduit(point_manoeuvre,suite_point,derivee_suite_point);                                                    \
                                        /* Calculons :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                  Z .dZ                                                                    */ \
                                        /*                   n   n                                                                   */ \
                                        /*                                                                                           */ \
                         aCforme_lineaire(derivee_suite_point,FDEUX,point_manoeuvre,FZERO);                                             \
                                        /* Puis :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  2.Z .dZ                                                                  */ \
                                        /*                     n   n                                                                 */ \
                                        /*                                                                                           */ \
                         aCsomme(derivee_suite_point,derivee_suite_point,increment_de_la_derivee_suite_point);                          \
                                        /* Puis :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  dZ    = (2.Z .dZ ) + 1                                                   */ \
                                        /*                    n+1       n   n                                                        */ \
                                        /*                                                                                           */ \
                                        /* ou :                                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  dZ    = (2.Z .dZ ) + 0                                                   */ \
                                        /*                    n+1       n   n                                                        */ \
                                        /*                                                                                           */ \
                         aCproduit(point_manoeuvre,suite_point,suite_point);                                                            \
                                        /* Calculons :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                    2                                                                      */ \
                                        /*                  Z                                                                        */ \
                                        /*                   n                                                                       */ \
                                        /*                                                                                           */ \
                         BLOC(fonc_iteration);                                                                                          \
                                        /* Puis :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                    2                                                                      */ \
                                        /*                  Z   + C                                                                  */ \
                                        /*                   n                                                                       */ \
                                        /*                                                                                           */ \
                                        /* ou :                                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                    2                                                                      */ \
                                        /*                  Z   + A                                                                  */ \
                                        /*                   n                                                                       */ \
                                        /*                                                                                           */ \
                         Test(IFOU(IZEQ(Cmodule(suite_point)),IZEQ(Cmodule(derivee_suite_point))))                                      \
                              Bblock                                                                                                    \
                              EGAL(distance,DISTANCES_ANORMALES_AVANT);                                                                 \
                                        /* Si l'un des modules est nul, on va soit rencontrer 1/0, soit Log(0), ce qui est tres      */ \
                                        /* mauvais ; afin de forcer l'iteration, on choisit arbitrairement une distance infinie...   */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              EGAL(distance                                                                                             \
                                  ,MUL2(MOIT(DIVI(Cmodule(suite_point)                                                                  \
                                                 ,Cmodule(derivee_suite_point)                                                          \
                                                  )                                                                                     \
                                             )                                                                                          \
                                       ,LOGX(Cmodule(suite_point))                                                                      \
                                        )                                                                                               \
                                   );                                                                                                   \
                                        /* Sinon, on calcule l'approximation de la distance.                                         */ \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Test(IFGE(Cmodule2(suite_point),F_ITERATION_CHEVELUE_DANS_C_____seuil_du_carre_du_module))                     \
                              Bblock                                                                                                    \
                              EGAL(iterer,FAUX);                                                                                        \
                                        /* Lorsqu'on s'eloigne trop, on s'arrete...                                                  */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Test(IFGE(nombre_courant_d_iterations,PRED(nombre_maximal_d_iterations)))                                      \
                              Bblock                                                                                                    \
                              EGAL(iterer,FAUX);                                                                                        \
                                        /* On ne peut malheureusement faire une infinite d'iterations ; on notera le 'PRED' qui      */ \
                                        /* permet, lors du codage du point {X,Y}, de faire la difference entre le cas ou l'on a fait */ \
                                        /* trop d'iterations (cas present), et le cas suivant (ou la distance d'approche est         */ \
                                        /* atteinte...                                                                               */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              INCR(nombre_courant_d_iterations,I);                                                                      \
                                        /* Et comptage des iterations effectuees...                                                  */ \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Test(IFLE(distance,seuil_de_la_distance))                                                                      \
                              Bblock                                                                                                    \
                              EGAL(iterer,FAUX);                                                                                        \
                                        /* Lorsqu'on s'approche tres pres de l'ensemble, on considere qu'on appartient               */ \
                                        /* surement a ce meme ensemble...                                                            */ \
                              EGAL(nombre_courant_d_iterations,nombre_maximal_d_iterations);                                            \
                                        /* Et ce afin de coder correctement le point {X,Y} courant ; on notera, le 'PRED' du test    */ \
                                        /* precedent, qui permet lors du codage du point {X,Y}, de faire la difference entre le cas  */ \
                                        /* ou l'on a fait trop d'iterations (cas present), et le cas courant (ou la distance         */ \
                                        /* d'approche est atteinte)...                                                               */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE(suite_point,iterations_dans_C_HC_HHC_____epsilon);                       \
                                        /* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter                      */ \
                                        /* des underflows flottants...                                                               */ \
                         Eblock                                                                                                         \
                    ETan                                                                                                                \
                                                                                                                                        \
                    Choi(mode_de_visualisation)                                                                                         \
                         Bblock                                                                                                         \
                         Ca1e(VISUALISATION_DU_NOMBRE_D_ITERATIONS)                                                                     \
                              Bblock                                                                                                    \
                              store_point(GENP(SCAL(nombre_courant_d_iterations                                                         \
                                                   ,nombre_maximal_d_iterations                                                         \
                                                   ,BLANC                                                                               \
                                                    )                                                                                   \
                                               )                                                                                        \
                                         ,imageR                                                                                        \
                                         ,X,Y                                                                                           \
                                         ,FVARIABLE                                                                                     \
                                          );                                                                                            \
                                        /* Et enfin, marquage du point courant {X,Y} soit avec l'argument de sortie, soit avec       */ \
                                        /* le nombre courant d'iterations.                                                           */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Ca1e(VISUALISATION_DE_L_ARGUMENT_DE_SORTIE)                                                                    \
                              Bblock                                                                                                    \
                              store_point(GENP(SCAL(Cargument_2PI(suite_point)                                                          \
                                                   ,CERCLE_TRIGONOMETRIQUE                                                              \
                                                   ,BLANC                                                                               \
                                                    )                                                                                   \
                                               )                                                                                        \
                                         ,imageR                                                                                        \
                                         ,X,Y                                                                                           \
                                         ,FVARIABLE                                                                                     \
                                          );                                                                                            \
                                        /* Et enfin, marquage du point courant {X,Y} soit avec l'argument de sortie, soit avec       */ \
                                        /* le nombre courant d'iterations.                                                           */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Ca1e(VISUALISATION_DES_ORBITES)                                                                                \
                              Bblock                                                                                                    \
                              store_point_valide(load_point(imageA,X,Y)                                                                 \
                                                ,imageR                                                                                 \
                                                ,X_PLAN_IMAGE,Y_PLAN_IMAGE                                                              \
                                                ,FVARIABLE                                                                              \
                                                 );                                                                                     \
                                        /* Et enfin, marquage du point courant de Z  avec le point courant {X,Y} afin de tenter de   */ \
                                        /*                                         n                                                 */ \
                                        /* visualiser la trajectoire ('orbite') des points en montrant le deplacement des points de  */ \
                                        /* 'imageA'.                                                                                 */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Ca1e(VISUALISATION_DES_DISTANCES)                                                                              \
                              Bblock                                                                                                    \
                              storeF_point(COND(IFNE(distance,DISTANCES_ANORMALES_AVANT),distance,DISTANCES_ANORMALES_APRES)            \
                                          ,image_des_distances                                                                          \
                                          ,X,Y                                                                                          \
                                           );                                                                                           \
                                        /* Et on memorise la distance courante d(z), mais en remplacant 'DISTANCES_ANORMALES_AVANT'  */ \
                                        /* par son oppose ('DISTANCES_ANORMALES_APRES') afin d'etre capable a la fin de calculer     */ \
                                        /* le vrai maximum des distances (qui alors sera mis a la place de                           */ \
                                        /* 'DISTANCES_ANORMALES_APRES').                                                             */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Defo                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("le mode de visualisation demande n'existe pas");                                            \
                              Eblock                                                                                                    \
                         EDef                                                                                                           \
                         Eblock                                                                                                         \
                    ECho                                                                                                                \
                                                                                                                                        \
                    BLOC(fin_iteration);                                                                                                \
                                        /* Cette possibilite a ete introduite le 20150225152454...                                   */ \
                    Eblock
#define   F_INITIALISATION_DES_DISTANCES                                                                                                \
                                        /* Sequence d'initialisation du calcul de l'image des distances si necessaire...             */ \
                    Bblock                                                                                                              \
                    Test(IFEQ(mode_de_visualisation,VISUALISATION_DES_DISTANCES))                                                       \
                         Bblock                                                                                                         \
                         CALS(IFinitialisation(image_des_distances,FZERO));                                                             \
                                        /* Et on nettoie la matrice Resultat (flottante)...                                          */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock
#define   F_RENVOI_DES_DISTANCES                                                                                                        \
                                        /* Sequence de fin du calcul de l'image des distances si necessaire...                       */ \
                    Bblock                                                                                                              \
                    Test(IFEQ(mode_de_visualisation,VISUALISATION_DES_DISTANCES))                                                       \
                         Bblock                                                                                                         \
                         DEFV(Float,INIT(distance_minimale,FLOT__UNDEF));                                                               \
                                        /* Afin de rechercher la vraie valeur minimale des distances d(z)...                         */ \
                         DEFV(Float,INIT(distance_maximale,IFnivo_maximum(image_des_distances)));                                       \
                                        /* Recherche de la vraie valeur maximale des distances d(z)...                               */ \
                         traite_image_BH_GD(BLOC(Bblock                                                                                 \
                                                 Test(IFEQ(loadF_point(image_des_distances,X,Y),DISTANCES_ANORMALES_APRES))             \
                                                      Bblock                                                                            \
                                                      storeF_point(DISTANCES_ANORMALES_AVANT                                            \
                                                                  ,image_des_distances                                                  \
                                                                  ,X,Y                                                                  \
                                                                   );                                                                   \
                                        /* Les points pour lesquels on a evite '1/0' et 'Log(0)' avaient ete codes par               */ \
                                        /* 'DISTANCES_ANORMALES_APRES' ; maintenant que l'on connait la plus grande distance d(z)    */ \
                                        /* recontree ('distance_maximale'), on leur donne la valeur 'DISTANCES_ANORMALES_AVANT'      */ \
                                        /* afin de pouvoir rechercher le vrai minimum ('distance_minimale')...                       */ \
                                                      Eblock                                                                            \
                                                 ATes                                                                                   \
                                                      Bblock                                                                            \
                                                      Eblock                                                                            \
                                                 ETes                                                                                   \
                                                 Eblock                                                                                 \
                                                 )                                                                                      \
                                            );                                                                                          \
                         EGAL(distance_minimale,IFnivo_minimum(image_des_distances));                                                   \
                                        /* Recherche de la vraie valeur minimale des distances d(z)...                               */ \
                         traite_image_BH_GD(BLOC(Bblock                                                                                 \
                                                 Test(IFEQ(loadF_point(image_des_distances,X,Y),DISTANCES_ANORMALES_AVANT))             \
                                                      Bblock                                                                            \
                                                      storeF_point(distance_minimale                                                    \
                                                                  ,image_des_distances                                                  \
                                                                  ,X,Y                                                                  \
                                                                   );                                                                   \
                                        /* Les points pour lesquels on a evite '1/0' et 'Log(0)' avaient ete codes par               */ \
                                        /* 'DISTANCES_ANORMALES_AVANT' ; maintenant que l'on connait la plus petite distance d(z)    */ \
                                        /* recontree ('distance_minimale'), on leur donne cette valeur ; ainsi, l'appel a            */ \
                                        /* 'Ifloat_std_avec_renormalisation' ne sera pas perturbe par 'DISTANCES_ANORMALES_AVANT'... */ \
                                                      Eblock                                                                            \
                                                 ATes                                                                                   \
                                                      Bblock                                                                            \
                                                      Eblock                                                                            \
                                                 ETes                                                                                   \
                                                 Eblock                                                                                 \
                                                 )                                                                                      \
                                            );                                                                                          \
                         CALS(Ifloat_std_avec_renormalisation(imageR,image_des_distances));                                             \
                                        /* Conversion de l'image Resultat en une image standard...                                   */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' E N S E M B L E   D E   M A N D E L B R O T   C H E V E L U   C O M P L E X E                      */
/*        D A N S   U N E   F E N E T R E   S U I V A N T   U N   P R O C E S S U S   N O N   O P T I M I S E  :                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Soit la suite :                                                                                                */
/*                                                                                                                                   */
/*                                      Z    = 0                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                                              2                                                                                    */
/*                                      Z    = Z  + C                                                                                */
/*                                       n+1    n                                                                                    */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point courant).                                                                               */
/*                                                                                                                                   */
/*                    Soit sa derivee par rapport au point 'C' :                                                                     */
/*                                                                                                                                   */
/*                                      Z'   = 0                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                                      Z'   = 2.Z .Z' + 1                                                                           */
/*                                       n+1      n  n                                                                               */
/*                                                                                                                                   */
/*                    On definit ensuite la distance :                                                                               */
/*                                                                                                                                   */
/*                                                  |Z |                                                                             */
/*                                              1     n                                                                              */
/*                                      d(z) = ---.------.Log(|Z |)                                                                  */
/*                                              2   |Z'|        n                                                                    */
/*                                                    n                                                                              */
/*                                                                                                                                   */
/*                  elle est valable pour les petits modules,                                                                        */
/*                  et les grandes valeurs de 'n'...                                                                                 */
/*                                                                                                                                   */
/*                    Si d(z) devient inferieur a un certain                                                                         */
/*                  seuil, a lors 'C' appartient a l'ensemble                                                                        */
/*                  de Mandelbrot.                                                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Forme generale :                                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                                  **                                                               */
/*                                                                *****                                                              */
/*                                                                *****                                                              */
/*                                                        *   * ********* *                                                          */
/*                                                        ******************* **                                                     */
/*                                                       **********************                                                      */
/*                                                     **************************                                                    */
/*                                                    ****************************                                                   */
/*                                        * *****    ****************************                                                    */
/*                                      ***********  *****************************                                                   */
/*                                      ************ ****************************                                                    */
/*                   *********************************************************                                                       */
/*                                      ************ ****************************                                                    */
/*                                      ***********  *****************************                                                   */
/*                                        * *****    ****************************                                                    */
/*                                                    ****************************                                                   */
/*                                                     **************************                                                    */
/*                                                       **********************                                                      */
/*                                                        ******************* **                                                     */
/*                                                        *   * ********* *                                                          */
/*                                                                *****                                                              */
/*                                                                *****                                                              */
/*                                                                  **                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,POINTERp(Imandelbrot_chevelu_dans_C(imageR
                                                              ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                              ,ARGUMENT_POINTERs(coin_haut_droite)
                                                              ,nombre_maximal_d_iterations
                                                              ,seuil_de_la_distance
                                                              ,mode_de_visualisation
                                                              ,ARGUMENT_FACULTATIF(imageA)
                                                               )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Float,seuil_de_la_distance));
                                        /* Ce seuil permet de savoir a partir de quel moment on pense etre pres de l'ensemble.       */
DEFV(Argument,DEFV(Int,mode_de_visualisation));
                                        /* Il definit le mode visualisation demandee, et vaut :                                      */
                                        /* VISUALISATION_DU_NOMBRE_D_ITERATIONS, ou                                                  */
                                        /* VISUALISATION_DE_L_ARGUMENT_DE_SORTIE, ou                                                 */
                                        /* VISUALISATION_DES_ORBITES, ou enfin                                                       */
                                        /* VISUALISATION_DES_DISTANCES.                                                              */
DEFV(Argument,DEFV(image,imageA));
                                        /* Image Argument (facultatif) d'aide a la visualisation des orbites des points              */
                                        /* au cours des iterations ; son existence est conditionnee par 'mode_de_visualisation'.     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_CHEVELUE_DANS_C
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     F_INITIALISATION_DES_DISTANCES;
     traite_image_BH_GD(BLOC(F_ITERATION_CHEVELUE_DANS_C(BLOC(Bblock
                                                              Cegal(suite_point,C_____nombre_complexe__0__0);
                                        /* Initialisation de la suite des nombres complexes sur l'origine,                           */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  Z  = 0                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                        /* On notera que l'on pourrait optimiser, en partant directement sur 'C', mais la            */
                                        /* difference entre Julia et Mandelbrot ne serait plus evidente...                           */
                                                              Cegal(derivee_suite_point,C_____nombre_complexe__0__0);
                                        /* Initialisation de la derivee de la suite des nombres complexes,                           */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  dZ  = 0                                                                  */
                                        /*                    0                                                                      */
                                        /*                                                                                           */
                                                              Cegal(increment_de_la_derivee_suite_point,C_____nombre_complexe_p1__0);
                                        /* Initialisation de l'increment utilise dans le calcul de la derivee,                       */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  increment = (1,0)                                                        */
                                        /*                                                                                           */
                                                              CLIR(nombre_courant_d_iterations);
                                        /* Initialisation du compteur des iterations.                                                */
                                                              Eblock
                                                              )
                                                        ,BLOC(VIDE;
                                                              )
                                                        ,BLOC(Bblock
                                                              aCsomme(suite_point,point_manoeuvre,point_courant);
                                        /* Puis :                                                                                    */
                                        /*                                                                                           */
                                        /*                    2                                                                      */
                                        /*                  Z   + C                                                                  */
                                        /*                   n                                                                       */
                                        /*                                                                                           */
                                        /* ou 'C' designe le point complexe Courant.                                                 */
                                                              Eblock
                                                              )
                                                        ,BLOC(VIDE;
                                                              )
                                        /* Introduit le 20150225154041...                                                            */
                                                         );
                             )
                        );
     F_RENVOI_DES_DISTANCES;

     EVARIABLES_F_ITERATION_DANS_C

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' E N S E M B L E   D E   J U L I A   C H E V E L U   C O M P L E X E                                */
/*        D A N S   U N E   F E N E T R E   S U I V A N T   U N   P R O C E S S U S   N O N   O P T I M I S E  :                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Soit la suite :                                                                                                */
/*                                                                                                                                   */
/*                                      Z    = C                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point courant),                                                                               */
/*                                                                                                                                   */
/*                                              2                                                                                    */
/*                                      Z    = Z  + A                                                                                */
/*                                       n+1    n                                                                                    */
/*                                                                                                                                   */
/*                    Soit sa derivee par rapport au point 'C' :                                                                     */
/*                                                                                                                                   */
/*                                      Z'   = 1                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                                      Z'   = 2.Z .Z' + 0                                                                           */
/*                                       n+1      n  n                                                                               */
/*                                                                                                                                   */
/*                    On definit ensuite la distance :                                                                               */
/*                                                                                                                                   */
/*                                                  |Z |                                                                             */
/*                                              1     n                                                                              */
/*                                      d(z) = ---.------.Log(|Z |)                                                                  */
/*                                              2   |Z'|        n                                                                    */
/*                                                    n                                                                              */
/*                                                                                                                                   */
/*                  elle est valable pour les petits modules,                                                                        */
/*                  et les grandes valeurs de 'n'...                                                                                 */
/*                                                                                                                                   */
/*                    Si d(z) devient inferieur a un certain                                                                         */
/*                  seuil, a lors 'C' appartient a l'ensemble                                                                        */
/*                  de Julia calcule pour le nombre complexe 'A'.                                                                    */
/*                  (ou 'A' designe un nombre complexe                                                                               */
/*                  Argument arbitraire).                                                                                            */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Forme generale :                                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  *......                .....*....                                                                                */
/*                  *......*.................****...                                                                                 */
/*                  ********...............***.....                                                                                  */
/*                  ........**.............***.....                                                                                  */
/*                  .........**...........**........                                                                                 */
/*                  ..........***************........                                                                                */
/*                       ........**...***..******......                                                                              */
/*                          ....*............***.........                                                                            */
/*                             ...............**...........                                                                          */
/*                               ..............***....*..*..                                                                         */
/*                                  ..........********......                                                                         */
/*                                      ...........***......                                                                         */
/*                                        ..........**......                                                                         */
/*                                          ........*****..                                                                          */
/*                                           ........*.....                                                                          */
/*                                            .....*#*.....                                                                          */
/*                                            .....*........                                                                         */
/*                                            ..*****........                                                                        */
/*                                           ......**..........                                                                      */
/*                                           ......***...........                                                                    */
/*                                           ......********..........                                                                */
/*                                           ..*..*....***..............                                                             */
/*                                            ...........**...............                                                           */
/*                                              .........***............*....                                                        */
/*                                                ......******..***...**........                                                     */
/*                                                  ........***************.........                                                 */
/*                                                   ........**...........**........                                                 */
/*                                                    .....***.............**.......                                                 */
/*                                                    .....***...............*******                                                 */
/*                                                   ...****.................*......                                                 */
/*                                                  ....*.....                ......                                                 */
/*                                                  #***....                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,POINTERp(Ijulia_chevelu_dans_C(imageR
                                                         ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                         ,ARGUMENT_POINTERs(coin_haut_droite)
                                                         ,ARGUMENT_POINTERs(nombre_argument)
                                                         ,nombre_maximal_d_iterations
                                                         ,seuil_de_la_distance
                                                         ,mode_de_visualisation
                                                         ,ARGUMENT_FACULTATIF(imageA)
                                                          )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(complexe,POINTERs(nombre_argument)));
                                        /* Nombre complexe "generateur" de l'ensemble de Julia que l'on veut calculer.               */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Float,seuil_de_la_distance));
                                        /* Ce seuil permet de savoir a partir de quel moment on pense etre pres de l'ensemble.       */
DEFV(Argument,DEFV(Int,mode_de_visualisation));
                                        /* Il definit le mode visualisation demandee, et vaut :                                      */
                                        /* VISUALISATION_DU_NOMBRE_D_ITERATIONS, ou                                                  */
                                        /* VISUALISATION_DE_L_ARGUMENT_DE_SORTIE, ou                                                 */
                                        /* VISUALISATION_DES_ORBITES, ou enfin                                                       */
                                        /* VISUALISATION_DES_DISTANCES.                                                              */
DEFV(Argument,DEFV(image,imageA));
                                        /* Image Argument (facultatif) d'aide a la visualisation des orbites des points              */
                                        /* au cours des iterations ; son existence est conditionnee par 'mode_de_visualisation'.     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_CHEVELUE_DANS_C
     DEFV(complexe,point_argument);
                                        /* Point complexe argument.                                                                  */
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     Cegal(point_argument,INDIRECT(nombre_argument));
                                        /* Recuperation du nombre complexe "generateur"...                                           */
     F_INITIALISATION_DES_DISTANCES;
     traite_image_BH_GD(BLOC(F_ITERATION_CHEVELUE_DANS_C(BLOC(Bblock
                                                              Cegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres complexes sur le "point Courant" 'C',              */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  Z  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                                              Cegal(derivee_suite_point,C_____nombre_complexe_p1__0);
                                        /* Initialisation de la derivee de la suite des nombres complexes,                           */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  dZ  = 1                                                                  */
                                        /*                    0                                                                      */
                                        /*                                                                                           */
                                                              Cegal(increment_de_la_derivee_suite_point,C_____nombre_complexe__0__0);
                                        /* Initialisation de l'increment utilise dans le calcul de la derivee,                       */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  increment = (0,0)                                                        */
                                        /*                                                                                           */
                                                              CLIR(nombre_courant_d_iterations);
                                        /* Initialisation du compteur des iterations.                                                */
                                                              Eblock
                                                              )
                                                        ,BLOC(VIDE;
                                                              )
                                                        ,BLOC(Bblock
                                                              aCsomme(suite_point,point_manoeuvre,point_argument);
                                        /* Puis :                                                                                    */
                                        /*                                                                                           */
                                        /*                    2                                                                      */
                                        /*                  Z   + A                                                                  */
                                        /*                   n                                                                       */
                                        /*                                                                                           */
                                        /* ou 'A' designe le point complexe Argument.                                                */
                                                              Eblock
                                                              )
                                                        ,BLOC(VIDE;
                                                              )
                                        /* Introduit le 20150225154041...                                                            */
                                                         );
                             )
                        );
     F_RENVOI_DES_DISTANCES;

     EVARIABLES_F_ITERATION_DANS_C

     RETI(imageR);
     Eblock

EFonctionP

#undef    F_RENVOI_DES_DISTANCES
#undef    F_INITIALISATION_DES_DISTANCES
#undef    F_ITERATION_CHEVELUE_DANS_C
#undef    DISTANCES_ANORMALES_APRES
#undef    DISTANCES_ANORMALES_AVANT
#undef    EVARIABLES_F_ITERATION_DANS_C
#undef    TEST_D_OVERFLOW_D_UNE_SUITE_COMPLEXE
#undef    TEST_D_UNDERFLOW_D_UNE_SUITE_COMPLEXE
#undef    INITIALISATION_DU_POINT_COURANT_DANS_C
#undef    BVARIABLES_F_ITERATION_CHEVELUE_DANS_C

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O N T R O L E   D E   L ' A R I T H M E T I Q U E   E T E N D U E                                                        */
/*        L O R S   D E   C A L C U L S   S U R   L E S   N O M B R E S   H Y P E R - C O M P L E X E S  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#ifdef    FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_COMPLEXES
DEFV(Common,DEFV(Logical,_______VERSION__ximcf_iterations_____ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_COMPLEXES));
                                        /* Indicateur introduit le 20070129121923...                                                 */
#Aifdef   FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_COMPLEXES
DEFV(Common,DEFV(Logical,_______VERSION__ximcf_iterations_____ARITHMETIQUE_DE_BASE_DANS_LES_NOMBRES_HYPER_COMPLEXES));
                                        /* Indicateur introduit le 20070129133050...                                                 */
#Eifdef   FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_COMPLEXES

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S E U I L   D U   M O D U L E  :                                                                                           */
/*        D A N S   L ' E S P A C E   H Y P E R - C O M P L E X E  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   TEST_DU_CARRE_DU_MODULE_DANS_HC(seuil)                                                                                        \
                    IFLT(HCmodule2(suite_point),seuil)                                                                                  \
                                        /* Test quelconque de continuation des iterations dans 'F_ITERATION_DANS_HC(...)'.           */

#define   SEUIL_MODULE_DANS_HC                                                                                                          \
                    EXP2(DOUB(UNITE))
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_HC_____seuil_du_carre_du_module
                           ,SEUIL_MODULE_DANS_HC
                            )
                 )
     );
                                        /* Seuil de divergence du carre du module d'un nombre hyper-complexe de la suite.            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A L I T E   S U R   L E S    I N V E R S I O N S  :                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PARAMETRE_D_INVERSION_Ri2                                                                                                     \
                    EXP2(FDU)
#define   PARAMETRE_D_INVERSION_Rs2                                                                                                     \
                    EXP2(FU)
                                        /* Parametres introduits le 20121104074503...                                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E P L I E M E N T   E V E N T U E L   D E   L ' E S P A C E   H Y P E R - C O M P L E X E  :                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____replier_l_espace,ITERATIONS_DIVERSES_____REPLIER_L_ESPACE)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____Rorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____Rextremite,ITERATIONS_DIVERSES_____EXTREMITE)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____Iorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____Iextremite,ITERATIONS_DIVERSES_____EXTREMITE)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____Jorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____Jextremite,ITERATIONS_DIVERSES_____EXTREMITE)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____Korigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____Kextremite,ITERATIONS_DIVERSES_____EXTREMITE)));
                                        /* Possibilite introduite le 20121103095740...                                               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   N E C E S S A I R E S   A U   C A L C U L   E N   " F L O T T A N T "                                  */
/*        D A N S   L ' E S P A C E   H Y P E R - C O M P L E X E  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(iterations_diverses_dans_HC_____centrer_la_rotation_3D_dans_la_fenetre,FAUX)));
                                        /* Introduit le 20121227110206 afin de faciliter le changement de centre de rotation...      */
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_HC_____X_centre_de_rotation_3D,FZERO)));
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_HC_____Y_centre_de_rotation_3D,FZERO)));
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_HC_____Z_centre_de_rotation_3D,FZERO)));
                                        /* Introduit le 20091222133804 pour generaliser le processus de rotation. La valeur par      */
                                        /* defaut garantit la compatibilite anterieure...                                            */

#define   ROTATION_TRIDIMENSIONNELLE_DANS_HC(point_apres_rotation,point_avant_rotation)                                                 \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(X_centre_de_rotation_3D,iterations_diverses_dans_HC_____X_centre_de_rotation_3D));                  \
                    DEFV(Float,INIT(Y_centre_de_rotation_3D,iterations_diverses_dans_HC_____Y_centre_de_rotation_3D));                  \
                    DEFV(Float,INIT(Z_centre_de_rotation_3D,iterations_diverses_dans_HC_____Z_centre_de_rotation_3D));                  \
                                        /* Definition du centre de rotation tridimensionnel par defaut...                            */ \
                                                                                                                                        \
                    Test(IL_FAUT(iterations_diverses_dans_HC_____centrer_la_rotation_3D_dans_la_fenetre))                               \
                         Bblock                                                                                                         \
                         EGAL(X_centre_de_rotation_3D                                                                                   \
                             ,MOYE(Reelle(INDIRECT(coin_bas_gauche)),Reelle(INDIRECT(coin_haut_droite)))                                \
                              );                                                                                                        \
                         EGAL(Y_centre_de_rotation_3D                                                                                   \
                             ,MOYE(Imaginaire(INDIRECT(coin_bas_gauche)),Imaginaire(INDIRECT(coin_haut_droite)))                        \
                              );                                                                                                        \
                         EGAL(Z_centre_de_rotation_3D                                                                                   \
                             ,composante_J                                                                                              \
                              );                                                                                                        \
                                        /* Positionnement du centre de rotation tridimensionnelle au centre de la fenetre...         */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    HCinitialisation(point_apres_rotation                                                                               \
                                    ,ADD2(TRANSFORMATION_GEOMETRIQUE_3D_Fx(SOUS(HReelle(point_avant_rotation)                           \
                                                                               ,X_centre_de_rotation_3D                                 \
                                                                                )                                                       \
                                                                          ,SOUS(HImaginaire(point_avant_rotation)                       \
                                                                               ,Y_centre_de_rotation_3D                                 \
                                                                                )                                                       \
                                                                          ,SOUS(HJmaginaire(point_avant_rotation)                       \
                                                                               ,Z_centre_de_rotation_3D                                 \
                                                                                )                                                       \
                                                                          ,NE_PAS_TRANSLATER_LORS_DE_TRANSFORMATION_GEOMETRIQUE_3D_Fxyz \
                                                                           )                                                            \
                                         ,X_centre_de_rotation_3D                                                                       \
                                          )                                                                                             \
                                    ,ADD2(TRANSFORMATION_GEOMETRIQUE_3D_Fy(SOUS(HReelle(point_avant_rotation)                           \
                                                                               ,X_centre_de_rotation_3D                                 \
                                                                                )                                                       \
                                                                          ,SOUS(HImaginaire(point_avant_rotation)                       \
                                                                               ,Y_centre_de_rotation_3D                                 \
                                                                                )                                                       \
                                                                          ,SOUS(HJmaginaire(point_avant_rotation)                       \
                                                                               ,Z_centre_de_rotation_3D                                 \
                                                                                )                                                       \
                                                                          ,NE_PAS_TRANSLATER_LORS_DE_TRANSFORMATION_GEOMETRIQUE_3D_Fxyz \
                                                                           )                                                            \
                                         ,Y_centre_de_rotation_3D                                                                       \
                                          )                                                                                             \
                                    ,ADD2(TRANSFORMATION_GEOMETRIQUE_3D_Fz(SOUS(HReelle(point_avant_rotation)                           \
                                                                               ,X_centre_de_rotation_3D                                 \
                                                                                )                                                       \
                                                                          ,SOUS(HImaginaire(point_avant_rotation)                       \
                                                                               ,Y_centre_de_rotation_3D                                 \
                                                                                )                                                       \
                                                                          ,SOUS(HJmaginaire(point_avant_rotation)                       \
                                                                               ,Z_centre_de_rotation_3D                                 \
                                                                                )                                                       \
                                                                          ,NE_PAS_TRANSLATER_LORS_DE_TRANSFORMATION_GEOMETRIQUE_3D_Fxyz \
                                                                           )                                                            \
                                         ,Z_centre_de_rotation_3D                                                                       \
                                          )                                                                                             \
                                    ,NEUT(HKmaginaire(point_avant_rotation))                                                            \
                                     );                                                                                                 \
                                        /* Rotation du point Argument par rapport aux trois premiers axes...                         */ \
                    Eblock                                                                                                              \
                                        /* Rotation d'un point hyper-complexe par rapport aux trois premiers axes...                 */

#define   BVARIABLES_F_ITERATION_DANS_HC                                                                                                \
                                        /* Definition des variables communes a 'Julia' et 'Mandelbrot'.                              */ \
                    BVARIABLES_D_HOMOTHETIE_C_HC_HHC                                                                                    \
                                        /* "Taille" reelle et imaginaire de la fenetre rapportee a la taille des images.             */ \
                    DEFV(hyper_complexe,point_courant);                                                                                 \
                                        /* Point hyper-complexe courant 'C' dans la fenetre.                                         */ \
                    DEFV(hyper_complexe,suite_point);                                                                                   \
                                        /* Suite des points hyper-complexes Q  lors de l'iteration.                                  */ \
                                        /*                                   n                                                       */ \
                    DEFV(hyper_complexe,point_manoeuvre);                                                                               \
                                        /* Point hyper-complexe de maneuvre lors de l'iteration.                                     */ \
                    VARIABLES_COMMUNES_DES_ITERATIONS_DANS_C_HC_HHC;

#define   INITIALISATION_DU_POINT_COURANT_DANS_HC                                                                                       \
                                        /* Sequence de calcul de la valeur a donner au point courant {X,Y}.                          */ \
                    Bblock                                                                                                              \
                    DEFV(hyper_complexe,point_courant_avant_rotation);                                                                  \
                                        /* Point de manoeuvre...                                                                     */ \
                                                                                                                                        \
                    HCinitialisation(point_courant_avant_rotation,X_IMAGE_PLAN(X),Y_IMAGE_PLAN(Y),composante_J,composante_K);           \
                                        /* Le "point_courant" 'C' est le point courant {X,Y} sur le maillage de l'image auquel       */ \
                                        /* on "adjoint" les 'composante_J' et 'composante_K' pour passer dans l'hyper-espace.        */ \
                    ROTATION_TRIDIMENSIONNELLE_DANS_HC(point_courant,point_courant_avant_rotation);                                     \
                                        /* Rotation (eventuelle) du point courant...                                                 */ \
                    Eblock                                                                                                              \
                                        /* Initialisation du point hyper-complexe courant sur un maillage {X,Y}.                     */

#define   TEST_D_UNDERFLOW_D_UNE_SUITE_HYPER_COMPLEXE(suite_hyper_complexe,epsilon)                                                     \
                    Bblock                                                                                                              \
                    EGAL(HReelle(suite_hyper_complexe),TROP_PETIT(HReelle(suite_hyper_complexe),epsilon));                              \
                    EGAL(HImaginaire(suite_hyper_complexe),TROP_PETIT(HImaginaire(suite_hyper_complexe),epsilon));                      \
                    EGAL(HJmaginaire(suite_hyper_complexe),TROP_PETIT(HJmaginaire(suite_hyper_complexe),epsilon));                      \
                    EGAL(HKmaginaire(suite_hyper_complexe),TROP_PETIT(HKmaginaire(suite_hyper_complexe),epsilon));                      \
                                        /* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter des underflows       */ \
                                        /* flottants...                                                                              */ \
                    Eblock                                                                                                              \
                                        /* Test des underflows d'une suite hyper-complexe...                                         */
#define   TEST_D_OVERFLOW_D_UNE_SUITE_HYPER_COMPLEXE(suite_hyper_complexe,anti_epsilon)                                                 \
                    Bblock                                                                                                              \
                    EGAL(HReelle(suite_hyper_complexe),TROP_GRAND(HReelle(suite_hyper_complexe),anti_epsilon));                         \
                    EGAL(HImaginaire(suite_hyper_complexe),TROP_GRAND(HImaginaire(suite_hyper_complexe),anti_epsilon));                 \
                    EGAL(HJmaginaire(suite_hyper_complexe),TROP_GRAND(HJmaginaire(suite_hyper_complexe),anti_epsilon));                 \
                    EGAL(HKmaginaire(suite_hyper_complexe),TROP_GRAND(HKmaginaire(suite_hyper_complexe),anti_epsilon));                 \
                                        /* Lorsqu'une composante devient trop grande, on la plafonne afin d'eviter des underflows    */ \
                                        /* flottants...                                                                              */ \
                    Eblock                                                                                                              \
                                        /* Test des overflows d'une suite hyper-complexe...                                          */

DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point,FAUX)));
                                        /* Introduit le 20100513131115 afin de permettre, par exemple, la generation d'objet de      */
                                        /* type "MandelBox". On notera que cela n'est pas fait pour les nombres complexes car, en    */
                                        /* effet, il suffit d'utiliser les nombres hyper-complexes avec des composantes {J,K} nulles */
                                        /* pour etre dans le plan complexe...                                                        */
DEFV(Common,DEFV(Positive,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__nombre_repetitions,UN)));
                                        /* Introduit le 20100520113838 afin de permettre d'iterer ces transformations...             */

DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement,VRAI)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_S__R,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_lineaire__R,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_polynomial__R,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_sinusoidal__R,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xn__R,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yn__R,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xp__R,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yp__R,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_E__R,UN)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_S__I,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_lineaire__I,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_polynomial__I,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_sinusoidal__I,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xn__I,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yn__I,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xp__I,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yp__I,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_E__I,UN)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_S__J,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_lineaire__J,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_polynomial__J,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_sinusoidal__J,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xn__J,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yn__J,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xp__J,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yp__J,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_E__J,UN)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_S__K,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_lineaire__K,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_polynomial__K,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_sinusoidal__K,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xn__K,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yn__K,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xp__K,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yp__K,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_E__K,UN)));

#define   REPLIEMENT_AFFINE_PAR_MORCEAUX_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante)                                 \
                                        /* Procedure introduite le 20100602085411...                                                 */ \
                    CON02(IFLT(valeur_de_la_composante                                                                                  \
                              ,gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xn`nom_de_la_composante                    \
                               )                                                                                                        \
                         ,AXPB(NEGA(DIVZ(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yn`nom_de_la_composante          \
                                        ,gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xn`nom_de_la_composante          \
                                         )                                                                                              \
                                    )                                                                                                   \
                              ,valeur_de_la_composante                                                                                  \
                              ,DOUB(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yn`nom_de_la_composante)              \
                               )                                                                                                        \
                         ,IFGT(valeur_de_la_composante                                                                                  \
                              ,gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xp`nom_de_la_composante                    \
                               )                                                                                                        \
                         ,AXPB(NEGA(DIVZ(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yp`nom_de_la_composante          \
                                        ,gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xp`nom_de_la_composante          \
                                         )                                                                                              \
                                    )                                                                                                   \
                              ,valeur_de_la_composante                                                                                  \
                              ,DOUB(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_yp`nom_de_la_composante)              \
                               )                                                                                                        \
                         ,NEUT(valeur_de_la_composante)                                                                                 \
                          )                                                                                                             \
                                        /* Repliement d'une composante {R,I,J,K} suivant (avec un "Signe" positif) :                 */ \
                                        /*                                                                                           */ \
                                        /*                                            ^                                              */ \
                                        /*                                            |                                              */ \
                                        /*                        \                   |                                              */ \
                                        /*                         \                  |                                              */ \
                                        /*                          \               yp*. . .*                                        */ \
                                        /*                           \                |    /.\                                       */ \
                                        /*                            \               |   / . \                                      */ \
                                        /*                             \              |  /  .  \                                     */ \
                                        /*                              \             | /   .   \                                    */ \
                                        /*                               \      xn    |/    .    \ 2.xp                              */ \
                                        /*                        --------*-----*-----O-----*-----*-------------------->             */ \
                                        /*                            2.xn \    .    /|     xp     \                                 */ \
                                        /*                                  \   .   / |             \                                */ \
                                        /*                                   \  .  /  |              \                               */ \
                                        /*                                    \ . /   |               \                              */ \
                                        /*                                     \./    |                \                             */ \
                                        /*                                      *. . .*yn               \                            */ \
                                        /*                                            |                  \                           */ \
                                        /*                                            |                   \                          */ \
                                        /*                                                                                           */ \
                                        /* (avec "n" pour "Negatif" et "p" pour "Positif"), le "Signe" negatif permettant de faire   */ \
                                        /* une symetrie par rapport a l'axe des abscisses...                                         */
#define   REPLIEMENT_POLYNOMIAL_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante)                                          \
                                        /* Procedure introduite le 20100602085411...                                                 */ \
                    MUL2(NEGA(valeur_de_la_composante)                                                                                  \
                        ,EXPn(MUL2(SOUS(valeur_de_la_composante                                                                         \
                                       ,DOUB(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xn`nom_de_la_composante)     \
                                        )                                                                                               \
                                  ,SOUS(valeur_de_la_composante                                                                         \
                                       ,DOUB(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xp`nom_de_la_composante)     \
                                        )                                                                                               \
                                   )                                                                                                    \
                             ,gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_E`nom_de_la_composante                      \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Repliement d'une composante {R,I,J,K} a l'aide d'un polynome (de degre impair de          */ \
                                        /* preference si l'on souhaite "simuler" le "zig-zag" affine par morceaux...) dont les       */ \
                                        /* intersections avec les axes sont donnees par les racines {2.xn,0,2.xp}.                   */
#define   REPLIEMENT_SINUSOIDAL_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante)                                          \
                                        /* Procedure introduite le 20100604142838...                                                 */ \
                    SINX(SCAL(valeur_de_la_composante                                                                                   \
                             ,DOUB(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_xp`nom_de_la_composante)               \
                             ,PI                                                                                                        \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Repliement d'une composante {R,I,J,K} a l'aide d'une sinusoide dont les intersections     */ \
                                        /* avec les axes sont donnees par les racines {2.xp+k.pi}.                                   */

#define   REPLIEMENT_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante)                                                     \
                    MUL2(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_S`nom_de_la_composante                           \
                        ,CON03(IL_FAUT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_lineaire`nom_de_la_composante)     \
                              ,REPLIEMENT_AFFINE_PAR_MORCEAUX_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante)            \
                              ,IL_FAUT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_polynomial`nom_de_la_composante)   \
                              ,REPLIEMENT_POLYNOMIAL_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante)                     \
                              ,IL_FAUT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement_sinusoidal`nom_de_la_composante)   \
                              ,REPLIEMENT_SINUSOIDAL_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante)                     \
                              ,valeur_de_la_composante                                                                                  \
                               )                                                                                                        \
                         )                                                                                                              \
                                        /* Repliement d'une composante {R,I,J,K}, le "Signe" negatif permettant de faire             */ \
                                        /* une symetrie par rapport a l'axe des abscisses...                                         */ \
                                        /*                                                                                           */ \
                                        /* Introduit le 20100513131115 afin de permettre, par exemple, la generation d'objet de      */ \
                                        /* type "MandelBox"...                                                                       */ \
                                        /*                                                                                           */ \
                                        /* Le 20100519110626 fut introduite la possibilite de remplacer ce "zig-zag" par une courbe  */ \
                                        /* du troisieme degre (par defaut) de meme allure et dont les intersections avec les axes    */ \
                                        /* sont donnees par les racines {2.xn,0,2.xp}.                                               */ \
                                        /*                                                                                           */ \
                                        /* Le 20100604142838 fut introduite la possibilite de remplacer ce "zig-zag" par une         */ \
                                        /* sinusoide dont les intersections avec les axes sont donnees par les racines {2.xp+k.pi}.  */

DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion,VRAI)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Ri2__R,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Rs2__R,PARAMETRE_D_INVERSION_Rs2)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Ri2__I,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Rs2__I,PARAMETRE_D_INVERSION_Rs2)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Ri2__J,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Rs2__J,PARAMETRE_D_INVERSION_Rs2)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Ri2__K,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Rs2__K,PARAMETRE_D_INVERSION_Rs2)));

#define   INVERSION_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante,carre_du_module)                                      \
                    CON02(IFLE(carre_du_module                                                                                          \
                              ,gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Ri2`nom_de_la_composante                    \
                               )                                                                                                        \
                         ,DIVZ(valeur_de_la_composante                                                                                  \
                              ,gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Ri2`nom_de_la_composante                    \
                               )                                                                                                        \
                         ,IFINof(carre_du_module                                                                                        \
                                ,gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Ri2`nom_de_la_composante                  \
                                ,gF_ITERATION_DANS_HC_____transformer__suite_point__inversion_Rs2`nom_de_la_composante                  \
                                 )                                                                                                      \
                         ,DIVZ(valeur_de_la_composante                                                                                  \
                              ,carre_du_module                                                                                          \
                               )                                                                                                        \
                         ,valeur_de_la_composante                                                                                       \
                          )                                                                                                             \
                                        /* Inversion d'une composante {R,I,J,K} a l'aide d'un rayon "Inferieur" et d'un rayon        */ \
                                        /* "Superieur". Au dessus du rayon "Superieur", la valeur de la composante est conservee.    */ \
                                        /* Entre le rayon "Inferieur" et le rayon "Superieur", la composante subit une inversion     */ \
                                        /* par rapport a l'hyper-sphere unite. Enfin, en dessous du rayon "Inferieur", la composante */ \
                                        /* subit une inversion "etrange"...                                                          */ \
                                        /*                                                                                           */ \
                                        /* Introduit le 20100513131115 afin de permettre, par exemple, la generation d'objet de      */ \
                                        /* type "MandelBox"...                                                                       */

DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire,VRAI)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_A__R,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_B__R,FZERO)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_A__I,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_B__I,FZERO)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_A__J,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_B__J,FZERO)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_A__K,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_B__K,FZERO)));

#define   TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante)                                        \
                    AXPB(gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_A`nom_de_la_composante              \
                        ,valeur_de_la_composante                                                                                        \
                        ,gF_ITERATION_DANS_HC_____transformer__suite_point__transformation_lineaire_B`nom_de_la_composante              \
                         )                                                                                                              \
                                        /* Transformation lineaire d'une composante {R,I,J,K}.                                       */ \
                                        /*                                                                                           */ \
                                        /* Introduit le 20100513131115 afin de permettre, par exemple, la generation d'objet de      */ \
                                        /* type "MandelBox"...                                                                       */

#define   gF_ITERATION_DANS_HC__INITIALISATIONS_DIVERSES                                                                                \
                    Bblock                                                                                                              \
                    BLOC(VIDE;);                                                                                                        \
                    Eblock                                                                                                              \
                                        /* Introduit le 20210206174951...                                                            */

#define   gF_ITERATION_DANS_HC(test_d_arret,initialisation_point_courant,init_iteration,calculs_communs,fonc_iteration,fin_iteration)   \
                                        /* Sequence de calcul de la valeur a donner au point courant {X,Y}.                          */ \
                                        /*                                                                                           */ \
                                        /* L'argument 'initialisation_point_courant' a ete introduit le 20091012111043, par exemple  */ \
                                        /* pour permettre de definir le "point_courant" autrement que comme etant le point courant   */ \
                                        /* {X,Y} sur le maillage de l'image (par exemple via deux matrices d'indirection, une pour   */ \
                                        /* chaque coordonnee 'X' et 'Y').                                                            */ \
                                        /*                                                                                           */ \
                                        /* L'argument 'fin_iteration' a ete introduit le 20150225152454...                           */ \
                    Bblock                                                                                                              \
                    INITIALISATION_TRANSFORMATION;                                                                                      \
                                        /* Au cas ou une rotation tridimensionnelle serait demandee...                               */ \
                                                                                                                                        \
                    BLOC(initialisation_point_courant);                                                                                 \
                                        /* Le "point_courant" 'C' est a priori le point courant {X,Y} sur le maillage de l'image.    */ \
                                                                                                                                        \
                    BLOC(init_iteration);                                                                                               \
                                        /* Initialisation de la suite des nombres hyper-complexes sur le "point_courant", soit :     */ \
                                        /*                                                                                           */ \
                                        /*                  Q  = 0                                                                   */ \
                                        /*                   0                                                                       */ \
                                        /*                                                                                           */ \
                                        /* ou :                                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  Q  = C                                                                   */ \
                                        /*                   0                                                                       */ \
                                        /*                                                                                           */ \
                                        /* et, initialisation du compteur des iterations.                                            */ \
                                                                                                                                        \
                    Tant(IFET(test_d_arret                                                                                              \
                             ,PAS_ASSEZ_D_ITERATIONS                                                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(gF_ITERATION_DANS_HC_____transformer__suite_point))                                               \
                              Bblock                                                                                                    \
                                        /* Introduit le 20100513131115 afin de permettre, par exemple, la generation d'objet de      */ \
                                        /* type "MandelBox"...                                                                       */ \
                              Repe(gF_ITERATION_DANS_HC_____transformer__suite_point__nombre_repetitions)                               \
                                   Bblock                                                                                               \
                                        /* Introduit le 20100520113838...                                                            */ \
                                   Test(IL_FAUT(gF_ITERATION_DANS_HC_____transformer__suite_point__repliement))                         \
                                        Bblock                                                                                          \
                                        DEFV(hyper_complexe,suite_point_manoeuvre);                                                     \
                                                                                                                                        \
                                        HCinitialisation(suite_point_manoeuvre                                                          \
                                                        ,REPLIEMENT_D_UNE_COMPOSANTE(_R,HReelle(suite_point))                           \
                                                        ,REPLIEMENT_D_UNE_COMPOSANTE(_I,HImaginaire(suite_point))                       \
                                                        ,REPLIEMENT_D_UNE_COMPOSANTE(_J,HJmaginaire(suite_point))                       \
                                                        ,REPLIEMENT_D_UNE_COMPOSANTE(_K,HKmaginaire(suite_point))                       \
                                                         );                                                                             \
                                        /* On notera que les composantes s'appellent {_R,_I,_J,_K}, alors qu'il aurait ete           */ \
                                        /* evidemment plus logique de les appeler {R,I,J,K}. Le probleme vient du fait que           */ \
                                        /* le symbole 'I' est defini ('v $xil/defi_K1$vv$DEF .define...I.') et ne peut donc          */ \
                                        /* etre utilise ici...                                                                       */ \
                                        HCegal(suite_point,suite_point_manoeuvre);                                                      \
                                        /* Repliement de 'suite_point'...                                                            */ \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                                                                                                                        \
                                   Test(IL_FAUT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion))                          \
                                        Bblock                                                                                          \
                                        DEFV(Float,INIT(module2__suite_point,HCmodule2(suite_point)));                                  \
                                        DEFV(hyper_complexe,suite_point_manoeuvre);                                                     \
                                                                                                                                        \
                                        HCinitialisation(suite_point_manoeuvre                                                          \
                                                        ,INVERSION_D_UNE_COMPOSANTE(_R,HReelle(suite_point),module2__suite_point)       \
                                                        ,INVERSION_D_UNE_COMPOSANTE(_I,HImaginaire(suite_point),module2__suite_point)   \
                                                        ,INVERSION_D_UNE_COMPOSANTE(_J,HJmaginaire(suite_point),module2__suite_point)   \
                                                        ,INVERSION_D_UNE_COMPOSANTE(_K,HKmaginaire(suite_point),module2__suite_point)   \
                                                         );                                                                             \
                                        HCegal(suite_point,suite_point_manoeuvre);                                                      \
                                        /* Inversion de 'suite_point'...                                                             */ \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                                                                                                                        \
                                   Test(IL_FAUT(gF_ITERATION_DANS_HC_____transformer__suite_point__inversion))                          \
                                        Bblock                                                                                          \
                                        DEFV(hyper_complexe,suite_point_manoeuvre);                                                     \
                                                                                                                                        \
                                        HCinitialisation(suite_point_manoeuvre                                                          \
                                                        ,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_R,HReelle(suite_point))              \
                                                        ,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_I,HImaginaire(suite_point))          \
                                                        ,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_J,HJmaginaire(suite_point))          \
                                                        ,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_K,HKmaginaire(suite_point))          \
                                                         );                                                                             \
                                        HCegal(suite_point,suite_point_manoeuvre);                                                      \
                                        /* Transformation lineaire  de 'suite_point'...                                              */ \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              ERep                                                                                                      \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         BLOC(calculs_communs);                                                                                         \
                                                                                                                                        \
                         INCR(nombre_courant_d_iterations,I);                                                                           \
                                                                                                                                        \
                         BLOC(fonc_iteration);                                                                                          \
                                        /* Puis :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                    2                                                                      */ \
                                        /*                  Q   + C                                                                  */ \
                                        /*                   n                                                                       */ \
                                        /*                                                                                           */ \
                                        /* ou :                                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                    2                                                                      */ \
                                        /*                  Q   + A                                                                  */ \
                                        /*                   n                                                                       */ \
                                        /*                                                                                           */ \
                                                                                                                                        \
                         Test(IL_FAUT(gF_ITERATION_DANS_HC_____replier_l_espace))                                                       \
                              Bblock                                                                                                    \
                              DEFV(hyper_complexe,suite_point_manoeuvre);                                                               \
                                                                                                                                        \
                              aHCmodulo(suite_point_manoeuvre                                                                           \
                                       ,suite_point                                                                                     \
                                       ,gF_ITERATION_DANS_HC_____Rorigine__                                                             \
                                       ,gF_ITERATION_DANS_HC_____Rextremite                                                             \
                                       ,gF_ITERATION_DANS_HC_____Iorigine__                                                             \
                                       ,gF_ITERATION_DANS_HC_____Iextremite                                                             \
                                       ,gF_ITERATION_DANS_HC_____Jorigine__                                                             \
                                       ,gF_ITERATION_DANS_HC_____Jextremite                                                             \
                                       ,gF_ITERATION_DANS_HC_____Korigine__                                                             \
                                       ,gF_ITERATION_DANS_HC_____Kextremite                                                             \
                                        );                                                                                              \
                                        /* Repliement eventuel de l'espace introduit le 20121103101108...                            */ \
                                                                                                                                        \
                              HCegal(suite_point,suite_point_manoeuvre);                                                                \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         TEST_D_UNDERFLOW_D_UNE_SUITE_HYPER_COMPLEXE(suite_point,iterations_dans_C_HC_HHC_____epsilon);                 \
                                        /* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter                      */ \
                                        /* des underflows flottants...                                                               */ \
                         Eblock                                                                                                         \
                    ETan                                                                                                                \
                                                                                                                                        \
                    Test(IL_FAUT(visualisation_arguments_de_sortie))                                                                    \
                         Bblock                                                                                                         \
                         Test(IL_NE_FAUT_PAS(iterations_dans_C_HC_HHC_____memoriser_le_module_plutot_que_les_arguments))                \
                              Bblock                                                                                                    \
                              EGAL(niveau_courant_precis                                                                                \
                                  ,LRZ3(ponderation_argumentT,HCargumentT_2PI(suite_point)                                              \
                                       ,ponderation_argumentP,HCargumentP_2PI(suite_point)                                              \
                                       ,ponderation_argumentA,HCargumentA_2PI(suite_point)                                              \
                                        )                                                                                               \
                                   );                                                                                                   \
                              EGAL(niveau_courant                                                                                       \
                                  ,GENP(SCAL(niveau_courant_precis                                                                      \
                                            ,CERCLE_TRIGONOMETRIQUE                                                                     \
                                            ,BLANC                                                                                      \
                                             )                                                                                          \
                                        )                                                                                               \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              EGAL(niveau_courant_precis                                                                                \
                                  ,HCmodule(suite_point)                                                                                \
                                   );                                                                                                   \
                              EGAL(niveau_courant                                                                                       \
                                  ,GENP(SCAL(TRON(niveau_courant_precis                                                                 \
                                                 ,iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments   \
                                                 ,iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments   \
                                                  )                                                                                     \
                                            ,SOUS(iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments   \
                                                 ,iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments   \
                                                  )                                                                                     \
                                            ,BLANC                                                                                      \
                                             )                                                                                          \
                                        )                                                                                               \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Test(IL_NE_FAUT_PAS(iterations_dans_C_HC_HHC_____visualiser_l_appartenance_plutot_que_le_nombre_d_iterations)) \
                                        /* Test introduit le 20091119165650...                                                       */ \
                              Bblock                                                                                                    \
                              EGAL(niveau_courant_precis                                                                                \
                                  ,CASP_Float(nombre_courant_d_iterations)                                                              \
                                   );                                                                                                   \
                                        /* La procedure 'CASP_Float(...)' a remplace un 'CASP(genere_Float,...)' le 20090331103211.  */ \
                              EGAL(niveau_courant                                                                                       \
                                  ,GENP(COND(IL_FAUT(iterations_dans_C_HC_HHC_____renormaliser_le_nombre_d_iterations)                  \
                                            ,SCAL(nombre_courant_d_iterations                                                           \
                                                 ,nombre_maximal_d_iterations                                                           \
                                                 ,BLANC                                                                                 \
                                                  )                                                                                     \
                                            ,nombre_courant_d_iterations                                                                \
                                             )                                                                                          \
                                        )                                                                                               \
                                   );                                                                                                   \
                                        /* Visualisation du nombre d'iterations...                                                   */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              EGAL(niveau_courant_precis                                                                                \
                                  ,COND(PAS_ASSEZ_D_ITERATIONS                                                                          \
                                       ,fNON_APPARTENANCE_A_L_ENSEMBLE                                                                  \
                                       ,fAPPARTENANCE_A_L_ENSEMBLE                                                                      \
                                        )                                                                                               \
                                   );                                                                                                   \
                              EGAL(niveau_courant                                                                                       \
                                  ,COND(PAS_ASSEZ_D_ITERATIONS                                                                          \
                                       ,NON_APPARTENANCE_A_L_ENSEMBLE                                                                   \
                                       ,APPARTENANCE_A_L_ENSEMBLE                                                                       \
                                        )                                                                                               \
                                   );                                                                                                   \
                                        /* Visualisation de la non appartenance ('NOIR') et de l'appartenance ('BLANC'). Cette       */ \
                                        /* possibilite a ete introduite le 20091119165650 afin de faciliter les choses...            */ \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                        /* Calcul du niveau du point, ou l'on notera que 'visualisation_arguments_de_sortie' n'a     */ \
                                        /* plus de sens dans les quaternions...                                                      */ \
                                                                                                                                        \
                    RANGEMENT_DU_NIVEAU_COURANT_ET_EVENTUELLEMENT_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;              \
                                        /* Et enfin, marquage du point courant.                                                      */ \
                                                                                                                                        \
                    BLOC(fin_iteration);                                                                                                \
                                        /* Cette possibilite a ete introduite le 20150225152454...                                   */ \
                    Eblock

DEFV(Common,DEFV(Logical,ZINT(F_ITERATION_DANS_HC_____compatibilite_20110825,FAUX)));
                                        /* Introduit le 20110825111448 car, en effet pour le calcul du carre, les methodes           */
                                        /* 'HCproduit(...)' et 'HCpuissance(...)' ne donnent evidemment le meme resultat que         */
                                        /* si le produit theorique est utilise. Dans le cas contraire, on a :                        */
                                        /*                                                                                           */
                                        /*                   2                                                                       */
                                        /*                  q  # 1.q.q                                                               */
                                        /*                                                                                           */
                                        /* ce que j'avais neglige dans un premier temps...                                           */

#define   F_ITERATION_DANS_HC(test_d_arret,init_iteration,fonc_iteration,exposant,fin_iteration)                                        \
                                        /* Sequence de calcul de la valeur a donner au point courant {X,Y}.                          */ \
                                        /*                                                                                           */ \
                                        /* L'argument 'fin_iteration' a ete introduit le 20150225152454...                           */ \
                    Bblock                                                                                                              \
                    Test(IFET(IL_FAUT(F_ITERATION_DANS_HC_____compatibilite_20110825),IFNE(exposant,FDEUX)))                            \
                         Bblock                                                                                                         \
                         PRINT_ATTENTION("la compatibilite 20110825 des iterations hyper-complexes impose le second degre");            \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    gF_ITERATION_DANS_HC(test_d_arret                                                                                   \
                                        ,BLOC(Bblock                                                                                    \
                                              INITIALISATION_DU_POINT_COURANT_DANS_HC;                                                  \
                                              Eblock                                                                                    \
                                              )                                                                                         \
                                        /* Introduit le 20091012111043...                                                            */ \
                                        ,BLOC(init_iteration);                                                                          \
                                        ,BLOC(Bblock                                                                                    \
                                              Test(IL_NE_FAUT_PAS(F_ITERATION_DANS_HC_____compatibilite_20110825))                      \
                                                   Bblock                                                                               \
                                                   aHCpuissance(point_manoeuvre,suite_point,exposant);                                  \
                                        /* Calculons :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                    2                                                                      */ \
                                        /*                  Q                                                                        */ \
                                        /*                   n                                                                       */ \
                                        /*                                                                                           */ \
                                        /* a priori (mais cela peut etre inutile dans certains cas...).                              */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, rappelons que le produit de deux quaternions n'est pas commutatif, ce qui      */ \
                                        /* heureusement ici n'a pas d'importance...                                                  */ \
                                        /*                                                                                           */ \
                                        /* Le 20091118113333 :                                                                       */ \
                                        /*                                                                                           */ \
                                        /*                  HCproduit(point_manoeuvre,suite_point,suite_point);                      */ \
                                        /*                                                                                           */ \
                                        /* a ete remplace par :                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  HCpuissance(point_manoeuvre,suite_point,exposant)                        */ \
                                        /*                                                                                           */ \
                                        /* ou 'exposant' sera assez souvent egal a 'ZERO'. Mais afin de garantir la compatibilite    */ \
                                        /* anterieure, meme la ou il est evident que 'ZERO' serait correct (et optimiserait les      */ \
                                        /* calculs), en fait 'DEUX' sera utilise...                                                  */ \
                                        /*                                                                                           */ \
                                        /* Le 20110826090921, on notera un point important. Soient les deux quaternions suivants :   */ \
                                        /*                                                                                           */ \
                                        /*                  Qa = A + i.B + j.C + k.0 = A + i.B + j.C                                 */ \
                                        /*                                   -     -             -                                   */ \
                                        /*                  Qb = A + i.B + j.0 + k.C = A + i.B + k.C                                 */ \
                                        /*                                   -     -             -                                   */ \
                                        /*                                                                                           */ \
                                        /* ou donc il n'y a que trois composantes non nulles et ou ils different par le fait que     */ \
                                        /* 'C' pondere 'j' et 'k' respectivement. Leurs carres valent respectivement :               */ \
                                        /*                                                                                           */ \
                                        /*                    2     2  2  2                                                          */ \
                                        /*                  Qa  = (A -B -C ) + i.2.A.B + j.2.A.C                                     */ \
                                        /*                                               -                                           */ \
                                        /*                                                                                           */ \
                                        /*                    2     2  2  2                                                          */ \
                                        /*                  Qb  = (A -B -C ) + i.2.A.B + k.2.A.C                                     */ \
                                        /*                                               -                                           */ \
                                        /*                                                                                           */ \
                                        /* et on a donc :                                                                            */ \
                                        /*                                                                                           */ \
                                        /*                     2       2                                                             */ \
                                        /*                  |Qa | = |Qb |                                                            */ \
                                        /*                                                                                           */ \
                                        /* La moralite de cela est que calculer les deux fractales {J=valeur,K=0} et {J=0,K=valeur}  */ \
                                        /* donnera en fait le meme resultat, puisque c'est le module des carres qui est utilise lors */ \
                                        /* des tests d'appartenance aux ensembles calcules...                                        */ \
                                                   Eblock                                                                               \
                                              ATes                                                                                      \
                                                   Bblock                                                                               \
                                                   aHCproduit(point_manoeuvre,suite_point,suite_point);                                 \
                                        /* Possibilite introduite le 20110825111448...                                               */ \
                                                   Eblock                                                                               \
                                              ETes                                                                                      \
                                              Eblock                                                                                    \
                                              )                                                                                         \
                                        ,BLOC(fonc_iteration);                                                                          \
                                        ,BLOC(fin_iteration);                                                                           \
                                        /* Cette possibilite a ete introduite le 20150225152454...                                   */ \
                                         );                                                                                             \
                    Eblock

/*===================================================================================================================================*/
/*        :Debut_listMN_MANDELBROT_QUATERNION_11:                                                                                    */
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' E N S E M B L E   D E   M A N D E L B R O T    D A N S   U N E    F E N E T R E                    */
/*        D A N S   L ' E S P A C E   H Y P E R - C O M P L E X E  :                                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Soit la suite :                                                                                                */
/*                                                                                                                                   */
/*                                      Q    = 0                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                                              2                                                                                    */
/*                                      Q    = Q  + C                                                                                */
/*                                       n+1    n                                                                                    */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point courant).                                                                               */
/*                                                                                                                                   */
/*                    Si |Q | tend vers l'infini, 'C'                                                                                */
/*                         n                                                                                                         */
/*                  n'appartient pas a l'ensemble de Mandelbrot.                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Forme generale d'une section tridimensionnelle :                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                          :                                                                        */
/*                                                        ++--::                                                                     */
/*                                                       +++----:::..                                                                */
/*                                                       +++++--::...                                                                */
/*                                                     oooo+o+----::..                                                               */
/*                                                   * ooooo++++--::..                                                               */
/*                                              ----:***oooooo++------.  --:                                                         */
/*                                            ++++++-o*****ooo++++++----+---:                                                        */
/*                                            ++o+++o*****ooo+++++++++o+++-:::                                                       */
/*                                           ooooo+o********oooooo++o+o++-::::.                                                      */
/*                             +--   --     ooooooo**#***#**oooooooooooo+-----.                                                      */
/*                            ++++--++----  ooooooo######***ooooooooooo++++--:.                                                      */
/*                          o+++++++++++++-o**ooo***####*****o**oooo*oo+++---::                                                      */
/*                         - o+++++o++++++o*****o**#####********oo*o*oooo+---::                                                      */
/*                         +ooo+++oo++++++o*******########************ooo+---::                                                      */
/*                     - +-oooooo+ooooo+++********#########***********ooo----::                                                      */
/*                        +ooooooooooooo++*******#########************ooo+---:                                                       */
/*                         oooooooooooo+++*******#########************ooo+---:                                                       */
/*                          oooo++oo++++++*******#########************ooo++--:                                                       */
/*                           o+++++o++++- o******#########************ooo+---                                                        */
/*                          o+++    +     o*******########************o++++-:                                                        */
/*                                         *******#########*****oo*o**o+----                                                         */
/*                                         ***ooo*########******oooo*oo++---                                                         */
/*                                          oooooo*#*###***ooooooo+o*ooo++                                                           */
/*                                           o+o++*#####****oo++o++.  o++                                                            */
/*                                                 *#####****o++--                                                                   */
/*                                                 ####*##oooo++-                                                                    */
/*                                                   #****oo+---                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
/*        :Fin_listMN_MANDELBROT_QUATERNION_11:                                                                                      */

BFonctionP

DEFV(Common,DEFV(Float,SINT(Imandelbrot_dans_HC_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_HC)));
                                        /* Seuil de divergence du carre du module d'un nombre hyper-complexe de la suite dans ce cas */
                                        /* particulier (introduit le 20091118181636)...                                              */
DEFV(Common,DEFV(Float,SINT(Imandelbrot_dans_HC_____exposant,FDEUX)));
                                        /* Introduit le 20091118113333...                                                            */
                                        /*                                                                                           */
                                        /* Le 20100608130024, le 'Int' est devenu un 'Float' pour plus de generalite...              */

DEFV(Common,DEFV(Logical,SINT(Imandelbrot_dans_HC_____charger_____l_etat_initial,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageHJ,Imandelbrot_dans_HC_____etat_initial),ADRESSE_NON_ENCORE_DEFINIE)));
DEFV(Common,DEFV(Logical,SINT(Imandelbrot_dans_HC_____sauvegarder_l_etat_final__,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageHJ,Imandelbrot_dans_HC_____etat_final__),ADRESSE_NON_ENCORE_DEFINIE)));
                                        /* La possibilite de charger et sauvegarder les etats initiaux et finaux a ete               */
                                        /* introduit le 20150227205446...                                                            */

DEFV(Common,DEFV(FonctionP,POINTERp(Imandelbrot_dans_HC(imageR
                                                       ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                       ,ARGUMENT_POINTERs(coin_haut_droite)
                                                       ,composante_J
                                                       ,composante_K
                                                       ,nombre_maximal_d_iterations
                                                       ,visualisation_arguments_de_sortie
                                                       ,ponderation_argumentT,ponderation_argumentP,ponderation_argumentA
                                                        )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
                                        /* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace          */
                                        /* bidimensionnel de l'espace hyper-complexe' dans lequel seront definies les composantes    */
                                        /* 'HReelle' et 'HImaginaire'. Les Arguments 'composante_J' et 'composante_K' definissent    */
                                        /* les composantes 'HJmaginaire' et 'HKmaginaire'...                                         */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentT));
DEFV(Argument,DEFV(Float,ponderation_argumentP));
DEFV(Argument,DEFV(Float,ponderation_argumentA));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : une combinaison lineaire des arguments {T,P,A} de                    */
                                        /* de Q  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'),  */
                                        /*     n                                                                                     */
                                        /* les trois valeurs flottantes etant les ponderations des arguments {T,P,A}.                */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_HC
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */
                                        /* 20061219090342).                                                                          */

     begin_image
          Bblock
          F_ITERATION_DANS_HC(TEST_DU_CARRE_DU_MODULE_DANS_HC(Imandelbrot_dans_HC_____seuil_du_carre_du_module)
                             ,BLOC(Bblock
                                   Test(IL_FAUT(Imandelbrot_dans_HC_____charger_____l_etat_initial))
                                        Bblock
                                        HCegal(suite_point,loadHJ_point(Imandelbrot_dans_HC_____etat_initial,X,Y));
                                        Eblock
                                   ATes
                                        Bblock
                                        HCegal(suite_point,HC_____quaternion__0__0__0__0);
                                        /* Initialisation de la suite des nombres hyper-complexes sur l'origine, soit :              */
                                        /*                                                                                           */
                                        /*                  Q  = 0                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                        /* On notera que l'on pourrait optimiser, en partant directement sur 'C', mais la difference */
                                        /* entre Julia et Mandelbrot ne serait plus evidente...                                      */
                                        Eblock
                                   ETes

                                   CLIR(nombre_courant_d_iterations);
                                        /* Initialisation du compteur des iterations.                                                */
                                   Eblock
                                   )
                             ,BLOC(Bblock
                                   aHCsomme(suite_point,point_manoeuvre,point_courant);
                                        /* Puis :                                                                                    */
                                        /*                                                                                           */
                                        /*                    2                                                                      */
                                        /*                  Q   + C                                                                  */
                                        /*                   n                                                                       */
                                        /*                                                                                           */
                                        /* ou 'C' designe le point hyper-complexe Courant.                                           */
                                   Eblock
                                   )
                             ,Imandelbrot_dans_HC_____exposant
                             ,BLOC(Bblock
                                   Test(IL_FAUT(Imandelbrot_dans_HC_____sauvegarder_l_etat_final__))
                                        Bblock
                                        storeHJ_point(suite_point,Imandelbrot_dans_HC_____etat_final__,X,Y);
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes
                                   Eblock
                                   )
                                        /* Introduit le 20150225152454...                                                            */
                              );
          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*        :Debut_listMN_JULIA_QUATERNION_11:                                                                                         */
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' E N S E M B L E   D E   J U L I A    D A N S   U N E    F E N E T R E                              */
/*        D A N S   L ' E S P A C E   H Y P E R - C O M P L E X E  :                                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Soit la suite :                                                                                                */
/*                                                                                                                                   */
/*                                      Q    = C                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point courant),                                                                               */
/*                                                                                                                                   */
/*                                              2                                                                                    */
/*                                      Q    = Q  + A                                                                                */
/*                                       n+1    n                                                                                    */
/*                                                                                                                                   */
/*                  (ou 'A' designe un nombre hyper-complexe                                                                         */
/*                  Argument arbitraire).                                                                                            */
/*                                                                                                                                   */
/*                    Si |Q | tend vers l'infini, 'C'                                                                                */
/*                         n                                                                                                         */
/*                  n'appartient pas a l'ensemble de Julia                                                                           */
/*                  calcule pour le nombre hyper-complexe 'A'.                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Forme generale d'une section tridimensionnelle :                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  .                         .....                                                                                  */
/*                  ..    ..               ---::::                                                                                   */
/*                  .........            ..++----                                                                                    */
/*                  .......:...         :-o++++++                                                                                    */
/*                  :.....::---:..     +oooo++++                                                                                     */
/*                  ::::::::-+++-::.:::oooooooo+                                                                                     */
/*                  :::::::::++++------oooooooo..                                                                                    */
/*                  +::::::..+ooo+++++o****oooo..                                                                                    */
/*                  ++  ::...ooooo++++*********...                                                                                   */
/*                   +o    +oooo***ooo********............                                                                           */
/*                    +oo  +oooooo************............                                                                           */
/*                     +oooooooooooo*########*:::......::.                                                                           */
/*                       oooooooooooo#########::::::::::::                                                                           */
/*                        +ooooooo+++#########:::::::::::-:                                                                          */
/*                          oooooo++++#######-:::::::::----                                                                          */
/*                            ooo+++++--#####---::::--------                                                                         */
/*                             +++++++--#####--------------+++                                                                       */
/*                              ++++++---#####-------------+++-                                                                      */
/*                                 +++----####--::--------+++++-                                                                     */
/*                                   ------###:::::::-----++++++++                                                                   */
/*                                      --:####:::::::----++++ooo++                                                                  */
/*                                        ::####....:::-+++++ooooo++                                                                 */
/*                                          ######    :-+++++ooooooo+                                                                */
/*                                          #######   --+ooo++ooooooo++..                                                            */
/*                                          ######## **oooooooooooooooo+..:                                                          */
/*                                           #########oooooooooooo+ooooo+.::::::                                                     */
/*                                           #########**ooooooooooo+:::oo+::::::::                                                   */
/*                                           ***************oooooo+--:::::++::::::.                                                  */
/*                                            *********+++-oooooo+++--:::::.+++--:..                                                 */
/*                                            *ooo****o+++--:.o+++++---:::...+---:..                                                 */
/*                                             ooooooooo++-                    --:..                                                 */
/*                                              +++oooo+.                        :.                                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
/*        :Fin_listMN_JULIA_QUATERNION_11:                                                                                           */

BFonctionP

DEFV(Common,DEFV(Logical,SINT(Ijulia_dans_HC_____faire_la_rotation_de__nombre_argument,VRAI)));
                                        /* Introduit le 20100303081954 car, en effet a cette date je me demande si cette rotation    */
                                        /* est justifiee, meme si c'est avec elle que les resultats sont les plus spectaculaires...  */
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_HC_____exposant,FDEUX)));
                                        /* Introduit le 20091118113333...                                                            */
                                        /*                                                                                           */
                                        /* Le 20100608130024, le 'Int' est devenu un 'Float' pour plus de generalite...              */
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_HC_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_HC)));
                                        /* Seuil de divergence du carre du module d'un nombre hyper-complexe de la suite dans ce cas */
                                        /* particulier (introduit le 20091118181636)...                                              */
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_HC_____ponderation_point_argument_A,FU)));
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_HC_____ponderation__point_courant_C,FZERO)));
                                        /* Introduit le 20130825092858...                                                            */

DEFV(Common,DEFV(Logical,SINT(Ijulia_dans_HC_____charger_____l_etat_initial,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageHJ,Ijulia_dans_HC_____etat_initial),ADRESSE_NON_ENCORE_DEFINIE)));
DEFV(Common,DEFV(Logical,SINT(Ijulia_dans_HC_____sauvegarder_l_etat_final__,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageHJ,Ijulia_dans_HC_____etat_final__),ADRESSE_NON_ENCORE_DEFINIE)));
                                        /* La possibilite de charger et sauvegarder les etats initiaux et finaux a ete               */
                                        /* introduit le 20150227205446...                                                            */

DEFV(Common,DEFV(FonctionP,POINTERp(Ijulia_dans_HC(imageR
                                                  ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                  ,ARGUMENT_POINTERs(coin_haut_droite)
                                                  ,composante_J
                                                  ,composante_K
                                                  ,ARGUMENT_POINTERs(nombre_argument)
                                                  ,nombre_maximal_d_iterations
                                                  ,visualisation_arguments_de_sortie
                                                  ,ponderation_argumentT,ponderation_argumentP,ponderation_argumentA
                                                   )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
                                        /* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace          */
                                        /* bidimensionnel de l'espace hyper-complexe' dans lequel seront definies les composantes    */
                                        /* 'HReelle' et 'HImaginaire'. Les Arguments 'composante_J' et 'composante_K' definissent    */
                                        /* les composantes 'HJmaginaire' et 'HKmaginaire'...                                         */
DEFV(Argument,DEFV(hyper_complexe,POINTERs(nombre_argument)));
                                        /* Nombre hyper-complexe "generateur" de l'ensemble de Julia que l'on veut calculer.         */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentT));
DEFV(Argument,DEFV(Float,ponderation_argumentP));
DEFV(Argument,DEFV(Float,ponderation_argumentA));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : une combinaison lineaire des arguments {T,P,A} de                    */
                                        /* de Q  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'),  */
                                        /*     n                                                                                     */
                                        /* les trois valeurs flottantes etant les ponderations des arguments {T,P,A}.                */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_HC

     DEFV(hyper_complexe,point_argument);
                                        /* Point hyper-complexe argument.                                                            */
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */
                                        /* 20061219090342).                                                                          */

     Test(IL_FAUT(Ijulia_dans_HC_____faire_la_rotation_de__nombre_argument))
                                        /* Test introduit le 20100303081954...                                                       */
          Bblock
          ROTATION_TRIDIMENSIONNELLE_DANS_HC(point_argument,INDIRECT(nombre_argument));
                                        /* Recuperation du nombre hyper-complexe "generateur", avec rotation eventuelle. Il y avait  */
                                        /* autrefois :                                                                               */
                                        /*                                                                                           */
                                        /*                  HCegal(point_argument,INDIRECT(nombre_argument));                        */
                                        /*                                                                                           */
                                        /* avant que les rotations ne soient introduites...                                          */
          Eblock
     ATes
          Bblock
          HCegal(point_argument,INDIRECT(nombre_argument));
                                        /* Cas ou la rotation de 'nombre_argument' est inhibee...                                    */
          Eblock
     ETes

     begin_image
          Bblock
          F_ITERATION_DANS_HC(TEST_DU_CARRE_DU_MODULE_DANS_HC(Ijulia_dans_HC_____seuil_du_carre_du_module)
                             ,BLOC(Bblock
                                   Test(IL_FAUT(Ijulia_dans_HC_____charger_____l_etat_initial))
                                        Bblock
                                        HCegal(suite_point,loadHJ_point(Ijulia_dans_HC_____etat_initial,X,Y));
                                        Eblock
                                   ATes
                                        Bblock
                                        HCegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres hyper-complexes sur le "point Courant" 'C',        */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  Q  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                        Eblock
                                   ETes

                                   EGAL(nombre_courant_d_iterations,UN);
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */
                                        /* valeur non nulle soit rangee...                                                           */
                                   Eblock
                                   )
                             ,BLOC(Bblock
                                   DEFV(hyper_complexe,point_manoeuvre_1);

                                   aHCcombinaison_lineaire_2(point_manoeuvre_1
                                                            ,Ijulia_dans_HC_____ponderation_point_argument_A,point_argument
                                                            ,Ijulia_dans_HC_____ponderation__point_courant_C,point_courant
                                                             );
                                   aHCsomme(suite_point,point_manoeuvre,point_manoeuvre_1);
                                        /* Puis :                                                                                    */
                                        /*                                                                                           */
                                        /*                    2                                                                      */
                                        /*                  Q   + A                                                                  */
                                        /*                   n                                                                       */
                                        /*                                                                                           */
                                        /* ou 'A' designe le point hyper-complexe Argument.                                          */
                                        /*                                                                                           */
                                        /* Ou plus generalement (introduit le 20130825092858) :                                      */
                                        /*                                                                                           */
                                        /*                    2                                                                      */
                                        /*                  Q   + p .A + p .C                                                        */
                                        /*                   n     A      C                                                          */
                                        /*                                                                                           */
                                        /* avec pA=1 et pC=0 par defaut...                                                           */
                                   Eblock
                                   )
                             ,Ijulia_dans_HC_____exposant
                             ,BLOC(Bblock
                                   Test(IL_FAUT(Ijulia_dans_HC_____sauvegarder_l_etat_final__))
                                        Bblock
                                        storeHJ_point(suite_point,Ijulia_dans_HC_____etat_final__,X,Y);
                                        Eblock
                                   ATes
                                        Bblock
                                        Eblock
                                   ETes
                                   Eblock
                                   )
                                        /* Introduit le 20150225152454...                                                            */
                              );
          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' E N S E M B L E   D E   V E R H U L S T   D A N S   U N E    F E N E T R E                         */
/*        D A N S   L ' E S P A C E   H Y P E R - C O M P L E X E  :                                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Soit la suite :                                                                                                */
/*                                                                                                                                   */
/*                                      Q    = C                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point courant),                                                                               */
/*                                                                                                                                   */
/*                                      Q    = R.Q .(1 - Q )                                                                         */
/*                                       n+1      n       n                                                                          */
/*                                                                                                                                   */
/*                  (ou 'R' designe un nombre reel Argument                                                                          */
/*                  arbitraire appele "taux de croissance").                                                                         */
/*                                                                                                                                   */
/*                    Si |Q | tend vers l'infini, 'C'                                                                                */
/*                         n                                                                                                         */
/*                  n'appartient pas a l'ensemble de Verhulst                                                                        */
/*                  calcule pour le nombre reel 'R'.                                                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Forme generale :                                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................#...............................                                                 */
/*                  ...............................###..............................                                                 */
/*                  ................................#...............................                                                 */
/*                  .........................#.###########.#........................                                                 */
/*                  ........................#################.......................                                                 */
/*                  ............####.......###################.......####...........                                                 */
/*                  .........##########...#####################...##########........                                                 */
/*                  ....###..###########..#####################..###########..###...                                                 */
/*                  ################################################################                                                 */
/*                  ....###..###########..#####################..###########..###...                                                 */
/*                  .........##########...#####################...##########........                                                 */
/*                  ............####.......###################.......####...........                                                 */
/*                  ........................#################.......................                                                 */
/*                  .........................#.###########.#........................                                                 */
/*                  ................................#...............................                                                 */
/*                  ...............................###..............................                                                 */
/*                  ................................#...............................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Logical,SINT(Iverhulst_dans_HC_____utiliser_la_forme_la_plus_simple,VRAI)));
                                        /* Faut-il utiliser la forme ('VRAI') :                                                      */
                                        /*                                                                                           */
                                        /*                  Q    = R.Q .(1 - Q )                                                     */
                                        /*                   n+1      n       n                                                      */
                                        /*                                                                                           */
                                        /* ou bien la forme ('FAUX') :                                                               */
                                        /*                                                                                           */
                                        /*                                      2                                                    */
                                        /*                  Q    = (R+1).Q - R.Q                                                     */
                                        /*                   n+1          n     n                                                    */
                                        /*                                                                                           */
                                        /* Ceci a ete introduit le 20040921105449.                                                   */
DEFV(Common,DEFV(Float,SINT(Iverhulst_dans_HC_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_HC)));
                                        /* Seuil de divergence du carre du module d'un nombre hyper-complexe de la suite dans le cas */
                                        /* particulier du calcul de l'ensemble de Verhulst. ATTENTION : j'ai utilise quelque temps   */
                                        /* la valeur suivante :                                                                      */
                                        /*                                                                                           */
                                        /*                  EXP2(FLOT(MILLE))                                                        */
                                        /*                                                                                           */
                                        /* mais, je prefere revenir a la valeur standard...                                          */

DEFV(Common,DEFV(FonctionP,POINTERp(Iverhulst_dans_HC(imageR
                                                     ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                     ,ARGUMENT_POINTERs(coin_haut_droite)
                                                     ,composante_J
                                                     ,composante_K
                                                     ,ARGUMENT_POINTERs(taux_de_croissance)
                                                     ,nombre_maximal_d_iterations
                                                     ,visualisation_arguments_de_sortie
                                                     ,ponderation_argumentT,ponderation_argumentP,ponderation_argumentA
                                                      )
                                    )
                 )
     )
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
                                        /* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace          */
                                        /* bidimensionnel de l'espace hyper-complexe' dans lequel seront definies les composantes    */
                                        /* 'HReelle' et 'HImaginaire'. Les Arguments 'composante_J' et 'composante_K' definissent    */
                                        /* les composantes 'HJmaginaire' et 'HKmaginaire'...                                         */
DEFV(Argument,DEFV(hyper_complexe,POINTERs(taux_de_croissance)));
                                        /* Taux de croissance hyper-complexe 'R' de l'ensemble de Verhulst que l'on veut calculer.   */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentT));
DEFV(Argument,DEFV(Float,ponderation_argumentP));
DEFV(Argument,DEFV(Float,ponderation_argumentA));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : une combinaison lineaire des arguments {T,P,A} de                    */
                                        /* de Q  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'),  */
                                        /*     n                                                                                     */
                                        /* les trois valeurs flottantes etant les ponderations des arguments {T,P,A}.                */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_HC
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */
                                        /* 20061219090342).                                                                          */

     begin_image
          Bblock
          F_ITERATION_DANS_HC(TEST_DU_CARRE_DU_MODULE_DANS_HC(Iverhulst_dans_HC_____seuil_du_carre_du_module)
                             ,BLOC(Bblock
                                   HCegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres hyper-complexes sur le "point Courant" 'C',        */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  Q  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                   EGAL(nombre_courant_d_iterations,UN);
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */
                                        /* valeur non nulle soit rangee...                                                           */
                                   Eblock
                                   )
                             ,BLOC(Bblock
                                   Test(IL_FAUT(Iverhulst_dans_HC_____utiliser_la_forme_la_plus_simple))
                                        /* Ce test a ete introduit le 20040921105449...                                              */
                                        Bblock
                                        DEFV(hyper_complexe,point_manoeuvre_1);
                                        DEFV(hyper_complexe,point_manoeuvre_2);
                                        /* Points hyper-complexes de maneuvre lors de l'iteration.                                   */

                                        aHCforme_lineaire(point_manoeuvre_1,NEGA(FU),suite_point,FU);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  1 - Q  = -Q  + 1                                                         */
                                        /*                       n     n                                                             */
                                        /*                                                                                           */
                                        aHCproduit(point_manoeuvre_2,suite_point,point_manoeuvre_1);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  Q .(1 - Q )                                                              */
                                        /*                   n       n                                                               */
                                        /*                                                                                           */
                                        /* ATTENTION, rappelons que le produit de deux quaternions n'est pas commutatif, ce qui      */
                                        /* signifie que :                                                                            */
                                        /*                                                                                           */
                                        /*                  Q .(1 - Q ) # (1 - Q ).Q                                                 */
                                        /*                   n       n          n   n                                                */
                                        /*                                                                                           */
                                        aHCproduit(suite_point,INDIRECT(taux_de_croissance),point_manoeuvre_2);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  Q    = R.Q .(1 - Q )                                                     */
                                        /*                   n+1      n       n                                                      */
                                        /*                                                                                           */
                                        /* ATTENTION, rappelons que le produit de deux quaternions n'est pas commutatif, ce qui      */
                                        /* signifie que :                                                                            */
                                        /*                                                                                           */
                                        /*                  R.Q # Q.R                                                                */
                                        /*                                                                                           */
                                        Eblock
                                   ATes
                                        Bblock
                                        /* Cette formulation a ete introduite le 20040921105449...                                   */
                                        DEFV(hyper_complexe,point_manoeuvre_1);
                                        DEFV(hyper_complexe,point_manoeuvre_2);
                                        DEFV(hyper_complexe,point_manoeuvre_3);
                                        DEFV(hyper_complexe,point_manoeuvre_4);
                                        /* Points hyper-complexes de maneuvre lors de l'iteration.                                   */

                                        aHCproduit(point_manoeuvre_1,suite_point,suite_point);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                   2                                                                       */
                                        /*                  Q                                                                        */
                                        /*                   n                                                                       */
                                        /*                                                                                           */

                                        aHCproduit(point_manoeuvre_2,INDIRECT(taux_de_croissance),point_manoeuvre_1);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                     2                                                                     */
                                        /*                  R.Q                                                                      */
                                        /*                     n                                                                     */
                                        /*                                                                                           */

                                        aHCforme_lineaire(point_manoeuvre_3,FU,INDIRECT(taux_de_croissance),FU);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  R+1                                                                      */
                                        /*                                                                                           */

                                        aHCproduit(point_manoeuvre_4,point_manoeuvre_3,suite_point);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  (R+1).Q                                                                  */
                                        /*                         n                                                                 */
                                        /*                                                                                           */

                                        aHCdifference(suite_point,point_manoeuvre_4,point_manoeuvre_2);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                                      2                                                    */
                                        /*                  Q    = (R+1).Q - R.Q                                                     */
                                        /*                   n+1          n     n                                                    */
                                        /*                                                                                           */
                                        Eblock
                                   ETes
                                   Eblock
                                   )
                             ,EXPOSANT_INUTILE
                                        /* Le 20111130114853, je note que cet argument ('DEUX') est inutile ici, de meme que         */
                                        /* calcul de 'point_manoeuvre' via 'HCpuissance(...)'.                                       */
                             ,BLOC(VIDE;
                                   )
                                        /* Introduit le 20150225152454...                                                            */
                              );
          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E S   R A C I N E S   N - I E M E S   D E   L ' U N I T E                                                  */
/*        D A N S   L ' E S P A C E   H Y P E R - C O M P L E X E  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iracines_n_iemes_de_l_unite_dans_HC_____seuil_du_carre_du_module,F_INFINI)));
                                        /* Seuil de divergence du carre du module d'un nombre hyper-complexe de la suite dans le cas */
                                        /* particulier de la recherche des racines n_iemes de l'unite...                             */

DEFV(Common,DEFV(FonctionP,POINTERp(Iracines_n_iemes_de_l_unite_dans_HC(imageR
                                                                       ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                                       ,ARGUMENT_POINTERs(coin_haut_droite)
                                                                       ,composante_J
                                                                       ,composante_K
                                                                       ,exposant
                                                                       ,nombre_maximal_d_iterations
                                                                       ,visualisation_arguments_de_sortie
                                                                       ,ponderation_argumentT
                                                                       ,ponderation_argumentP
                                                                       ,ponderation_argumentA
                                                                        )
                                    )
                 )
     )
                                        /* Fonction introduite le 20061205143352...                                                  */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
                                        /* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace          */
                                        /* bidimensionnel de l'espace hyper-complexe' dans lequel seront definies les composantes    */
                                        /* 'HReelle' et 'HImaginaire'. Les Arguments 'composante_J' et 'composante_K' definissent    */
                                        /* les composantes 'HJmaginaire' et 'HKmaginaire'...                                         */
DEFV(Argument,DEFV(Positive,exposant));
                                        /* Exposant 'N'.                                                                             */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentT));
DEFV(Argument,DEFV(Float,ponderation_argumentP));
DEFV(Argument,DEFV(Float,ponderation_argumentA));
                                        /* Cet indicateur logique permet de choisir le type d'information que l'on va visualiser...  */
                                        /*                                                                                           */
                                        /* On notera le 20061205170611 que c'est le fait que l'on visualise a priori l'argument      */
                                        /* de sortie qui permet de visualiser la racine (parmi les N) vers laquelle on converge,     */
                                        /* puisque qu'elles sont sur le cercle trigonometrique. Ainsi, les N arguments possibles     */
                                        /* sont tres differents les uns des autres et se distinguent par les couleurs. C'est la      */
                                        /* raison pour laquelle cet argument n'est pas un parametre des programmes appelant          */
                                        /* ('v $xrc/racN.41$K visualisation_arguments_de_sortie')...                                 */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_HC
     DEFV(hyper_complexe,exposant_quaternionique_moins_1);
                                        /* Exposant complexe moins 1.                                                                */
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */
                                        /* 20061219090342).                                                                          */

     begin_image
          Bblock
          F_ITERATION_DANS_HC(TEST_DU_CARRE_DU_MODULE_DANS_HC(Iracines_n_iemes_de_l_unite_dans_HC_____seuil_du_carre_du_module)
                             ,BLOC(Bblock
                                   HCinitialisation(exposant_quaternionique_moins_1
                                                   ,FLOT(PRED(exposant)),I0_Quaternion,J0_Quaternion,K0_Quaternion
                                                    );
                                        /* Conversion complexe de l'exposant moins 1.                                                */
                                   HCegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres complexes sur le "point Courant" 'C',              */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  Q  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                   EGAL(nombre_courant_d_iterations,UN);
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */
                                        /* valeur non nulle soit rangee...                                                           */
                                   Eblock
                                   )
                             ,BLOC(Bblock
                                   Test(IZNE(HCmodule2(suite_point)))
                                        Bblock
                                        DEFV(hyper_complexe,point_manoeuvre_1);
                                        DEFV(hyper_complexe,point_manoeuvre_3);
                                        DEFV(hyper_complexe,point_manoeuvre_4);
                                        DEFV(hyper_complexe,point_manoeuvre_5);
                                        DEFV(hyper_complexe,point_manoeuvre_6);
                                        DEFV(hyper_complexe,point_manoeuvre_7);
                                        /* Points complexes de maneuvre lors de l'iteration.                                         */

                                        aHCexponentielle_quaternionique(point_manoeuvre_6,suite_point,exposant_quaternionique_moins_1);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                 N-1                                                                       */
                                        /*                Q                                                                          */
                                        /*                 n                                                                         */
                                        /*                                                                                           */
                                        aHCproduit(point_manoeuvre_7,suite_point,point_manoeuvre_6);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                 N                                                                         */
                                        /*                Q                                                                          */
                                        /*                 n                                                                         */
                                        /*                                                                                           */
                                        aHCforme_lineaire(point_manoeuvre_1,FLOT(exposant),point_manoeuvre_6,FZERO)
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                     N-1                                                                   */
                                        /*                  N.Q                                                                      */
                                        /*                     n                                                                     */
                                        /*                                                                                           */

                                        aHCdifference(point_manoeuvre_3,point_manoeuvre_7,HC_____quaternion_p1__0__0__0);
                                        /* Puis de :                                                                                 */
                                        /*                                                                                           */
                                        /*                   N                                                                       */
                                        /*                  Q  - 1                                                                   */
                                        /*                   n                                                                       */
                                        /*                                                                                           */

                                        aHCquotient(point_manoeuvre_4,point_manoeuvre_3,point_manoeuvre_1);
                                        /* Puis de :                                                                                 */
                                        /*                                                                                           */
                                        /*                    N                                                                      */
                                        /*                   Q  - 1                                                                  */
                                        /*                    n                                                                      */
                                        /*                  ---------                                                                */
                                        /*                       N-1                                                                 */
                                        /*                   N.Q                                                                     */
                                        /*                      n                                                                    */
                                        /*                                                                                           */

                                        aHCdifference(point_manoeuvre_5,suite_point,point_manoeuvre_4);
                                        HCegal(suite_point,point_manoeuvre_5);
                                        /* Puis de :                                                                                 */
                                        /*                                                                                           */
                                        /*                                N                                                          */
                                        /*                               Q  - 1                                                      */
                                        /*                                n                                                          */
                                        /*                  Q    = Q  - --------                                                     */
                                        /*                   n+1    n       N-1                                                      */
                                        /*                               N.Q                                                         */
                                        /*                                  n                                                        */
                                        /*                                                                                           */
                                        Eblock
                                   ATes
                                        Bblock
                                        /* L'origine (0,0) est un point particulier...                                               */
                                        Eblock
                                   ETes
                                   Eblock
                                   )
                             ,EXPOSANT_INUTILE
                                        /* Le 20111130114853, je note que cet argument ('DEUX') est inutile ici, de meme que         */
                                        /* calcul de 'point_manoeuvre' via 'HCpuissance(...)'.                                       */
                                        /*                                                                                           */
                                        /* Le 20111130125631, 'DEUX' fut d'ailleurs remplace par 'EXPOSANT_INUTILE'...               */
                             ,BLOC(VIDE;
                                   )
                                        /* Introduit le 20150225152454...                                                            */
                              );
          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D ' U N   P O L Y N O M E   V A R I A B L E   Q U E L C O N Q U E                                      */
/*        D A N S   L ' E S P A C E   H Y P E R - C O M P L E X E  :                                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Soit la suite :                                                                                                */
/*                                                                                                                                   */
/*                                      Q    = C                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                                      Q    = polynome(Q )                                                                          */
/*                                       n+1             n                                                                           */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point Courant).                                                                               */
/*                                                                                                                                   */
/*                    La fonction 'polynome(...)' est definie                                                                        */
/*                  par (la translation 't' de l'exposant pouvant                                                                    */
/*                  etre negative a compter du 20100316172716) :                                                                     */
/*                                                                                                                                   */
/*                                                        0+t       1+t             p+t                                              */
/*                                      polynome(Q) = A .Q    + A .Q    + ... + A .Q    + alpha.A + beta.C                           */
/*                                                     0         1               p                                                   */
/*                                                                                                                                   */
/*                  (ou 'A' et 'C' designent respectivement un                                                                       */
/*                  nombre complexe arbitraire Argument et le                                                                        */
/*                  point Courant). Quant a la suite de coefficients                                                                 */
/*                  {A0,A1,...,Ap} elle est definie a partir d'un album                                                              */
/*                  d'images (indexe par 'Z' -majuscule-).                                                                           */
/*                                                                                                                                   */
/*                    Mais ATTENTION, si cela permet de faire varier                                                                 */
/*                  localement le polynome au point {X,Y} on notera                                                                  */
/*                  bien que :                                                                                                       */
/*                                                                                                                                   */
/*                                      C # X + i.Y + ...                                                                            */
/*                                                                                                                                   */
/*                  a priori (les coordonnees {X,Y} sont relatives                                                                   */
/*                  a une image, alors que 'C' est dans l'espace                                                                     */
/*                  hyper-complexe. Cela signifie que lors d'un changement                                                           */
/*                  de la fenetre de calcul {coin_bas_gauche,coin_haut_droite}                                                       */
/*                  (par zoom et/ou translation), les coefficients {A0,A1,...,Ap}                                                    */
/*                  du polynome, eux, resteront les memes...                                                                         */
/*                                                                                                                                   */
/*                    Enfin, on notera deux choix importants possibles :                                                             */
/*                                                                                                                                   */
/*                                      {alpha=1,beta=0}  : ensemble de type "Julia",                                                */
/*                                      {alpha=0,beta=1}  : ensemble de type "Mandelbrot",                                           */
/*                                                                                                                                   */
/*                  toutes les autres combinaisons etant evidemment                                                                  */
/*                  possibles...                                                                                                     */
/*                                                                                                                                   */
/*                    Le 20100210133645 a ete introduite la possibilite de                                                           */
/*                  parametrer localement en {X,Y} et partiellement le produit                                                       */
/*                  non theorique (s'il est active) par {exposa1_Rho,ponder1_Theta,ponder1_Phi,ponder1_Alpha}.                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota important :                                                                                                           */
/*                                                                                                                                   */
/*                    La definition du polynome, comme la definition                                                                 */
/*                  du parametrage du produit non theorique, n'ont                                                                   */
/*                  reellement de sens que lorsqu'un seule 'imageR'                                                                  */
/*                  est calculee puisque dans le cas contraire, ce                                                                   */
/*                  sont les memes definitions qui seront utilisees                                                                  */
/*                  pour d'autres images. Pour bien faire, il conviendrait                                                           */
/*                  de les rendre "multidimensionnelles"...                                                                          */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HC_____faire_la_rotation_de__nombre_argument_A,VRAI)));
                                        /* Introduit le 20100303081954 car, en effet a cette date je me demande si cette rotation    */
                                        /* est justifiee, meme si c'est avec elle que les resultats sont les plus spectaculaires...  */
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HC_____prendre_la_partie_entiere_de_ponder1_Theta_,VRAI)));
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HC_____prendre_la_partie_entiere_de_ponder1_Phi__,VRAI)));
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HC_____prendre_la_partie_entiere_de_ponder1_Alpha,VRAI)));
                                        /* Introduit le 20100221090225 a cause de 'v $ximcd/operator$FON 20100210182653'...          */
DEFV(Common,DEFV(Int,SINT(Iiteration_polynome_variable_quelconque_dans_HC_____premier_exposant_du_polynome,ZERO)));
                                        /* Introduit le 20100316172716 afin de pouvoir des polynomes contenant des puissances        */
                                        /* negatives de 'Z'...                                                                       */

DEFV(Common,DEFV(FonctionP,POINTERp(Iiteration_polynome_variable_quelconque_dans_HC(imageR
                                                                                   ,definition_du_polynome
                                                                                   ,definition_de_exposa1_Rho__
                                                                                   ,definition_de_ponder1_Theta_
                                                                                   ,definition_de_ponder1_Phi__
                                                                                   ,definition_de_ponder1_Alpha
                                                                                   ,ponderation_du_nombre_argument_A
                                                                                   ,ARGUMENT_POINTERs(nombre_argument_A)
                                                                                   ,ponderation_du_nombre_courant_C
                                                                                   ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                                                   ,ARGUMENT_POINTERs(coin_haut_droite)
                                                                                   ,composante_J
                                                                                   ,composante_K
                                                                                   ,nombre_maximal_d_iterations
                                                                                   ,seuil_du_carre_du_module
                                                                                   ,visualisation_arguments_de_sortie
                                                                                   ,ponderation_argumentT
                                                                                   ,ponderation_argumentP
                                                                                   ,ponderation_argumentA
                                                                                    )
                                    )
                 )
     )
                                        /* Fonction introduite le 20040510140001...                                                  */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat a generer.                                                                 */
DEFV(Argument,DEFV(albumF,definition_du_polynome));
                                        /* Definition du polynome variable (en {X,Y}) a l'aide d'un album.                           */
DEFV(Argument,DEFV(imageF,definition_de_exposa1_Rho__));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_Theta_));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_Phi__));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_Alpha));
                                        /* Definition du parametrage partiel eventuel du "faux" produit (introduit le                */
                                        /* 20100210133645).                                                                          */
DEFV(Argument,DEFV(Float,ponderation_du_nombre_argument_A));
                                        /* Ponderation du nombre complexe argument 'A' (dit 'alpha' dans 'alpha.A + beta.C').        */
DEFV(Argument,DEFV(hyper_complexe,POINTERs(nombre_argument_A)));
                                        /* Nombre hyper-complexe argument 'A'.                                                       */
DEFV(Argument,DEFV(Float,ponderation_du_nombre_courant_C));
                                        /* Ponderation du nombre hyper-complexe courant 'C' (dit 'beta' dans 'alpha.A + beta.C').    */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
                                        /* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace          */
                                        /* bidimensionnel de l'espace hyper-complexe' dans lequel seront definies les composantes    */
                                        /* 'HReelle' et 'HImaginaire'. Les Arguments 'composante_J' et 'composante_K' definissent    */
                                        /* les composantes 'HJmaginaire' et 'HKmaginaire'...                                         */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Float,seuil_du_carre_du_module));
                                        /* Seuil du carre du module definissant l'arret des iterations.                              */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentT));
DEFV(Argument,DEFV(Float,ponderation_argumentP));
DEFV(Argument,DEFV(Float,ponderation_argumentA));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : une combinaison lineaire des arguments {T,P,A} de                    */
                                        /* de Q  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'),  */
                                        /*     n                                                                                     */
                                        /* les trois valeurs flottantes etant les ponderations des arguments {T,P,A}.                */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_HC

     DEFV(hyper_complexe,nombre_argument_A_apres_transformation_eventuelle);
                                        /* Point hyper-complexe argument apres transformation eventuelle...                          */
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision (introduit le          */
                                        /* 20061219090342).                                                                          */

     Test(IL_FAUT(Iiteration_polynome_variable_quelconque_dans_HC_____faire_la_rotation_de__nombre_argument_A))
                                        /* Test introduit le 20100303081954...                                                       */
          Bblock
          ROTATION_TRIDIMENSIONNELLE_DANS_HC(nombre_argument_A_apres_transformation_eventuelle,INDIRECT(nombre_argument_A));
                                        /* Recuperation du nombre hyper-complexe "generateur", avec rotation eventuelle. Ceci fut    */
                                        /* introduit le 20100227094911 car cela manquait dramatiquement...                           */
          Eblock
     ATes
          Bblock
          HCegal(nombre_argument_A_apres_transformation_eventuelle,INDIRECT(nombre_argument_A));
                                        /* Cas ou la rotation de 'nombre_argument' est inhibee...                                    */
          Eblock
     ETes

     begin_image
          Bblock

#define   prendre_la_partie_entiere_de_ponder1_Theta_                                                                                   \
                    Iiteration_polynome_variable_quelconque_dans_HC_____prendre_la_partie_entiere_de_ponder1_Theta_
#define   prendre_la_partie_entiere_de_ponder1_Phi__                                                                                    \
                    Iiteration_polynome_variable_quelconque_dans_HC_____prendre_la_partie_entiere_de_ponder1_Phi__
#define   prendre_la_partie_entiere_de_ponder1_Alpha                                                                                    \
                    Iiteration_polynome_variable_quelconque_dans_HC_____prendre_la_partie_entiere_de_ponder1_Alpha
                                        /* Afin de raccourcir des lignes qui suivent...                                              */

          gF_ITERATION_DANS_HC(TEST_DU_CARRE_DU_MODULE_DANS_HC(seuil_du_carre_du_module)
                              ,BLOC(Bblock
                                    INITIALISATION_DU_POINT_COURANT_DANS_HC;
                                    Eblock
                                    )
                                        /* Introduit le 20091012111043...                                                            */
                              ,BLOC(Bblock
                                    HCegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres hyper-complexes avec :                             */
                                        /*                                                                                           */
                                        /*                  Q  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                    EGAL(nombre_courant_d_iterations,UN);
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */
                                        /* valeur non nulle soit rangee...                                                           */
                                    Eblock
                                    )
                              ,BLOC(VIDE;
                                    )
                              ,BLOC(Bblock
                                    DEFV(hyper_complexe,puissance_courante);
                                    DEFV(hyper_complexe,polynome_courant);

                                    BSaveModifyVariable(Float
                                                       ,FHCproduit_____avec_le_produit_non_theorique__exposa1_Rho__
                                                       ,loadF_point(definition_de_exposa1_Rho__,X,Y)
                                                        );
                                    BSaveModifyVariable(Float
                                                       ,FHCproduit_____avec_le_produit_non_theorique__ponder1_Theta_
                                                       ,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_Theta_)
                                                            ,AINT
                                                            ,NEUT
                                                            ,loadF_point(definition_de_ponder1_Theta_,X,Y)
                                                             )
                                                        );
                                    BSaveModifyVariable(Float
                                                       ,FHCproduit_____avec_le_produit_non_theorique__ponder1_Phi__
                                                       ,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_Phi__)
                                                            ,AINT
                                                            ,NEUT
                                                            ,loadF_point(definition_de_ponder1_Phi__,X,Y)
                                                             )
                                                        );
                                    BSaveModifyVariable(Float
                                                       ,FHCproduit_____avec_le_produit_non_theorique__ponder1_Alpha
                                                       ,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_Alpha)
                                                            ,AINT
                                                            ,NEUT
                                                            ,loadF_point(definition_de_ponder1_Alpha,X,Y)
                                                             )
                                                        );
                                        /* Parametrage partiel eventuel du "faux" produit (introduit le 20100210133645). On notera   */
                                        /* que cela n'a d'utilite que si le produit non theorique est active et alors il n'est       */
                                        /* utilise que pour l'unique 'HCproduit(...)' qui suit...                                    */

                                    aHCpuissance(puissance_courante
                                                ,point_courant
                                                ,Iiteration_polynome_variable_quelconque_dans_HC_____premier_exposant_du_polynome
                                                 );
                                        /* Avant le 20100316172716, il y avait ici :                                                 */
                                        /*                                                                                           */
                                        /*                  HCinitialisation(puissance_courante,                                     */
                                        /*                                  ,R1_Quaternion                                           */
                                        /*                                  ,I0_Quaternion                                           */
                                        /*                                  ,J0_Quaternion                                           */
                                        /*                                  ,K0_Quaternion                                           */
                                        /*                                   );                                                      */
                                        /*                                                                                           */
                                        /* ce qui revient au meme lorsque l'exposant est nul :                                       */
                                        /*                                                                                           */
                                        /*                                  0                                                        */
                                        /*                  puissance(Q) = Q  = {1,0,0,0}                                            */
                                        /*                                                                                           */
                                        /* ce qui est le cas par defaut...                                                           */

                                    aHCcombinaison_lineaire_2(polynome_courant
                                                             ,ponderation_du_nombre_argument_A
                                                             ,nombre_argument_A_apres_transformation_eventuelle
                                                             ,ponderation_du_nombre_courant_C
                                                             ,point_courant
                                                              );
                                        /* Definition du polynome et initialisation avec :                                           */
                                        /*                                                                                           */
                                        /*                  polynome(Q) = alpha.A + beta.C                                           */
                                        /*                                                                                           */
                                        /*                                                                                           */

                                    begin_fuite
                                         Bblock
                                         DEFV(Float,INIT(coefficient_polynomial,AloadF_point(definition_du_polynome,X,Y,Z)));
                                         DEFV(hyper_complexe,monome_courant);

                                         aHCforme_lineaire(monome_courant,coefficient_polynomial,puissance_courante,FZERO);
                                         aHCsomme(polynome_courant,polynome_courant,monome_courant);
                                        /* Calcul iteratif du polynome courant :                                                     */
                                        /*                                                                                           */
                                        /*                                    0       1             p                                */
                                        /*                  polynome(Q) = A .Q  + A .Q  + ... + A .Q  + alpha.A + beta.C             */
                                        /*                                 0       1             p                                   */
                                        /*                                                                                           */
                                        /* ou 'A(i)' designe la i-ieme page de l'album 'definition_du_polynome'...                   */

                                         aHCproduit(puissance_courante,puissance_courante,suite_point);
                                        /* Calcul de la puissance courante suivante (Z+1) :                                          */
                                        /*                                                                                           */
                                        /*                                  Z+1                                                      */
                                        /*                  puissance(Q) = Q                                                         */
                                        /*                                                                                           */
                                         Eblock
                                    end_fuite

                                    HCegal(suite_point,polynome_courant);
                                        /* Et iteration de la fonction :                                                             */
                                        /*                                                                                           */
                                        /*                  Q    = polynome(Q )                                                      */
                                        /*                   n+1             n                                                       */
                                        /*                                                                                           */

                                    ESaveModifyVariable(Float
                                                       ,FHCproduit_____avec_le_produit_non_theorique__ponder1_Alpha
                                                        );
                                    ESaveModifyVariable(Float
                                                       ,FHCproduit_____avec_le_produit_non_theorique__ponder1_Phi__
                                                        );
                                    ESaveModifyVariable(Float
                                                       ,FHCproduit_____avec_le_produit_non_theorique__ponder1_Theta_
                                                        );
                                    ESaveModifyVariable(Float
                                                       ,FHCproduit_____avec_le_produit_non_theorique__exposa1_Rho__
                                                        );
                                        /* Parametrage partiel eventuel du "faux" produit (introduit le 20100210133645).             */
                                    Eblock
                                    )
                              ,BLOC(VIDE;
                                    )
                                        /* Introduit le 20150225152454...                                                            */
                               );

#undef    prendre_la_partie_entiere_de_ponder1_Alpha
#undef    prendre_la_partie_entiere_de_ponder1_Phi__
#undef    prendre_la_partie_entiere_de_ponder1_Theta_

          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

#undef    SEUIL_MODULE_DANS_HC

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D ' U N E   S U I T E   Q U E L C O N Q U E                                                          */
/*        D A N S   L ' E S P A C E   H Y P E R - C O M P L E X E  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   BVARIABLES_F_ITERATION_QUELCONQUE_DANS_HC                                                                                     \
                                        /* Definition des variables communes a toutes les fonctions calculant une suite quelconque   */ \
                                        /* dans l'espace Hyper-Complexe.                                                             */ \
                    BVARIABLES_D_HOMOTHETIE_C_HC_HHC                                                                                    \
                                        /* "Taille" reelle et imaginaire de la fenetre rapportee a la taille des images.             */ \
                    DEFV(hyper_complexe,point_courant);                                                                                 \
                                        /* Point hyper-complexe courant 'C' dans la fenetre.                                         */

#define   F_ITERATION_QUELCONQUE_DANS_HC(premiere_iteration_absolue,premiere_iteration_effective,initialisation,iteration,test_defaut)  \
                    Bblock                                                                                                              \
                    DEFV(Int,INIT(numero_de_l_iteration,UNDEF));                                                                        \
                                        /* Indice 'n' de la suite 'X'...                                                             */ \
                    DEFV(hyper_complexe,element_courant_de_la_suite_Pn);                                                                \
                                        /* Element courant Z  de la suite.                                                           */ \
                                        /*                  n                                                                        */ \
                    BLOC(initialisation);                                                                                               \
                                        /* Initialisation de la suite definissant le systeme dynamique...                            */ \
                                                                                                                                        \
                    DoIn(numero_de_l_iteration                                                                                          \
                        ,premiere_iteration_effective                                                                                   \
                        ,LSTX(premiere_iteration_absolue,nombre_d_iterations)                                                           \
                        ,I                                                                                                              \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         BLOC(iteration);                                                                                               \
                                        /* Calcul du systeme dynamique par iteration du calcul de la suite...                        */ \
                                                                                                                                        \
                         Test(IL_FAUT(test_defaut))                                                                                     \
                              Bblock                                                                                                    \
                              TEST_D_UNDERFLOW_D_UNE_SUITE_HYPER_COMPLEXE(element_courant_de_la_suite_Pn                                \
                                                                         ,iterations_dans_C_HC_HHC_____epsilon                          \
                                                                          );                                                            \
                                        /* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter                      */ \
                                        /* des underflows flottants...                                                               */ \
                              TEST_D_OVERFLOW_D_UNE_SUITE_HYPER_COMPLEXE(element_courant_de_la_suite_Pn,RACX(F_INFINI));                \
                                        /* Lorsqu'une composante devient trop grande, on la plafonne afin d'eviter des underflows    */ \
                                        /* flottants. On notera l'utilisation de 'RACX(...)' pour prendre en compte l'elevation au   */ \
                                        /* carre lors de l'eventuelle iteration suivante...                                          */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         Eblock                                                                                                         \
                    EDoI                                                                                                                \
                                                                                                                                        \
                    storeHJ_point(element_courant_de_la_suite_Pn                                                                        \
                                 ,imageR                                                                                                \
                                 ,X,Y                                                                                                   \
                                  );                                                                                                    \
                                        /* Generation de l'image "hyper_complexe"...                                                 */ \
                    Eblock                                                                                                              \
                                        /* Calcul general d'une suite quelconque dans l'espace hyper-complexe...                     */ \
                                        /*                                                                                           */ \
                                        /* On notera le 20050316114436 (un peu tard...) que 'F_ITERATION_QUELCONQUE_DANS_HC'         */ \
                                        /* n'est pas utilise et fut introduit par symetrie avec 'F_ITERATION_QUELCONQUE_DANS_C'      */ \
                                        /* et donc pour prevoir des extensions futures...                                            */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T E U R   D E   F O N C T I O N S   C A L C U L A N T                                                          */
/*        U N E   F O N C T I O N   H Y P E R - C O M P L E X E  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#pragma   xcg__gen_ext_Z__gen_Fonction_SE__GENERE__Fonction                     GENERE__FonctionHJ_I_FONCTION_HC        POINTERHJ
#define   GENERE__FonctionHJ_I_FONCTION_HC(nom_et_arguments_de_la_fonction,Nfonction,Vfonction,alpha,beta_,gamma,delta,nom)             \
DEFV(FonctionHJ,POINTERHJ(nom_et_arguments_de_la_fonction))                                                                             \
                                        /* ATTENTION, il ne faut pas ecrire :                                                        */ \
                                        /*                                                                                           */ \
                                        /*        DEFV(Common,DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction)))             */ \
                                        /*                                                                                           */ \
                                        /* puisqu'en effet la directive 'Common' est utilisee lors de l'appel par :                  */ \
                                        /*                                                                                           */ \
                                        /*        DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(...))                                 */ \
                                        /*                                                                                           */ \
                                        /* Actuellement cette redondance ne serait pas genante, mais plus tard...                    */ \
DEFV(Argument,DEFV(imageHJ,imageR));                                                                                                    \
                                        /* Image Resultat a generer.                                                                 */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));                                                                                \
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));                                                                               \
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */ \
DEFV(Argument,DEFV(Float,composante_J));                                                                                                \
DEFV(Argument,DEFV(Float,composante_K));                                                                                                \
                                        /* Composantes complementaires definissant l'espace hyper-complexe...                        */ \
/*-----------------------------------------------------------------------------------------------------------------------------------*/ \
     Bblock                                                                                                                             \
     BVARIABLES_F_ITERATION_QUELCONQUE_DANS_HC                                                                                          \
     /*..............................................................................................................................*/ \
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;                                                         \
                                                                                                                                        \
     begin_image                                                                                                                        \
          Bblock                                                                                                                        \
          DEFV(hyper_complexe,point_courant_transforme);                                                                                \
                                                                                                                                        \
          INITIALISATION_DU_POINT_COURANT_DANS_HC;                                                                                      \
                                        /* Initialisation du "point Courant" 'C'.                                                    */ \
                                                                                                                                        \
          HCforme_homographique(point_courant_transforme,alpha,point_courant,beta_,gamma,point_courant,delta);                          \
                                        /* Transformation homographique du "point Courant" 'C'.                                      */ \
                                                                                                                                        \
          CALS(Nfonction(point_courant_transforme));                                                                                    \
                                        /* Application de la transformation...                                                       */ \
                                                                                                                                        \
          storeHJ_point(Vfonction                                                                                                       \
                       ,imageR                                                                                                          \
                       ,X,Y                                                                                                             \
                        );                                                                                                              \
                                        /* Generation de l'image "hyper_complexe"...                                                 */ \
          Eblock                                                                                                                        \
     end_image                                                                                                                          \
                                                                                                                                        \
     RETIHJ(imageR);                                                                                                                    \
     Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' cos '   H Y P E R - C O M P L E X E  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionHJ

DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(IHJfonction_cosinus_circulaire_dans_HC(imageR          /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                                                    )               /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCcosinus_circulaire                                 /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCcosinus_circulaire_____valeur                      /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCcosinus_circulaire_____Halpha                      /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCcosinus_circulaire_____Hbeta_                      /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCcosinus_circulaire_____Hgamma                      /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCcosinus_circulaire_____Hdelta                      /* Common,DEFV(Fonction,) :   \  */
                                            ,"cos"                                                  /* Common,DEFV(Fonction,) :   \  */
                                             )                                                      /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionHJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' sin '   H Y P E R - C O M P L E X E  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionHJ

DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(IHJfonction_sinus_circulaire_dans_HC(imageR            /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                                                  )                 /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCsinus_circulaire                                   /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCsinus_circulaire_____valeur                        /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCsinus_circulaire_____Halpha                        /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCsinus_circulaire_____Hbeta_                        /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCsinus_circulaire_____Hgamma                        /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCsinus_circulaire_____Hdelta                        /* Common,DEFV(Fonction,) :   \  */
                                            ,"sin"                                                  /* Common,DEFV(Fonction,) :   \  */
                                             )                                                      /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionHJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' tg '   H Y P E R - C O M P L E X E  :                                        */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionHJ

DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(IHJfonction_tangente_circulaire_dans_HC(imageR         /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                                                     )              /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCtangente_circulaire                                /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCtangente_circulaire_____valeur                     /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCtangente_circulaire_____Halpha                     /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCtangente_circulaire_____Hbeta_                     /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCtangente_circulaire_____Hgamma                     /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCtangente_circulaire_____Hdelta                     /* Common,DEFV(Fonction,) :   \  */
                                            ,"tg"                                                   /* Common,DEFV(Fonction,) :   \  */
                                             )                                                      /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionHJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' ch '   H Y P E R - C O M P L E X E  :                                        */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionHJ

DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(IHJfonction_cosinus_hyperbolique_dans_HC(imageR        /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                                                      )             /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCcosinus_hyperbolique                               /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCcosinus_hyperbolique_____valeur                    /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCcosinus_hyperbolique_____Halpha                    /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCcosinus_hyperbolique_____Hbeta_                    /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCcosinus_hyperbolique_____Hgamma                    /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCcosinus_hyperbolique_____Hdelta                    /* Common,DEFV(Fonction,) :   \  */
                                            ,"ch"                                                   /* Common,DEFV(Fonction,) :   \  */
                                             )                                                      /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionHJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' sh '   H Y P E R - C O M P L E X E  :                                        */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionHJ

DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(IHJfonction_sinus_hyperbolique_dans_HC(imageR          /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                                                    )               /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCsinus_hyperbolique                                 /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCsinus_hyperbolique_____valeur                      /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCsinus_hyperbolique_____Halpha                      /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCsinus_hyperbolique_____Hbeta_                      /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCsinus_hyperbolique_____Hgamma                      /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCsinus_hyperbolique_____Hdelta                      /* Common,DEFV(Fonction,) :   \  */
                                            ,"sh"                                                   /* Common,DEFV(Fonction,) :   \  */
                                             )                                                      /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionHJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' th '   H Y P E R - C O M P L E X E  :                                        */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionHJ

DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(IHJfonction_tangente_hyperbolique_dans_HC(imageR       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                                                       )            /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCtangente_hyperbolique                              /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCtangente_hyperbolique_____valeur                   /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCtangente_hyperbolique_____Halpha                   /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCtangente_hyperbolique_____Hbeta_                   /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCtangente_hyperbolique_____Hgamma                   /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCtangente_hyperbolique_____Hdelta                   /* Common,DEFV(Fonction,) :   \  */
                                            ,"th"                                                   /* Common,DEFV(Fonction,) :   \  */
                                             )                                                      /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionHJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' exp '   H Y P E R - C O M P L E X E  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionHJ

DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(IHJfonction_exponentielle_neperienne_dans_HC(imageR    /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                                                          )         /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCexponentielle_neperienne                           /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCexponentielle_neperienne_____valeur                /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCexponentielle_neperienne_____Halpha                /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCexponentielle_neperienne_____Hbeta_                /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCexponentielle_neperienne_____Hgamma                /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHCexponentielle_neperienne_____Hdelta                /* Common,DEFV(Fonction,) :   \  */
                                            ,"exp"                                                  /* Common,DEFV(Fonction,) :   \  */
                                             )                                                      /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionHJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' log '   H Y P E R - C O M P L E X E  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionHJ

DEFV(Common,GENERE__FonctionHJ_I_FONCTION_HC(IHJfonction_logarithme_dans_HC(imageR                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                                            )                       /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHClogarithme                                         /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHClogarithme_____valeur                              /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHClogarithme_____Halpha                              /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHClogarithme_____Hbeta_                              /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHClogarithme_____Hgamma                              /* Common,DEFV(Fonction,) :   \  */
                                            ,fFHClogarithme_____Hdelta                              /* Common,DEFV(Fonction,) :   \  */
                                            ,"log"                                                  /* Common,DEFV(Fonction,) :   \  */
                                             )                                                      /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionHJ

#undef    GENERE__FonctionHJ_I_FONCTION_HC

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T E U R   D E   F O N C T I O N S   I T E R A N T                                                              */
/*        U N E   F O N C T I O N   H Y P E R - C O M P L E X E  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#pragma   xcg__gen_ext_Z__gen_Fonction_SE__GENERE__Fonction                     GENERE__FonctionP_I_ITERAT_F_HC         POINTERp
#define   GENERE__FonctionP_I_ITERAT_F_HC(nom_et_arguments_de_la_fonction,Nfonction,Vfonction,seuil_du_carre_du_module)                 \
                                        /* ATTENTION : le nom de la fonction est suivi de ses arguments pour des raisons liees       */ \
                                        /* a la recuperation automatique des fichiers d'arguments ; on trouvera donc :               */ \
                                        /*                                                                                           */ \
                                        /*        GENERE__FonctionP_FONCTION_C(nom_et_arguments_de_la_fonction,Nfonction,Vfonction)  */ \
                                        /*                                                                                           */ \
                                        /* D'autre part, la fonction 'Nfonction' devra etre de nom '__...' afin que son nombre       */ \
                                        /* d'arguments ne soit pas verifie ('v $xcg/gen.arg$D/debut$I __f').                         */ \
DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction))                                                                               \
                                        /* ATTENTION, il ne faut pas ecrire :                                                        */ \
                                        /*                                                                                           */ \
                                        /*        DEFV(Common,DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction)))             */ \
                                        /*                                                                                           */ \
                                        /* mais :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*        DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction))                          */ \
                                        /*                                                                                           */ \
                                        /* puisqu'en effet la directive 'Common' est utilisee lors de l'appel par :                  */ \
                                        /*                                                                                           */ \
                                        /*        DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(...))                                  */ \
                                        /*                                                                                           */ \
                                        /* Actuellement cette redondance ne serait pas genante, mais plus tard...                    */ \
DEFV(Argument,DEFV(image,imageR));                                                                                                      \
                                        /* Image Resultat a generer.                                                                 */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));                                                                                \
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));                                                                               \
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */ \
DEFV(Argument,DEFV(Float,composante_J));                                                                                                \
DEFV(Argument,DEFV(Float,composante_K));                                                                                                \
                                        /* Composantes complementaires definissant l'espace hyper-complexe...                        */ \
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));                                                                              \
                                        /* Nombre maximal d'iterations demande.                                                      */ \
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));                                                                         \
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */ \
                                        /* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle))                    */ \
                                        /* de Q  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX').  */ \
                                        /*     n                                                                                     */ \
DEFV(Argument,DEFV(Float,ponderation_argumentT));                                                                                       \
DEFV(Argument,DEFV(Float,ponderation_argumentP));                                                                                       \
DEFV(Argument,DEFV(Float,ponderation_argumentA));                                                                                       \
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */ \
                                        /* l'on va visualiser : une combinaison lineaire des arguments {T,P,A} de                    */ \
                                        /* de Q  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'),  */ \
                                        /*     n                                                                                     */ \
                                        /* les trois valeurs flottantes etant les ponderations des arguments {T,P,A}.                */ \
/*-----------------------------------------------------------------------------------------------------------------------------------*/ \
     Bblock                                                                                                                             \
     BVARIABLES_F_ITERATION_DANS_HC                                                                                                     \
     /*..............................................................................................................................*/ \
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;                                                         \
                                                                                                                                        \
     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;                                            \
                                                                                                                                        \
     gF_ITERATION_DANS_HC__INITIALISATIONS_DIVERSES;                                                                                    \
                                                                                                                                        \
     begin_image                                                                                                                        \
          Bblock                                                                                                                        \
          gF_ITERATION_DANS_HC(TEST_DU_CARRE_DU_MODULE_DANS_HC(seuil_du_carre_du_module)                                                \
                              ,BLOC(Bblock                                                                                              \
                                    INITIALISATION_DU_POINT_COURANT_DANS_HC;                                                            \
                                    Eblock                                                                                              \
                                    )                                                                                                   \
                              ,BLOC(Bblock                                                                                              \
                                    HCegal(suite_point,point_courant);                                                                  \
                                        /* Initialisation de la suite des nombres hyper_complexes sur le "point Courant" 'C',        */ \
                                        /* soit :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  Z  = C                                                                   */ \
                                        /*                   0                                                                       */ \
                                        /*                                                                                           */ \
                                    EGAL(nombre_courant_d_iterations,UN);                                                               \
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */ \
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */ \
                                        /* valeur non nulle soit rangee...                                                           */ \
                                    Eblock                                                                                              \
                                    )                                                                                                   \
                              ,BLOC(VIDE;                                                                                               \
                                    )                                                                                                   \
                              ,BLOC(Bblock                                                                                              \
                                    CALS(Nfonction(suite_point));                                                                       \
                                    HCegal(suite_point,Vfonction);                                                                      \
                                        /* Et iteration de la fonction :                                                             */ \
                                        /*                                                                                           */ \
                                        /*                  Z  = Nfonction(Z )                                                       */ \
                                        /*                   n              n                                                        */ \
                                        /*                                                                                           */ \
                                        /* en notant qu'il est preferable de ne pas ecrire :                                         */ \
                                        /*                                                                                           */ \
                                        /*                  HCegal(suite_point,Nfonction(suite_point));                              */ \
                                        /*                                                                                           */ \
                                        /* car cette derniere ecriture, de par la programmation de 'v $ximcd/operator$FON HCegal',   */ \
                                        /* provoquerait deux fois le calcul de la fonction 'Nfonction(suite_point)'...               */ \
                                    Eblock                                                                                              \
                                    )                                                                                                   \
                              ,BLOC(VIDE;                                                                                               \
                                    )                                                                                                   \
                               );                                                                                                       \
          Eblock                                                                                                                        \
     end_image                                                                                                                          \
                                                                                                                                        \
     RETI(imageR);                                                                                                                      \
     Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' cos '   H Y P E R - C O M P L E X E  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_cosinus_circulaire_dans_HC_____seuil,FLOT(MILLE))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(Iiteration_cosinus_circulaire_dans_HC(imageR            /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentT                   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentP                   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA                   /* Common,DEFV(Fonction,) :   \  */
                                                                                  )                 /* Common,DEFV(Fonction,) :   \  */
                                           ,fFHCcosinus_circulaire                                  /* Common,DEFV(Fonction,) :   \  */
                                           ,fFHCcosinus_circulaire_____valeur                       /* Common,DEFV(Fonction,) :   \  */
                                           ,Iiteration_cosinus_circulaire_dans_HC_____seuil         /* Common,DEFV(Fonction,) :   \  */
                                            )                                                       /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' sin '   H Y P E R - C O M P L E X E  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_sinus_circulaire_dans_HC_____seuil,FLOT(MILLE))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(Iiteration_sinus_circulaire_dans_HC(imageR              /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentT                   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentP                   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA                   /* Common,DEFV(Fonction,) :   \  */
                                                                                )                   /* Common,DEFV(Fonction,) :   \  */
                                           ,fFHCsinus_circulaire                                    /* Common,DEFV(Fonction,) :   \  */
                                           ,fFHCsinus_circulaire_____valeur                         /* Common,DEFV(Fonction,) :   \  */
                                           ,Iiteration_sinus_circulaire_dans_HC_____seuil           /* Common,DEFV(Fonction,) :   \  */
                                            )                                                       /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' tg '   H Y P E R - C O M P L E X E  :                                  */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_tangente_circulaire_dans_HC_____seuil,FDEUX)));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(Iiteration_tangente_circulaire_dans_HC(imageR           /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentT                   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentP                   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA                   /* Common,DEFV(Fonction,) :   \  */
                                                                                   )                /* Common,DEFV(Fonction,) :   \  */
                                           ,fFHCtangente_circulaire                                 /* Common,DEFV(Fonction,) :   \  */
                                           ,fFHCtangente_circulaire_____valeur                      /* Common,DEFV(Fonction,) :   \  */
                                           ,Iiteration_tangente_circulaire_dans_HC_____seuil        /* Common,DEFV(Fonction,) :   \  */
                                            )                                                       /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' ch '   H Y P E R - C O M P L E X E  :                                  */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_cosinus_hyperbolique_dans_HC_____seuil,FLOT(MILLE))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(Iiteration_cosinus_hyperbolique_dans_HC(imageR          /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentT                   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentP                   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA                   /* Common,DEFV(Fonction,) :   \  */
                                                                                    )               /* Common,DEFV(Fonction,) :   \  */
                                           ,fFHCcosinus_hyperbolique                                /* Common,DEFV(Fonction,) :   \  */
                                           ,fFHCcosinus_hyperbolique_____valeur                     /* Common,DEFV(Fonction,) :   \  */
                                           ,Iiteration_cosinus_hyperbolique_dans_HC_____seuil       /* Common,DEFV(Fonction,) :   \  */
                                            )                                                       /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' sh '   H Y P E R - C O M P L E X E  :                                  */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_sinus_hyperbolique_dans_HC_____seuil,FLOT(MILLE))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(Iiteration_sinus_hyperbolique_dans_HC(imageR            /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentT                   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentP                   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA                   /* Common,DEFV(Fonction,) :   \  */
                                                                                  )                 /* Common,DEFV(Fonction,) :   \  */
                                           ,fFHCsinus_hyperbolique                                  /* Common,DEFV(Fonction,) :   \  */
                                           ,fFHCsinus_hyperbolique_____valeur                       /* Common,DEFV(Fonction,) :   \  */
                                           ,Iiteration_sinus_hyperbolique_dans_HC_____seuil         /* Common,DEFV(Fonction,) :   \  */
                                            )                                                       /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' th '   H Y P E R - C O M P L E X E  :                                  */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_tangente_hyperbolique_dans_HC_____seuil,FDEUX)));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(Iiteration_tangente_hyperbolique_dans_HC(imageR         /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentT                   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentP                   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA                   /* Common,DEFV(Fonction,) :   \  */
                                                                                     )              /* Common,DEFV(Fonction,) :   \  */
                                           ,fFHCtangente_hyperbolique                               /* Common,DEFV(Fonction,) :   \  */
                                           ,fFHCtangente_hyperbolique_____valeur                    /* Common,DEFV(Fonction,) :   \  */
                                           ,Iiteration_tangente_hyperbolique_dans_HC_____seuil      /* Common,DEFV(Fonction,) :   \  */
                                            )                                                       /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' exp '   H Y P E R - C O M P L E X E  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_exponentielle_neperienne_dans_HC_____seuil,FLOT(MILLIARD))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(Iiteration_exponentielle_neperienne_dans_HC(imageR      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentT                   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentP                   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA                   /* Common,DEFV(Fonction,) :   \  */
                                                                                        )           /* Common,DEFV(Fonction,) :   \  */
                                           ,fFHCexponentielle_neperienne                            /* Common,DEFV(Fonction,) :   \  */
                                           ,fFHCexponentielle_neperienne_____valeur                 /* Common,DEFV(Fonction,) :   \  */
                                           ,Iiteration_exponentielle_neperienne_dans_HC_____seuil   /* Common,DEFV(Fonction,) :   \  */
                                            )                                                       /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' log '   H Y P E R - C O M P L E X E  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_logarithme_dans_HC_____seuil,FDEUX)));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HC(Iiteration_logarithme_dans_HC(imageR                    /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentT                   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentP                   /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA                   /* Common,DEFV(Fonction,) :   \  */
                                                                          )                         /* Common,DEFV(Fonction,) :   \  */
                                           ,fFHClogarithme                                          /* Common,DEFV(Fonction,) :   \  */
                                           ,fFHClogarithme_____valeur                               /* Common,DEFV(Fonction,) :   \  */
                                           ,Iiteration_logarithme_dans_HC_____seuil                 /* Common,DEFV(Fonction,) :   \  */
                                            )                                                       /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionP

#undef    GENERE__FonctionP_I_ITERAT_F_HC

#undef    TEST_DU_CARRE_DU_MODULE_DANS_HC

#undef    F_ITERATION_DANS_HC
#undef    gF_ITERATION_DANS_HC

#undef    TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE
#undef    INVERSION_D_UNE_COMPOSANTE

#undef    REPLIEMENT_D_UNE_COMPOSANTE
#undef    REPLIEMENT_SINUSOIDAL_D_UNE_COMPOSANTE
#undef    REPLIEMENT_POLYNOMIAL_D_UNE_COMPOSANTE
#undef    REPLIEMENT_AFFINE_PAR_MORCEAUX_D_UNE_COMPOSANTE

#undef    F_ITERATION_QUELCONQUE_DANS_HC
#undef    BVARIABLES_F_ITERATION_QUELCONQUE_DANS_HC

#undef    TEST_D_OVERFLOW_D_UNE_SUITE_HYPER_COMPLEXE
#undef    TEST_D_UNDERFLOW_D_UNE_SUITE_HYPER_COMPLEXE
#undef    INITIALISATION_DU_POINT_COURANT_DANS_HC
#undef    BVARIABLES_F_ITERATION_DANS_HC

#undef    ROTATION_TRIDIMENSIONNELLE_DANS_HC

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O N T R O L E   D E   L ' A R I T H M E T I Q U E   E T E N D U E                                                        */
/*        L O R S   D E   C A L C U L S   S U R   L E S   N O M B R E S   H Y P E R - H Y P E R - C O M P L E X E S  :               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Tout cela fut introduit le 20110802111915                                                                      */
/*                  au cas ou l'utilite s'en manifesterait...                                                                        */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#ifdef    FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES
DEFV(Common,DEFV(Logical,_______VERSION__ximcf_iterations_____ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES));
#Aifdef   FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES
DEFV(Common,DEFV(Logical,_______VERSION__ximcf_iterations_____ARITHMETIQUE_DE_BASE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES));
#Eifdef   FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S E U I L   D U   M O D U L E  :                                                                                           */
/*        D A N S   L ' E S P A C E   H Y P E R - H Y P E R - C O M P L E X E  :                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Tout cela fut introduit le 20110802111915                                                                      */
/*                  au cas ou l'utilite s'en manifesterait...                                                                        */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   TEST_DU_CARRE_DU_MODULE_DANS_HHC(seuil)                                                                                       \
                    IFLT(HHCmodule2(suite_point),seuil)                                                                                 \
                                        /* Test quelconque de continuation des iterations dans 'F_ITERATION_DANS_HHC(...)'.          */

#define   SEUIL_MODULE_DANS_HHC                                                                                                         \
                    EXP2(DOUB(UNITE))
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_HHC_____seuil_du_carre_du_module
                           ,SEUIL_MODULE_DANS_HHC
                            )
                 )
     );
                                        /* Seuil de divergence du carre du module d'un nombre hyper-hyper-complexe de la suite.      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E P L I E M E N T   E V E N T U E L   D E   L ' E S P A C E   H Y P E R - H Y P E R - C O M P L E X E  :                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____replier_l_espace,ITERATIONS_DIVERSES_____REPLIER_L_ESPACE)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Rorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Rextremite,ITERATIONS_DIVERSES_____EXTREMITE)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Iorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Iextremite,ITERATIONS_DIVERSES_____EXTREMITE)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Jorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Jextremite,ITERATIONS_DIVERSES_____EXTREMITE)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Korigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Kextremite,ITERATIONS_DIVERSES_____EXTREMITE)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Sorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Sextremite,ITERATIONS_DIVERSES_____EXTREMITE)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Torigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Textremite,ITERATIONS_DIVERSES_____EXTREMITE)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Uorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Uextremite,ITERATIONS_DIVERSES_____EXTREMITE)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Vorigine__,ITERATIONS_DIVERSES_____ORIGINE__)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____Vextremite,ITERATIONS_DIVERSES_____EXTREMITE)));
                                        /* Possibilite introduite le 20121103095740...                                               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   N E C E S S A I R E S   A U   C A L C U L   E N   " F L O T T A N T "                                  */
/*        D A N S   L ' E S P A C E   H Y P E R - H Y P E R - C O M P L E X E  :                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Tout cela fut introduit le 20110802111915                                                                      */
/*                  au cas ou l'utilite s'en manifesterait...                                                                        */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Common,DEFV(Logical,ZINT(iterations_diverses_dans_HHC_____centrer_la_rotation_3D_dans_la_fenetre,FAUX)));
                                        /* Introduit le 20121227110206 afin de faciliter le changement de centre de rotation...      */
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_HHC_____X_centre_de_rotation_3D,FZERO)));
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_HHC_____Y_centre_de_rotation_3D,FZERO)));
DEFV(Common,DEFV(Float,ZINT(iterations_diverses_dans_HHC_____Z_centre_de_rotation_3D,FZERO)));

#define   ROTATION_TRIDIMENSIONNELLE_DANS_HHC(point_apres_rotation,point_avant_rotation)                                                \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(X_centre_de_rotation_3D,iterations_diverses_dans_HHC_____X_centre_de_rotation_3D));                 \
                    DEFV(Float,INIT(Y_centre_de_rotation_3D,iterations_diverses_dans_HHC_____Y_centre_de_rotation_3D));                 \
                    DEFV(Float,INIT(Z_centre_de_rotation_3D,iterations_diverses_dans_HHC_____Z_centre_de_rotation_3D));                 \
                                        /* Definition du centre de rotation tridimensionnel par defaut...                            */ \
                                                                                                                                        \
                    Test(IL_FAUT(iterations_diverses_dans_HHC_____centrer_la_rotation_3D_dans_la_fenetre))                              \
                         Bblock                                                                                                         \
                         EGAL(X_centre_de_rotation_3D                                                                                   \
                             ,MOYE(Reelle(INDIRECT(coin_bas_gauche)),Reelle(INDIRECT(coin_haut_droite)))                                \
                              );                                                                                                        \
                         EGAL(Y_centre_de_rotation_3D                                                                                   \
                             ,MOYE(Imaginaire(INDIRECT(coin_bas_gauche)),Imaginaire(INDIRECT(coin_haut_droite)))                        \
                              );                                                                                                        \
                         EGAL(Z_centre_de_rotation_3D                                                                                   \
                             ,composante_J                                                                                              \
                              );                                                                                                        \
                                        /* Positionnement du centre de rotation tridimensionnelle au centre de la fenetre...         */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    HHCinitialisation(point_apres_rotation                                                                              \
                                     ,ADD2(TRANSFORMATION_GEOMETRIQUE_3D_Fx                                                             \
                                               (SOUS(HHReelle(point_avant_rotation)                                                     \
                                                    ,X_centre_de_rotation_3D                                                            \
                                                     )                                                                                  \
                                               ,SOUS(HHImaginaire(point_avant_rotation)                                                 \
                                                    ,Y_centre_de_rotation_3D                                                            \
                                                     )                                                                                  \
                                               ,SOUS(HHJmaginaire(point_avant_rotation)                                                 \
                                                    ,Z_centre_de_rotation_3D                                                            \
                                                     )                                                                                  \
                                               ,NE_PAS_TRANSLATER_LORS_DE_TRANSFORMATION_GEOMETRIQUE_3D_Fxyz                            \
                                                )                                                                                       \
                                          ,X_centre_de_rotation_3D                                                                      \
                                           )                                                                                            \
                                     ,ADD2(TRANSFORMATION_GEOMETRIQUE_3D_Fy                                                             \
                                               (SOUS(HHReelle(point_avant_rotation)                                                     \
                                                    ,X_centre_de_rotation_3D                                                            \
                                                     )                                                                                  \
                                               ,SOUS(HHImaginaire(point_avant_rotation)                                                 \
                                                    ,Y_centre_de_rotation_3D                                                            \
                                                     )                                                                                  \
                                               ,SOUS(HHJmaginaire(point_avant_rotation)                                                 \
                                                    ,Z_centre_de_rotation_3D                                                            \
                                                     )                                                                                  \
                                               ,NE_PAS_TRANSLATER_LORS_DE_TRANSFORMATION_GEOMETRIQUE_3D_Fxyz                            \
                                                )                                                                                       \
                                          ,Y_centre_de_rotation_3D                                                                      \
                                           )                                                                                            \
                                     ,ADD2(TRANSFORMATION_GEOMETRIQUE_3D_Fz                                                             \
                                               (SOUS(HHReelle(point_avant_rotation)                                                     \
                                                    ,X_centre_de_rotation_3D                                                            \
                                                     )                                                                                  \
                                               ,SOUS(HHImaginaire(point_avant_rotation)                                                 \
                                                    ,Y_centre_de_rotation_3D                                                            \
                                                     )                                                                                  \
                                               ,SOUS(HHJmaginaire(point_avant_rotation)                                                 \
                                                    ,Z_centre_de_rotation_3D                                                            \
                                                     )                                                                                  \
                                               ,NE_PAS_TRANSLATER_LORS_DE_TRANSFORMATION_GEOMETRIQUE_3D_Fxyz                            \
                                                )                                                                                       \
                                          ,Z_centre_de_rotation_3D                                                                      \
                                           )                                                                                            \
                                     ,NEUT(HHKmaginaire(point_avant_rotation))                                                          \
                                     ,NEUT(HHSmaginaire(point_avant_rotation))                                                          \
                                     ,NEUT(HHTmaginaire(point_avant_rotation))                                                          \
                                     ,NEUT(HHUmaginaire(point_avant_rotation))                                                          \
                                     ,NEUT(HHVmaginaire(point_avant_rotation))                                                          \
                                      );                                                                                                \
                                        /* Rotation du point Argument par rapport aux trois premiers axes...                         */ \
                    Eblock                                                                                                              \
                                        /* Rotation d'un point hyper-hyper-complexe par rapport aux trois premiers axes...           */

#define   BVARIABLES_F_ITERATION_DANS_HHC                                                                                               \
                                        /* Definition des variables communes a 'Julia' et 'Mandelbrot'.                              */ \
                    BVARIABLES_D_HOMOTHETIE_C_HC_HHC                                                                                    \
                                        /* "Taille" reelle et imaginaire de la fenetre rapportee a la taille des images.             */ \
                    DEFV(hyper_hyper_complexe,point_courant);                                                                           \
                                        /* Point hyper-hyper-complexe courant 'C' dans la fenetre.                                   */ \
                    DEFV(hyper_hyper_complexe,suite_point);                                                                             \
                                        /* Suite des points hyper-hyper-complexes O  lors de l'iteration.                            */ \
                                        /*                                         n                                                 */ \
                    DEFV(hyper_hyper_complexe,point_manoeuvre);                                                                         \
                                        /* Point hyper-hyper-complexe de maneuvre lors de l'iteration.                               */ \
                    VARIABLES_COMMUNES_DES_ITERATIONS_DANS_C_HC_HHC;

#define   INITIALISATION_DU_POINT_COURANT_DANS_HHC                                                                                      \
                                        /* Sequence de calcul de la valeur a donner au point courant {X,Y}.                          */ \
                    Bblock                                                                                                              \
                    DEFV(hyper_hyper_complexe,point_courant_avant_rotation);                                                            \
                                        /* Point de manoeuvre...                                                                     */ \
                                                                                                                                        \
                    HHCinitialisation(point_courant_avant_rotation                                                                      \
                                     ,X_IMAGE_PLAN(X),Y_IMAGE_PLAN(Y)                                                                   \
                                     ,composante_J,composante_K                                                                         \
                                     ,composante_S,composante_T,composante_U,composante_V                                               \
                                      );                                                                                                \
                                        /* Le "point_courant" 'C' est le point courant {X,Y} sur le maillage de l'image auquel       */ \
                                        /* on "adjoint" les 'composante_J', 'composante_K', 'composante_S', 'composante_T',          */ \
                                        /* 'composante_U' et 'composante_V' pour passer dans l'hyper-hyper-espace.                   */ \
                    ROTATION_TRIDIMENSIONNELLE_DANS_HHC(point_courant,point_courant_avant_rotation);                                    \
                                        /* Rotation (eventuelle) du point courant...                                                 */ \
                    Eblock                                                                                                              \
                                        /* Initialisation du point hyper-hyper-complexe courant sur un maillage {X,Y}.               */

#define   TEST_D_UNDERFLOW_D_UNE_SUITE_HYPER_HYPER_COMPLEXE(suite_hyper_hyper_complexe,epsilon)                                         \
                    Bblock                                                                                                              \
                    EGAL(HHReelle(suite_hyper_hyper_complexe),TROP_PETIT(HHReelle(suite_hyper_hyper_complexe),epsilon));                \
                    EGAL(HHImaginaire(suite_hyper_hyper_complexe),TROP_PETIT(HHImaginaire(suite_hyper_hyper_complexe),epsilon));        \
                    EGAL(HHJmaginaire(suite_hyper_hyper_complexe),TROP_PETIT(HHJmaginaire(suite_hyper_hyper_complexe),epsilon));        \
                    EGAL(HHKmaginaire(suite_hyper_hyper_complexe),TROP_PETIT(HHKmaginaire(suite_hyper_hyper_complexe),epsilon));        \
                    EGAL(HHSmaginaire(suite_hyper_hyper_complexe),TROP_PETIT(HHSmaginaire(suite_hyper_hyper_complexe),epsilon));        \
                    EGAL(HHTmaginaire(suite_hyper_hyper_complexe),TROP_PETIT(HHTmaginaire(suite_hyper_hyper_complexe),epsilon));        \
                    EGAL(HHUmaginaire(suite_hyper_hyper_complexe),TROP_PETIT(HHUmaginaire(suite_hyper_hyper_complexe),epsilon));        \
                    EGAL(HHVmaginaire(suite_hyper_hyper_complexe),TROP_PETIT(HHVmaginaire(suite_hyper_hyper_complexe),epsilon));        \
                                        /* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter des underflows       */ \
                                        /* flottants...                                                                              */ \
                    Eblock                                                                                                              \
                                        /* Test des underflows d'une suite hyper-hyper-complexe...                                   */
#define   TEST_D_OVERFLOW_D_UNE_SUITE_HYPER_HYPER_COMPLEXE(suite_hyper_hyper_complexe,anti_epsilon)                                     \
                    Bblock                                                                                                              \
                    EGAL(HHReelle(suite_hyper_hyper_complexe),TROP_GRAND(HHReelle(suite_hyper_hyper_complexe),anti_epsilon));           \
                    EGAL(HHImaginaire(suite_hyper_hyper_complexe),TROP_GRAND(HHImaginaire(suite_hyper_hyper_complexe),anti_epsilon));   \
                    EGAL(HHJmaginaire(suite_hyper_hyper_complexe),TROP_GRAND(HHJmaginaire(suite_hyper_hyper_complexe),anti_epsilon));   \
                    EGAL(HHKmaginaire(suite_hyper_hyper_complexe),TROP_GRAND(HHKmaginaire(suite_hyper_hyper_complexe),anti_epsilon));   \
                    EGAL(HHSmaginaire(suite_hyper_hyper_complexe),TROP_GRAND(HHSmaginaire(suite_hyper_hyper_complexe),anti_epsilon));   \
                    EGAL(HHTmaginaire(suite_hyper_hyper_complexe),TROP_GRAND(HHTmaginaire(suite_hyper_hyper_complexe),anti_epsilon));   \
                    EGAL(HHUmaginaire(suite_hyper_hyper_complexe),TROP_GRAND(HHUmaginaire(suite_hyper_hyper_complexe),anti_epsilon));   \
                    EGAL(HHVmaginaire(suite_hyper_hyper_complexe),TROP_GRAND(HHVmaginaire(suite_hyper_hyper_complexe),anti_epsilon));   \
                                        /* Lorsqu'une composante devient trop grande, on la plafonne afin d'eviter des underflows    */ \
                                        /* flottants...                                                                              */ \
                    Eblock                                                                                                              \
                                        /* Test des overflows d'une suite hyper-hyper-complexe...                                    */

DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point,FAUX)));
DEFV(Common,DEFV(Positive,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__nombre_repetitions,UN)));
                                        /* Afin de permettre, par exemple, la generation d'objet de type "MandelBox".                */

DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement,VRAI)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S__R,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire__R,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial__R,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal__R,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn__R,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn__R,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp__R,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp__R,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E__R,UN)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S__I,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire__I,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial__I,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal__I,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn__I,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn__I,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp__I,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp__I,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E__I,UN)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S__J,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire__J,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial__J,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal__J,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn__J,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn__J,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp__J,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp__J,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E__J,UN)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S__K,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire__K,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial__K,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal__K,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn__K,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn__K,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp__K,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp__K,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E__K,UN)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S__S,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire__S,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial__S,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal__S,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn__S,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn__S,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp__S,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp__S,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E__S,UN)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S__T,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire__T,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial__T,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal__T,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn__T,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn__T,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp__T,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp__T,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E__T,UN)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S__U,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire__U,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial__U,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal__U,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn__U,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn__U,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp__U,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp__U,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E__U,UN)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S__V,FU)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire__V,VRAI)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial__V,FAUX)));
DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal__V,FAUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn__V,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn__V,NEGA(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp__V,NEUT(FU))));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp__V,NEUT(FU))));
DEFV(Common,DEFV(Int,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E__V,UN)));

#define   REPLIEMENT_AFFINE_PAR_MORCEAUX_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante)                                 \
                    CON02(IFLT(valeur_de_la_composante                                                                                  \
                              ,gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn`nom_de_la_composante                   \
                               )                                                                                                        \
                         ,AXPB(NEGA(DIVZ(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn`nom_de_la_composante         \
                                        ,gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn`nom_de_la_composante         \
                                         )                                                                                              \
                                    )                                                                                                   \
                              ,valeur_de_la_composante                                                                                  \
                              ,DOUB(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yn`nom_de_la_composante)             \
                               )                                                                                                        \
                         ,IFGT(valeur_de_la_composante                                                                                  \
                              ,gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp`nom_de_la_composante                   \
                               )                                                                                                        \
                         ,AXPB(NEGA(DIVZ(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp`nom_de_la_composante         \
                                        ,gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp`nom_de_la_composante         \
                                         )                                                                                              \
                                    )                                                                                                   \
                              ,valeur_de_la_composante                                                                                  \
                              ,DOUB(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_yp`nom_de_la_composante)             \
                               )                                                                                                        \
                         ,NEUT(valeur_de_la_composante)                                                                                 \
                          )                                                                                                             \
                                        /* Repliement d'une composante {R,I,J,K,S,T,U,V} suivant (avec un "Signe" positif) :         */ \
                                        /*                                                                                           */ \
                                        /*                                            ^                                              */ \
                                        /*                                            |                                              */ \
                                        /*                        \                   |                                              */ \
                                        /*                         \                  |                                              */ \
                                        /*                          \               yp*. . .*                                        */ \
                                        /*                           \                |    /.\                                       */ \
                                        /*                            \               |   / . \                                      */ \
                                        /*                             \              |  /  .  \                                     */ \
                                        /*                              \             | /   .   \                                    */ \
                                        /*                               \      xn    |/    .    \ 2.xp                              */ \
                                        /*                        --------*-----*-----O-----*-----*-------------------->             */ \
                                        /*                            2.xn \    .    /|     xp     \                                 */ \
                                        /*                                  \   .   / |             \                                */ \
                                        /*                                   \  .  /  |              \                               */ \
                                        /*                                    \ . /   |               \                              */ \
                                        /*                                     \./    |                \                             */ \
                                        /*                                      *. . .*yn               \                            */ \
                                        /*                                            |                  \                           */ \
                                        /*                                            |                   \                          */ \
                                        /*                                                                                           */ \
                                        /* (avec "n" pour "Negatif" et "p" pour "Positif"), le "Signe" negatif permettant de faire   */ \
                                        /* une symetrie par rapport a l'axe des abscisses...                                         */
#define   REPLIEMENT_POLYNOMIAL_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante)                                          \
                    MUL2(NEGA(valeur_de_la_composante)                                                                                  \
                        ,EXPn(MUL2(SOUS(valeur_de_la_composante                                                                         \
                                       ,DOUB(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xn`nom_de_la_composante)    \
                                        )                                                                                               \
                                  ,SOUS(valeur_de_la_composante                                                                         \
                                       ,DOUB(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp`nom_de_la_composante)    \
                                        )                                                                                               \
                                   )                                                                                                    \
                             ,gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_E`nom_de_la_composante                     \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Repliement d'une composante {R,I,J,K,S,T,U,V} a l'aide d'un polynome (de degre impair de  */ \
                                        /* preference si l'on souhaite "simuler" le "zig-zag" affine par morceaux...) dont les       */ \
                                        /* intersections avec les axes sont donnees par les racines {2.xn,0,2.xp}.                   */
#define   REPLIEMENT_SINUSOIDAL_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante)                                          \
                    SINX(SCAL(valeur_de_la_composante                                                                                   \
                             ,DOUB(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_xp`nom_de_la_composante)              \
                             ,PI                                                                                                        \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Repliement d'une composante {R,I,J,K,S,T,U,V} a l'aide d'une sinusoide dont les           */ \
                                        /* intersections avec les axes sont donnees par les racines {2.xp+k.pi}.                     */

#define   REPLIEMENT_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante)                                                     \
                    MUL2(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_S`nom_de_la_composante                          \
                        ,CON03(IL_FAUT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_lineaire`nom_de_la_composante)    \
                              ,REPLIEMENT_AFFINE_PAR_MORCEAUX_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante)            \
                              ,IL_FAUT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_polynomial`nom_de_la_composante)  \
                              ,REPLIEMENT_POLYNOMIAL_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante)                     \
                              ,IL_FAUT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement_sinusoidal`nom_de_la_composante)  \
                              ,REPLIEMENT_SINUSOIDAL_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante)                     \
                              ,valeur_de_la_composante                                                                                  \
                               )                                                                                                        \
                         )                                                                                                              \
                                        /* Repliement d'une composante {R,I,J,K,S,T,U,V}.                                            */

DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion,VRAI)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2__R,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2__R,PARAMETRE_D_INVERSION_Rs2)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2__I,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2__I,PARAMETRE_D_INVERSION_Rs2)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2__J,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2__J,PARAMETRE_D_INVERSION_Rs2)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2__K,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2__K,PARAMETRE_D_INVERSION_Rs2)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2__S,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2__S,PARAMETRE_D_INVERSION_Rs2)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2__T,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2__T,PARAMETRE_D_INVERSION_Rs2)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2__U,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2__U,PARAMETRE_D_INVERSION_Rs2)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2__V,PARAMETRE_D_INVERSION_Ri2)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2__V,PARAMETRE_D_INVERSION_Rs2)));

#define   INVERSION_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante,carre_du_module)                                      \
                    CON02(IFLE(carre_du_module                                                                                          \
                              ,gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2`nom_de_la_composante                   \
                               )                                                                                                        \
                         ,DIVZ(valeur_de_la_composante                                                                                  \
                              ,gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2`nom_de_la_composante                   \
                               )                                                                                                        \
                         ,IFINof(carre_du_module                                                                                        \
                                ,gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Ri2`nom_de_la_composante                 \
                                ,gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion_Rs2`nom_de_la_composante                 \
                                 )                                                                                                      \
                         ,DIVZ(valeur_de_la_composante                                                                                  \
                              ,carre_du_module                                                                                          \
                               )                                                                                                        \
                         ,valeur_de_la_composante                                                                                       \
                          )                                                                                                             \
                                        /* Inversion d'une composante {R,I,J,K,S,T,U,V} grace a un rayon "Inferieur" et a un rayon   */ \
                                        /* "Superieur". Au dessus du rayon "Superieur", la valeur de la composante est conservee.    */ \
                                        /* Entre le rayon "Inferieur" et le rayon "Superieur", la composante subit une inversion     */ \
                                        /* par rapport a l'hyper-hyper-sphere unite. Enfin, en dessous du rayon "Inferieur", la      */ \
                                        /* composante subit une inversion "etrange"...                                               */

DEFV(Common,DEFV(Logical,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire,VRAI)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A__R,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B__R,FZERO)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A__I,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B__I,FZERO)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A__J,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B__J,FZERO)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A__K,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B__K,FZERO)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A__S,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B__S,FZERO)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A__T,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B__T,FZERO)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A__U,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B__U,FZERO)));

DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A__V,FDEUX)));
DEFV(Common,DEFV(Float,ZINT(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B__V,FZERO)));

#define   TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(nom_de_la_composante,valeur_de_la_composante)                                        \
                    AXPB(gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_A`nom_de_la_composante             \
                        ,valeur_de_la_composante                                                                                        \
                        ,gF_ITERATION_DANS_HHC_____transformer__suite_point__transformation_lineaire_B`nom_de_la_composante             \
                         )                                                                                                              \
                                        /* Transformation lineaire d'une composante {R,I,J,K,S,T,U,V}.                               */

#define   gF_ITERATION_DANS_HHC__INITIALISATIONS_DIVERSES                                                                               \
                    Bblock                                                                                                              \
                    BLOC(VIDE;);                                                                                                        \
                    Eblock                                                                                                              \
                                        /* Introduit le 20210206174951...                                                            */

#define   gF_ITERATION_DANS_HHC(test_d_arret,initialisation_point_courant,init_iteration,calculs_communs,fonc_iteration,fin_iteration)  \
                                        /* Sequence de calcul de la valeur a donner au point courant {X,Y}.                          */ \
                                        /*                                                                                           */ \
                                        /* L'argument 'fin_iteration' a ete introduit le 20150225152454...                           */ \
                    Bblock                                                                                                              \
                    INITIALISATION_TRANSFORMATION;                                                                                      \
                                        /* Au cas ou une rotation tridimensionnelle serait demandee...                               */ \
                                                                                                                                        \
                    BLOC(initialisation_point_courant);                                                                                 \
                                        /* Le "point_courant" 'C' est a priori le point courant {X,Y} sur le maillage de l'image.    */ \
                                                                                                                                        \
                    BLOC(init_iteration);                                                                                               \
                                        /* Initialisation de la suite des nombres hyper-hyper-complexes sur le "point_courant",      */ \
                                        /* soit :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  O  = 0                                                                   */ \
                                        /*                   0                                                                       */ \
                                        /*                                                                                           */ \
                                        /* ou :                                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  O  = C                                                                   */ \
                                        /*                   0                                                                       */ \
                                        /*                                                                                           */ \
                                        /* et, initialisation du compteur des iterations.                                            */ \
                                                                                                                                        \
                    Tant(IFET(test_d_arret                                                                                              \
                             ,PAS_ASSEZ_D_ITERATIONS                                                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(gF_ITERATION_DANS_HHC_____transformer__suite_point))                                              \
                              Bblock                                                                                                    \
                              Repe(gF_ITERATION_DANS_HHC_____transformer__suite_point__nombre_repetitions)                              \
                                   Bblock                                                                                               \
                                   Test(IL_FAUT(gF_ITERATION_DANS_HHC_____transformer__suite_point__repliement))                        \
                                        Bblock                                                                                          \
                                        DEFV(hyper_hyper_complexe,suite_point_manoeuvre);                                               \
                                                                                                                                        \
                                        HHCinitialisation(suite_point_manoeuvre                                                         \
                                                         ,REPLIEMENT_D_UNE_COMPOSANTE(_R,HHReelle(suite_point))                         \
                                                         ,REPLIEMENT_D_UNE_COMPOSANTE(_I,HHImaginaire(suite_point))                     \
                                                         ,REPLIEMENT_D_UNE_COMPOSANTE(_J,HHJmaginaire(suite_point))                     \
                                                         ,REPLIEMENT_D_UNE_COMPOSANTE(_K,HHKmaginaire(suite_point))                     \
                                                         ,REPLIEMENT_D_UNE_COMPOSANTE(_S,HHSmaginaire(suite_point))                     \
                                                         ,REPLIEMENT_D_UNE_COMPOSANTE(_T,HHTmaginaire(suite_point))                     \
                                                         ,REPLIEMENT_D_UNE_COMPOSANTE(_U,HHUmaginaire(suite_point))                     \
                                                         ,REPLIEMENT_D_UNE_COMPOSANTE(_V,HHVmaginaire(suite_point))                     \
                                                          );                                                                            \
                                        /* On notera que les composantes s'appellent {_R,_I,_J,_K,_S,_T,_U,_V}, alors qu'il aurait   */ \
                                        /* ete evidemment plus logique de les appeler {R,I,J,K,S,T,U,V}. Le probleme vient du fait   */ \
                                        /* que le symbole 'I' est defini ('v $xil/defi_K1$vv$DEF .define...I.') et ne peut donc      */ \
                                        /* etre utilise ici...                                                                       */ \
                                        HHCegal(suite_point,suite_point_manoeuvre);                                                     \
                                        /* Repliement de 'suite_point'...                                                            */ \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                                                                                                                        \
                                   Test(IL_FAUT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion))                         \
                                        Bblock                                                                                          \
                                        DEFV(Float,INIT(module2__suite_point,HHCmodule2(suite_point)));                                 \
                                        DEFV(hyper_hyper_complexe,suite_point_manoeuvre);                                               \
                                                                                                                                        \
                                        HHCinitialisation(suite_point_manoeuvre                                                         \
                                                         ,INVERSION_D_UNE_COMPOSANTE(_R,HHReelle(suite_point),module2__suite_point)     \
                                                         ,INVERSION_D_UNE_COMPOSANTE(_I,HHImaginaire(suite_point),module2__suite_point) \
                                                         ,INVERSION_D_UNE_COMPOSANTE(_J,HHJmaginaire(suite_point),module2__suite_point) \
                                                         ,INVERSION_D_UNE_COMPOSANTE(_K,HHKmaginaire(suite_point),module2__suite_point) \
                                                         ,INVERSION_D_UNE_COMPOSANTE(_S,HHSmaginaire(suite_point),module2__suite_point) \
                                                         ,INVERSION_D_UNE_COMPOSANTE(_T,HHTmaginaire(suite_point),module2__suite_point) \
                                                         ,INVERSION_D_UNE_COMPOSANTE(_U,HHUmaginaire(suite_point),module2__suite_point) \
                                                         ,INVERSION_D_UNE_COMPOSANTE(_V,HHVmaginaire(suite_point),module2__suite_point) \
                                                          );                                                                            \
                                        HHCegal(suite_point,suite_point_manoeuvre);                                                     \
                                        /* Inversion de 'suite_point'...                                                             */ \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                                                                                                                        \
                                   Test(IL_FAUT(gF_ITERATION_DANS_HHC_____transformer__suite_point__inversion))                         \
                                        Bblock                                                                                          \
                                        DEFV(hyper_hyper_complexe,suite_point_manoeuvre);                                               \
                                                                                                                                        \
                                        HHCinitialisation(suite_point_manoeuvre                                                         \
                                                         ,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_R,HHReelle(suite_point))            \
                                                         ,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_I,HHImaginaire(suite_point))        \
                                                         ,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_J,HHJmaginaire(suite_point))        \
                                                         ,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_K,HHKmaginaire(suite_point))        \
                                                         ,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_S,HHSmaginaire(suite_point))        \
                                                         ,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_T,HHTmaginaire(suite_point))        \
                                                         ,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_U,HHUmaginaire(suite_point))        \
                                                         ,TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE(_V,HHVmaginaire(suite_point))        \
                                                          );                                                                            \
                                        HHCegal(suite_point,suite_point_manoeuvre);                                                     \
                                        /* Transformation lineaire  de 'suite_point'...                                              */ \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              ERep                                                                                                      \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         BLOC(calculs_communs);                                                                                         \
                                                                                                                                        \
                         INCR(nombre_courant_d_iterations,I);                                                                           \
                                                                                                                                        \
                         BLOC(fonc_iteration);                                                                                          \
                                        /* Puis :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                    2                                                                      */ \
                                        /*                  O   + C                                                                  */ \
                                        /*                   n                                                                       */ \
                                        /*                                                                                           */ \
                                        /* ou :                                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                    2                                                                      */ \
                                        /*                  O   + A                                                                  */ \
                                        /*                   n                                                                       */ \
                                        /*                                                                                           */ \
                                                                                                                                        \
                         Test(IL_FAUT(gF_ITERATION_DANS_HHC_____replier_l_espace))                                                      \
                              Bblock                                                                                                    \
                              DEFV(hyper_hyper_complexe,suite_point_manoeuvre);                                                         \
                                                                                                                                        \
                              aHHCmodulo(suite_point_manoeuvre                                                                          \
                                        ,suite_point                                                                                    \
                                        ,gF_ITERATION_DANS_HHC_____Rorigine__                                                           \
                                        ,gF_ITERATION_DANS_HHC_____Rextremite                                                           \
                                        ,gF_ITERATION_DANS_HHC_____Iorigine__                                                           \
                                        ,gF_ITERATION_DANS_HHC_____Iextremite                                                           \
                                        ,gF_ITERATION_DANS_HHC_____Jorigine__                                                           \
                                        ,gF_ITERATION_DANS_HHC_____Jextremite                                                           \
                                        ,gF_ITERATION_DANS_HHC_____Korigine__                                                           \
                                        ,gF_ITERATION_DANS_HHC_____Kextremite                                                           \
                                        ,gF_ITERATION_DANS_HHC_____Sorigine__                                                           \
                                        ,gF_ITERATION_DANS_HHC_____Sextremite                                                           \
                                        ,gF_ITERATION_DANS_HHC_____Torigine__                                                           \
                                        ,gF_ITERATION_DANS_HHC_____Textremite                                                           \
                                        ,gF_ITERATION_DANS_HHC_____Uorigine__                                                           \
                                        ,gF_ITERATION_DANS_HHC_____Uextremite                                                           \
                                        ,gF_ITERATION_DANS_HHC_____Vorigine__                                                           \
                                        ,gF_ITERATION_DANS_HHC_____Vextremite                                                           \
                                         );                                                                                             \
                                        /* Repliement eventuel de l'espace introduit le 20121103101108...                            */ \
                                                                                                                                        \
                              HHCegal(suite_point,suite_point_manoeuvre);                                                               \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         TEST_D_UNDERFLOW_D_UNE_SUITE_HYPER_HYPER_COMPLEXE(suite_point,iterations_dans_C_HC_HHC_____epsilon);           \
                                        /* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter                      */ \
                                        /* des underflows flottants...                                                               */ \
                         Eblock                                                                                                         \
                    ETan                                                                                                                \
                                                                                                                                        \
                    Test(IL_FAUT(visualisation_arguments_de_sortie))                                                                    \
                                        /* Sequence introduite le 20111001084001...                                                  */ \
                         Bblock                                                                                                         \
                         Test(IL_NE_FAUT_PAS(iterations_dans_C_HC_HHC_____memoriser_le_module_plutot_que_les_arguments))                \
                              Bblock                                                                                                    \
                              EGAL(niveau_courant_precis                                                                                \
                                  ,LRZ7(ponderation_argumentA1,HHCargumentA1_2PI(suite_point)                                           \
                                       ,ponderation_argumentA2,HHCargumentA2_2PI(suite_point)                                           \
                                       ,ponderation_argumentA3,HHCargumentA3_2PI(suite_point)                                           \
                                       ,ponderation_argumentA4,HHCargumentA4_2PI(suite_point)                                           \
                                       ,ponderation_argumentA5,HHCargumentA5_2PI(suite_point)                                           \
                                       ,ponderation_argumentA6,HHCargumentA6_2PI(suite_point)                                           \
                                       ,ponderation_argumentA7,HHCargumentA7_2PI(suite_point)                                           \
                                        )                                                                                               \
                                   );                                                                                                   \
                              EGAL(niveau_courant                                                                                       \
                                  ,GENP(SCAL(niveau_courant_precis                                                                      \
                                            ,CERCLE_TRIGONOMETRIQUE                                                                     \
                                            ,BLANC                                                                                      \
                                             )                                                                                          \
                                        )                                                                                               \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              EGAL(niveau_courant_precis                                                                                \
                                  ,HHCmodule(suite_point)                                                                               \
                                   );                                                                                                   \
                              EGAL(niveau_courant                                                                                       \
                                  ,GENP(SCAL(TRON(niveau_courant_precis                                                                 \
                                                 ,iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments   \
                                                 ,iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments   \
                                                  )                                                                                     \
                                            ,SOUS(iterations_dans_C_HC_HHC_____maximum_du_module_a_memoriser_plutot_que_les_arguments   \
                                                 ,iterations_dans_C_HC_HHC_____minimum_du_module_a_memoriser_plutot_que_les_arguments   \
                                                  )                                                                                     \
                                            ,BLANC                                                                                      \
                                             )                                                                                          \
                                        )                                                                                               \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Test(IL_NE_FAUT_PAS(iterations_dans_C_HC_HHC_____visualiser_l_appartenance_plutot_que_le_nombre_d_iterations)) \
                              Bblock                                                                                                    \
                              EGAL(niveau_courant_precis                                                                                \
                                  ,CASP_Float(nombre_courant_d_iterations)                                                              \
                                   );                                                                                                   \
                              EGAL(niveau_courant                                                                                       \
                                  ,GENP(COND(IL_FAUT(iterations_dans_C_HC_HHC_____renormaliser_le_nombre_d_iterations)                  \
                                            ,SCAL(nombre_courant_d_iterations                                                           \
                                                 ,nombre_maximal_d_iterations                                                           \
                                                 ,BLANC                                                                                 \
                                                  )                                                                                     \
                                            ,nombre_courant_d_iterations                                                                \
                                             )                                                                                          \
                                        )                                                                                               \
                                   );                                                                                                   \
                                        /* Visualisation du nombre d'iterations...                                                   */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              EGAL(niveau_courant_precis                                                                                \
                                  ,COND(PAS_ASSEZ_D_ITERATIONS                                                                          \
                                       ,fNON_APPARTENANCE_A_L_ENSEMBLE                                                                  \
                                       ,fAPPARTENANCE_A_L_ENSEMBLE                                                                      \
                                        )                                                                                               \
                                   );                                                                                                   \
                              EGAL(niveau_courant                                                                                       \
                                  ,COND(PAS_ASSEZ_D_ITERATIONS                                                                          \
                                       ,NON_APPARTENANCE_A_L_ENSEMBLE                                                                   \
                                       ,APPARTENANCE_A_L_ENSEMBLE                                                                       \
                                        )                                                                                               \
                                   );                                                                                                   \
                                        /* Visualisation de la non appartenance ('NOIR') et de l'appartenance ('BLANC').             */ \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                        /* Calcul du niveau du point.                                                                */ \
                                                                                                                                        \
                    RANGEMENT_DU_NIVEAU_COURANT_ET_EVENTUELLEMENT_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;              \
                                        /* Et enfin, marquage du point courant.                                                      */ \
                                                                                                                                        \
                    BLOC(fin_iteration);                                                                                                \
                                        /* Cette possibilite a ete introduite le 20150225152454...                                   */ \
                    Eblock

DEFV(Common,DEFV(Logical,ZINT(F_ITERATION_DANS_HHC_____compatibilite_20110825,FAUX)));
                                        /* Introduit le 20110825111448 car, en effet pour le calcul du carre, les methodes           */
                                        /* 'HHCproduit(...)' et 'HHCpuissance(...)' ne donnent evidemment le meme resultat que       */
                                        /* si le produit theorique est utilise. Dans le cas contraire, on a :                        */
                                        /*                                                                                           */
                                        /*                   2                                                                       */
                                        /*                  o  # 1.o.o                                                               */
                                        /*                                                                                           */
                                        /* ce que j'avais neglige dans un premier temps. Voici un petit exemple obtenu lors du       */
                                        /* calcul du deuxieme point de 'v $xiirc/MANE.D1.2' avec '$xrc/mandel.81$x' et les           */
                                        /* parametres suivants :                                                                     */
                                        /*                                                                                           */
                                        /*                  J=0.8                                                                    */
                                        /*                  K=0                                                                      */
                                        /*                  xbg=-0.04403889 xhd=-0.03475372                                          */
                                        /*                  ybg=-0.36672577 yhd=-0.35744060                                          */
                                        /*                                                                                           */
                                        /* Soit donc l'octonion 'o1' dont on veut calculer le carre ('o') :                          */
                                        /*                                                                                           */
                                        /*                  o1                    = (-0.045705,-0.366726,+0.800000,0,0,0,0,0)        */
                                        /*                                                                                           */
                                        /* Dans le cas "produit_theorique=VRAI", on a :                                              */
                                        /*                                                                                           */
                                        /*        avec 'HHCproduit(...)' :                                                           */
                                        /*                                                                                           */
                                        /*                  o                     = (-0.772399,+0.033522,-0.073128,0,0,0,0,0) ====   */
                                        /*                                                                                        |  */
                                        /*        avec 'HHCpuissance(...)' :                                                      |  */
                                        /*                                                                                        |  */
                                        /*                  o_cumul_multiplicatif = (+1.000000, 0.000000, 0.000000,0,0,0,0,0)     |  */
                                        /*                  o_cumul_multiplicatif = (-0.045705,-0.366726,+0.800000,0,0,0,0,0)     |  */
                                        /*                  o_cumul_multiplicatif = (-0.772399,+0.033522,-0.073128,0,0,0,0,0)     |  */
                                        /*                  o                     = (-0.772399,+0.033522,-0.073128,0,0,0,0,0) ====   */
                                        /*                                                                                           */
                                        /* ce qui donne bien le meme resultat ("=") 'o' pour le carre...                             */
                                        /*                                                                                           */
                                        /* Dans le cas "produit_non_theorique=VRAI", on a :                                          */
                                        /*                                                                                           */
                                        /*        avec 'HHCproduit(...)' :                                                           */
                                        /*                                                                                           */
                                        /*                  o                     = (-0.042562,-0.097115,-0.079080,0,0,0,0,0) ####   */
                                        /*                                                                                        |  */
                                        /*        avec 'HHCpuissance(...)' :                                                      |  */
                                        /*                                                                                        |  */
                                        /*                  o_cumul_multiplicatif = (+1.000000, 0.000000, 0.000000,0,0,0,0,0)     |  */
                                        /*                  o_cumul_multiplicatif = (-0.188844,+0.288948,+0.114547,0,0,0,0,0)     |  */
                                        /*                  o_cumul_multiplicatif = (-0.000061,-0.000033,-0.000087,0,0,0,0,0)     |  */
                                        /*                  o                     = (-0.000061,-0.000033,-0.000087,0,0,0,0,0) ####   */
                                        /*                                                                                           */
                                        /* ce qui donne deux valeurs differentes ("#") 'o' pour le carre...                          */

#define   F_ITERATION_DANS_HHC(test_d_arret,init_iteration,fonc_iteration,exposant,fin_iteration)                                       \
                                        /* Sequence de calcul de la valeur a donner au point courant {X,Y}.                          */ \
                                        /*                                                                                           */ \
                                        /* Le parametre 'exposant' a ete introduit le 20110824071959...                              */ \
                                        /*                                                                                           */ \
                                        /* L'argument 'fin_iteration' a ete introduit le 20150225152454...                           */ \
                    Bblock                                                                                                              \
                    Test(IFET(IL_FAUT(F_ITERATION_DANS_HHC_____compatibilite_20110825),IFNE(exposant,FDEUX)))                           \
                                        /* Le parametre 'exposant' est passe de 'Int' a 'Float' le 20110829152111...                 */ \
                         Bblock                                                                                                         \
                         PRINT_ATTENTION("la compatibilite 20110825 des iterations hyper-hyper-complexes impose le second degre");      \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    gF_ITERATION_DANS_HHC(test_d_arret                                                                                  \
                                         ,BLOC(Bblock                                                                                   \
                                               INITIALISATION_DU_POINT_COURANT_DANS_HHC;                                                \
                                               Eblock                                                                                   \
                                               )                                                                                        \
                                         ,BLOC(init_iteration);                                                                         \
                                         ,BLOC(Bblock                                                                                   \
                                               Test(IL_NE_FAUT_PAS(F_ITERATION_DANS_HHC_____compatibilite_20110825))                    \
                                                    Bblock                                                                              \
                                                    aHHCpuissance(point_manoeuvre,suite_point,exposant);                                \
                                        /* Calculons :                                                                               */ \
                                        /*                                                                                           */ \
                                        /*                    2                                                                      */ \
                                        /*                  O                                                                        */ \
                                        /*                   n                                                                       */ \
                                        /*                                                                                           */ \
                                        /* a priori (mais cela peut etre inutile dans certains cas...).                              */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, rappelons que le produit de deux octonions n'est pas commutatif, ce qui        */ \
                                        /* heureusement ici n'a pas d'importance puisque le produit ici calcule est un carre...      */ \
                                        /*                                                                                           */ \
                                        /* Le 20110824071959 :                                                                       */ \
                                        /*                                                                                           */ \
                                        /*                  HHCproduit(point_manoeuvre,suite_point,suite_point);                     */ \
                                        /*                                                                                           */ \
                                        /* a ete remplace par :                                                                      */ \
                                        /*                                                                                           */ \
                                        /*                  HHCpuissance(point_manoeuvre,suite_point,exposant);                      */ \
                                        /*                                                                                           */ \
                                        /* ou 'exposant' sera assez souvent egal a 'ZERO'. Mais afin de garantir la compatibilite    */ \
                                        /* anterieure, meme la ou il est evident que 'ZERO' serait correct (et optimiserait les      */ \
                                        /* calculs), en fait 'DEUX' sera utilise...                                                  */ \
                                        /*                                                                                           */ \
                                        /* On lira avec interet le commentaire 'v $ximcf/iterations$FON 20110826090921' qui porte    */ \
                                        /* sur les quaternions et s'applique evidemment aux octonions. Il dit en substance que       */ \
                                        /* generer une fractale pour laquelle les composantes {J,K,S,T,U,V} sont nulles sauf l'une   */ \
                                        /* d'entre-elles (par exemple 'J') donnera le meme resultat si l'on donne la valeur de 'J'   */ \
                                        /* a une autre composante (par exemple 'T') en annulant 'J' evidemment...                    */ \
                                                    Eblock                                                                              \
                                               ATes                                                                                     \
                                                    Bblock                                                                              \
                                                    aHHCproduit(point_manoeuvre,suite_point,suite_point);                               \
                                        /* Possibilite introduite le 20110825111448...                                               */ \
                                                    Eblock                                                                              \
                                               ETes                                                                                     \
                                               Eblock                                                                                   \
                                               )                                                                                        \
                                         ,BLOC(fonc_iteration);                                                                         \
                                         ,BLOC(fin_iteration);                                                                          \
                                        /* Cette possibilite a ete introduite le 20150225152454...                                   */ \
                                          );                                                                                            \
                    Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D ' U N E   S U I T E   Q U E L C O N Q U E                                                          */
/*        D A N S   L ' E S P A C E   H Y P E R - H Y P E R - C O M P L E X E  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   BVARIABLES_F_ITERATION_QUELCONQUE_DANS_HHC                                                                                    \
                                        /* Definition des variables communes a toutes les fonctions calculant une suite quelconque   */ \
                                        /* dans l'espace Hyper-Complexe.                                                             */ \
                    BVARIABLES_D_HOMOTHETIE_C_HC_HHC                                                                                    \
                                        /* "Taille" reelle et imaginaire de la fenetre rapportee a la taille des images.             */ \
                    DEFV(hyper_hyper_complexe,point_courant);                                                                           \
                                        /* Point hyper-complexe courant 'C' dans la fenetre.                                         */

#define   F_ITERATION_QUELCONQUE_DANS_HHC(premiere_iteration_absolue,premiere_iteration_effective,initialisation,iteration,test_defaut) \
                    Bblock                                                                                                              \
                    DEFV(Int,INIT(numero_de_l_iteration,UNDEF));                                                                        \
                                        /* Indice 'n' de la suite 'X'...                                                             */ \
                    DEFV(hyper_hyper_complexe,element_courant_de_la_suite_Pn);                                                          \
                                        /* Element courant Z  de la suite.                                                           */ \
                                        /*                  n                                                                        */ \
                    BLOC(initialisation);                                                                                               \
                                        /* Initialisation de la suite definissant le systeme dynamique...                            */ \
                                                                                                                                        \
                    DoIn(numero_de_l_iteration                                                                                          \
                        ,premiere_iteration_effective                                                                                   \
                        ,LSTX(premiere_iteration_absolue,nombre_d_iterations)                                                           \
                        ,I                                                                                                              \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         BLOC(iteration);                                                                                               \
                                        /* Calcul du systeme dynamique par iteration du calcul de la suite...                        */ \
                                                                                                                                        \
                         Test(IL_FAUT(test_defaut))                                                                                     \
                              Bblock                                                                                                    \
                              TEST_D_UNDERFLOW_D_UNE_SUITE_HYPER_HYPER_COMPLEXE(element_courant_de_la_suite_Pn                          \
                                                                               ,iterations_dans_C_HC_HHC_____epsilon                    \
                                                                                );                                                      \
                                        /* Lorsqu'une composante devient trop petite, on l'annule afin d'eviter                      */ \
                                        /* des underflows flottants...                                                               */ \
                              TEST_D_OVERFLOW_D_UNE_SUITE_HYPER_HYPER_COMPLEXE(element_courant_de_la_suite_Pn,RACX(F_INFINI));          \
                                        /* Lorsqu'une composante devient trop grande, on la plafonne afin d'eviter des underflows    */ \
                                        /* flottants. On notera l'utilisation de 'RACX(...)' pour prendre en compte l'elevation au   */ \
                                        /* carre lors de l'eventuelle iteration suivante...                                          */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         Eblock                                                                                                         \
                    EDoI                                                                                                                \
                                                                                                                                        \
                    storeHJ_point(element_courant_de_la_suite_Pn                                                                        \
                                 ,imageR                                                                                                \
                                 ,X,Y                                                                                                   \
                                  );                                                                                                    \
                                        /* Generation de l'image "hyper_hyper_complexe"...                                           */ \
                    Eblock                                                                                                              \
                                        /* Calcul general d'une suite quelconque dans l'espace hyper-complexe...                     */

/*===================================================================================================================================*/
/*        :Debut_listMN_MANDELBROT_OCTONION_11:                                                                                      */
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' E N S E M B L E   D E   M A N D E L B R O T    D A N S   U N E    F E N E T R E                    */
/*        D A N S   L ' E S P A C E   H Y P E R - H Y P E R - C O M P L E X E  :                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Soit la suite :                                                                                                */
/*                                                                                                                                   */
/*                                      O    = 0                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                                              2                                                                                    */
/*                                      O    = O  + C                                                                                */
/*                                       n+1    n                                                                                    */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point courant).                                                                               */
/*                                                                                                                                   */
/*                    Si |O | tend vers l'infini, 'C'                                                                                */
/*                         n                                                                                                         */
/*                  n'appartient pas a l'ensemble de Mandelbrot.                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Forme generale d'une section tridimensionnelle :                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                          :                                                                        */
/*                                                        ++--::                                                                     */
/*                                                       +++----:::..                                                                */
/*                                                       +++++--::...                                                                */
/*                                                     oooo+o+----::..                                                               */
/*                                                   * ooooo++++--::..                                                               */
/*                                              ----:***oooooo++------.  --:                                                         */
/*                                            ++++++-o*****ooo++++++----+---:                                                        */
/*                                            ++o+++o*****ooo+++++++++o+++-:::                                                       */
/*                                           ooooo+o********oooooo++o+o++-::::.                                                      */
/*                             +--   --     ooooooo**#***#**oooooooooooo+-----.                                                      */
/*                            ++++--++----  ooooooo######***ooooooooooo++++--:.                                                      */
/*                          o+++++++++++++-o**ooo***####*****o**oooo*oo+++---::                                                      */
/*                         - o+++++o++++++o*****o**#####********oo*o*oooo+---::                                                      */
/*                         +ooo+++oo++++++o*******########************ooo+---::                                                      */
/*                     - +-oooooo+ooooo+++********#########***********ooo----::                                                      */
/*                        +ooooooooooooo++*******#########************ooo+---:                                                       */
/*                         oooooooooooo+++*******#########************ooo+---:                                                       */
/*                          oooo++oo++++++*******#########************ooo++--:                                                       */
/*                           o+++++o++++- o******#########************ooo+---                                                        */
/*                          o+++    +     o*******########************o++++-:                                                        */
/*                                         *******#########*****oo*o**o+----                                                         */
/*                                         ***ooo*########******oooo*oo++---                                                         */
/*                                          oooooo*#*###***ooooooo+o*ooo++                                                           */
/*                                           o+o++*#####****oo++o++.  o++                                                            */
/*                                                 *#####****o++--                                                                   */
/*                                                 ####*##oooo++-                                                                    */
/*                                                   #****oo+---                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
/*        :Fin_listMN_MANDELBROT_OCTONION_11:                                                                                        */

BFonctionP

DEFV(Common,DEFV(Float,SINT(Imandelbrot_dans_HHC_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_HHC)));
                                        /* Seuil de divergence du carre du module d'un nombre hyper-hyper-complexe de la suite       */
                                        /* dans ce cas particulier...                                                                */
DEFV(Common,DEFV(Float,SINT(Imandelbrot_dans_HHC_____exposant,FDEUX)));
                                        /* Introduit le 20110824071959...                                                            */
                                        /*                                                                                           */
                                        /* Le 20110829143849 l'exposant est passe de 'Int' a 'Float'...                              */

DEFV(Common,DEFV(Logical,SINT(Imandelbrot_dans_HHC_____charger_____l_etat_initial,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageHHJ,Imandelbrot_dans_HHC_____etat_initial),ADRESSE_NON_ENCORE_DEFINIE)));
DEFV(Common,DEFV(Logical,SINT(Imandelbrot_dans_HHC_____sauvegarder_l_etat_final__,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageHHJ,Imandelbrot_dans_HHC_____etat_final__),ADRESSE_NON_ENCORE_DEFINIE)));
                                        /* La possibilite de charger et sauvegarder les etats initiaux et finaux a ete               */
                                        /* introduit le 20150227205446...                                                            */

DEFV(Common,DEFV(FonctionP,POINTERp(Imandelbrot_dans_HHC(imageR
                                                        ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                        ,ARGUMENT_POINTERs(coin_haut_droite)
                                                        ,composante_J
                                                        ,composante_K
                                                        ,composante_S
                                                        ,composante_T
                                                        ,composante_U
                                                        ,composante_V
                                                        ,nombre_maximal_d_iterations
                                                        ,visualisation_arguments_de_sortie
                                                        ,ponderation_argumentA1
                                                        ,ponderation_argumentA2
                                                        ,ponderation_argumentA3
                                                        ,ponderation_argumentA4
                                                        ,ponderation_argumentA5
                                                        ,ponderation_argumentA6
                                                        ,ponderation_argumentA7
                                                         )
                                    )
                 )
     )
                                        /* Fonction introduite le 20110802111915...                                                  */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
DEFV(Argument,DEFV(Float,composante_S));
DEFV(Argument,DEFV(Float,composante_T));
DEFV(Argument,DEFV(Float,composante_U));
DEFV(Argument,DEFV(Float,composante_V));
                                        /* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace          */
                                        /* bidimensionnel de l'espace hyper-hyper-complexe' dans lequel seront definies les          */
                                        /* composantes 'HHReelle' et 'HHImaginaire'. Les Arguments 'composante_?' definissent        */
                                        /* 'HH?maginaire' (ou '?' represente {J,K,S,T,U,V}).                                         */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentA1));
DEFV(Argument,DEFV(Float,ponderation_argumentA2));
DEFV(Argument,DEFV(Float,ponderation_argumentA3));
DEFV(Argument,DEFV(Float,ponderation_argumentA4));
DEFV(Argument,DEFV(Float,ponderation_argumentA5));
DEFV(Argument,DEFV(Float,ponderation_argumentA6));
DEFV(Argument,DEFV(Float,ponderation_argumentA7));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : une combinaison lineaire des arguments {A1,A2,A3,A4,A5,A6,A7} de     */
                                        /* de O  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'),  */
                                        /*     n                                                                                     */
                                        /* les sept valeurs flottantes etant les ponderations des arguments {A1,A2,A3,A4,A5,A6,A7}.  */
                                        /* Cette possibilite fut introduite le 20111001084001...                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_HHC
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision.                       */

     begin_image
          Bblock
          F_ITERATION_DANS_HHC(TEST_DU_CARRE_DU_MODULE_DANS_HHC(Imandelbrot_dans_HHC_____seuil_du_carre_du_module)
                              ,BLOC(Bblock
                                    Test(IL_FAUT(Imandelbrot_dans_HHC_____charger_____l_etat_initial))
                                         Bblock
                                         HHCegal(suite_point,loadHHJ_point(Imandelbrot_dans_HHC_____etat_initial,X,Y));
                                         Eblock
                                    ATes
                                         Bblock
                                         HHCegal(suite_point,HHC_____octonion__0__0__0__0__0__0__0__0);
                                        /* Initialisation de la suite des nombres hyper-hyper-complexes sur l'origine, soit :        */
                                        /*                                                                                           */
                                        /*                  O  = 0                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                        /* On notera que l'on pourrait optimiser, en partant directement sur 'C', mais la difference */
                                        /* entre Julia et Mandelbrot ne serait plus evidente...                                      */
                                         Eblock
                                    ETes

                                    CLIR(nombre_courant_d_iterations);
                                        /* Initialisation du compteur des iterations.                                                */
                                    Eblock
                                    )
                              ,BLOC(Bblock
                                    aHHCsomme(suite_point,point_manoeuvre,point_courant);
                                        /* Puis :                                                                                    */
                                        /*                                                                                           */
                                        /*                    2                                                                      */
                                        /*                  O   + C                                                                  */
                                        /*                   n                                                                       */
                                        /*                                                                                           */
                                        /* ou 'C' designe le point hyper-hyper-complexe Courant.                                     */
                                    Eblock
                                    )
                              ,Imandelbrot_dans_HHC_____exposant
                              ,BLOC(Bblock
                                    Test(IL_FAUT(Imandelbrot_dans_HHC_____sauvegarder_l_etat_final__))
                                         Bblock
                                         storeHHJ_point(suite_point,Imandelbrot_dans_HHC_____etat_final__,X,Y);
                                         Eblock
                                    ATes
                                         Bblock
                                         Eblock
                                    ETes
                                    Eblock
                                    )
                                        /* Introduit le 20150225152454...                                                            */
                               );
          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*        :Debut_listMN_JULIA_OCTONION_11:                                                                                           */
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' E N S E M B L E   D E   J U L I A    D A N S   U N E    F E N E T R E                              */
/*        D A N S   L ' E S P A C E   H Y P E R - H Y P E R - C O M P L E X E  :                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Soit la suite :                                                                                                */
/*                                                                                                                                   */
/*                                      O    = C                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point courant),                                                                               */
/*                                                                                                                                   */
/*                                              2                                                                                    */
/*                                      O    = O  + A                                                                                */
/*                                       n+1    n                                                                                    */
/*                                                                                                                                   */
/*                  (ou 'A' designe un nombre hyper-hyper-complexe                                                                   */
/*                  Argument arbitraire).                                                                                            */
/*                                                                                                                                   */
/*                    Si |O | tend vers l'infini, 'C'                                                                                */
/*                         n                                                                                                         */
/*                  n'appartient pas a l'ensemble de Julia                                                                           */
/*                  calcule pour le nombre hyper-hyper-complexe 'A'.                                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Forme generale d'une section tridimensionnelle :                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  .                         .....                                                                                  */
/*                  ..    ..               ---::::                                                                                   */
/*                  .........            ..++----                                                                                    */
/*                  .......:...         :-o++++++                                                                                    */
/*                  :.....::---:..     +oooo++++                                                                                     */
/*                  ::::::::-+++-::.:::oooooooo+                                                                                     */
/*                  :::::::::++++------oooooooo..                                                                                    */
/*                  +::::::..+ooo+++++o****oooo..                                                                                    */
/*                  ++  ::...ooooo++++*********...                                                                                   */
/*                   +o    +oooo***ooo********............                                                                           */
/*                    +oo  +oooooo************............                                                                           */
/*                     +oooooooooooo*########*:::......::.                                                                           */
/*                       oooooooooooo#########::::::::::::                                                                           */
/*                        +ooooooo+++#########:::::::::::-:                                                                          */
/*                          oooooo++++#######-:::::::::----                                                                          */
/*                            ooo+++++--#####---::::--------                                                                         */
/*                             +++++++--#####--------------+++                                                                       */
/*                              ++++++---#####-------------+++-                                                                      */
/*                                 +++----####--::--------+++++-                                                                     */
/*                                   ------###:::::::-----++++++++                                                                   */
/*                                      --:####:::::::----++++ooo++                                                                  */
/*                                        ::####....:::-+++++ooooo++                                                                 */
/*                                          ######    :-+++++ooooooo+                                                                */
/*                                          #######   --+ooo++ooooooo++..                                                            */
/*                                          ######## **oooooooooooooooo+..:                                                          */
/*                                           #########oooooooooooo+ooooo+.::::::                                                     */
/*                                           #########**ooooooooooo+:::oo+::::::::                                                   */
/*                                           ***************oooooo+--:::::++::::::.                                                  */
/*                                            *********+++-oooooo+++--:::::.+++--:..                                                 */
/*                                            *ooo****o+++--:.o+++++---:::...+---:..                                                 */
/*                                             ooooooooo++-                    --:..                                                 */
/*                                              +++oooo+.                        :.                                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
/*        :Fin_listMN_JULIA_OCTONION_11:                                                                                             */

BFonctionP

DEFV(Common,DEFV(Logical,SINT(Ijulia_dans_HHC_____faire_la_rotation_de__nombre_argument,VRAI)));
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_HHC_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_HHC)));
                                        /* Seuil de divergence du carre du module d'un nombre hyper-hyper-complexe de la suite       */
                                        /* dans ce cas particulier...                                                                */
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_HHC_____exposant,FDEUX)));
                                        /* Introduit le 20110824071959...                                                            */
                                        /*                                                                                           */
                                        /* Le 20110829143849 l'exposant est passe de 'Int' a 'Float'...                              */
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_HHC_____ponderation_point_argument_A,FU)));
DEFV(Common,DEFV(Float,SINT(Ijulia_dans_HHC_____ponderation__point_courant_C,FZERO)));
                                        /* Introduit le 20130825092858...                                                            */

DEFV(Common,DEFV(Logical,SINT(Ijulia_dans_HHC_____charger_____l_etat_initial,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageHHJ,Ijulia_dans_HHC_____etat_initial),ADRESSE_NON_ENCORE_DEFINIE)));
DEFV(Common,DEFV(Logical,SINT(Ijulia_dans_HHC_____sauvegarder_l_etat_final__,FAUX)));
DEFV(Common,DEFV(NoMalloc,INIS(DEFV(imageHHJ,Ijulia_dans_HHC_____etat_final__),ADRESSE_NON_ENCORE_DEFINIE)));
                                        /* La possibilite de charger et sauvegarder les etats initiaux et finaux a ete               */
                                        /* introduit le 20150227205446...                                                            */

DEFV(Common,DEFV(FonctionP,POINTERp(Ijulia_dans_HHC(imageR
                                                   ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                   ,ARGUMENT_POINTERs(coin_haut_droite)
                                                   ,composante_J
                                                   ,composante_K
                                                   ,composante_S
                                                   ,composante_T
                                                   ,composante_U
                                                   ,composante_V
                                                   ,ARGUMENT_POINTERs(nombre_argument)
                                                   ,nombre_maximal_d_iterations
                                                   ,visualisation_arguments_de_sortie
                                                   ,ponderation_argumentA1
                                                   ,ponderation_argumentA2
                                                   ,ponderation_argumentA3
                                                   ,ponderation_argumentA4
                                                   ,ponderation_argumentA5
                                                   ,ponderation_argumentA6
                                                   ,ponderation_argumentA7
                                                    )
                                    )
                 )
     )
                                        /* Fonction introduite le 20110802111915...                                                  */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
DEFV(Argument,DEFV(Float,composante_S));
DEFV(Argument,DEFV(Float,composante_T));
DEFV(Argument,DEFV(Float,composante_U));
DEFV(Argument,DEFV(Float,composante_V));
                                        /* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace          */
                                        /* bidimensionnel de l'espace hyper-hyper-complexe' dans lequel seront definies les          */
                                        /* composantes 'HHReelle' et 'HHImaginaire'. Les Arguments 'composante_?' definissent        */
                                        /* 'HH?maginaire' (ou '?' represente {J,K,S,T,U,V}).                                         */
DEFV(Argument,DEFV(hyper_hyper_complexe,POINTERs(nombre_argument)));
                                        /* Nombre hyper-hyper-complexe "generateur" de l'ensemble de Julia que l'on veut calculer.   */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentA1));
DEFV(Argument,DEFV(Float,ponderation_argumentA2));
DEFV(Argument,DEFV(Float,ponderation_argumentA3));
DEFV(Argument,DEFV(Float,ponderation_argumentA4));
DEFV(Argument,DEFV(Float,ponderation_argumentA5));
DEFV(Argument,DEFV(Float,ponderation_argumentA6));
DEFV(Argument,DEFV(Float,ponderation_argumentA7));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : une combinaison lineaire des arguments {A1,A2,A3,A4,A5,A6,A7} de     */
                                        /* de O  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'),  */
                                        /*     n                                                                                     */
                                        /* les sept valeurs flottantes etant les ponderations des arguments {A1,A2,A3,A4,A5,A6,A7}.  */
                                        /* Cette possibilite fut introduite le 20111001084001...                                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_HHC

     DEFV(hyper_hyper_complexe,point_argument);
                                        /* Point hyper-hyper-complexe argument.                                                      */
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision.                       */

     Test(IL_FAUT(Ijulia_dans_HHC_____faire_la_rotation_de__nombre_argument))
          Bblock
          ROTATION_TRIDIMENSIONNELLE_DANS_HHC(point_argument,INDIRECT(nombre_argument));
                                        /* Recuperation du nombre hyper-hyper-complexe "generateur", avec rotation eventuelle.       */
          Eblock
     ATes
          Bblock
          HHCegal(point_argument,INDIRECT(nombre_argument));
                                        /* Cas ou la rotation de 'nombre_argument' est inhibee...                                    */
          Eblock
     ETes

     begin_image
          Bblock
          F_ITERATION_DANS_HHC(TEST_DU_CARRE_DU_MODULE_DANS_HHC(Ijulia_dans_HHC_____seuil_du_carre_du_module)
                              ,BLOC(Bblock
                                    Test(IL_FAUT(Ijulia_dans_HHC_____charger_____l_etat_initial))
                                         Bblock
                                         HHCegal(suite_point,loadHHJ_point(Ijulia_dans_HHC_____etat_initial,X,Y));
                                         Eblock
                                    ATes
                                         Bblock
                                         HHCegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres hyper-hyper-complexes sur le "point Courant" 'C',  */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  O  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                         Eblock
                                    ETes

                                    EGAL(nombre_courant_d_iterations,UN);
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */
                                        /* valeur non nulle soit rangee...                                                           */
                                    Eblock
                                    )
                              ,BLOC(Bblock
                                    DEFV(hyper_hyper_complexe,point_manoeuvre_1);

                                    aHHCcombinaison_lineaire_2(point_manoeuvre_1
                                                              ,Ijulia_dans_HHC_____ponderation_point_argument_A,point_argument
                                                              ,Ijulia_dans_HHC_____ponderation__point_courant_C,point_courant
                                                               );
                                    aHHCsomme(suite_point,point_manoeuvre,point_manoeuvre_1);
                                        /* Puis :                                                                                    */
                                        /*                                                                                           */
                                        /*                    2                                                                      */
                                        /*                  O   + A                                                                  */
                                        /*                   n                                                                       */
                                        /*                                                                                           */
                                        /* ou 'A' designe le point hyper-hyper-complexe Argument.                                    */
                                        /*                                                                                           */
                                        /* Ou plus generalement (introduit le 20130825092858) :                                      */
                                        /*                                                                                           */
                                        /*                    2                                                                      */
                                        /*                  O   + p .A + p .C                                                        */
                                        /*                   n     A      C                                                          */
                                        /*                                                                                           */
                                        /* avec pA=1 et pC=0 par defaut...                                                           */
                                    Eblock
                                    )
                              ,Ijulia_dans_HHC_____exposant
                              ,BLOC(Bblock
                                    Test(IL_FAUT(Ijulia_dans_HHC_____sauvegarder_l_etat_final__))
                                         Bblock
                                         storeHHJ_point(suite_point,Ijulia_dans_HHC_____etat_final__,X,Y);
                                         Eblock
                                    ATes
                                         Bblock
                                         Eblock
                                    ETes
                                    Eblock
                                    )
                                        /* Introduit le 20150225152454...                                                            */
                               );
          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L ' E N S E M B L E   D E   V E R H U L S T   D A N S   U N E    F E N E T R E                         */
/*        D A N S   L ' E S P A C E   H Y P E R - H Y P E R - C O M P L E X E  :                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Soit la suite :                                                                                                */
/*                                                                                                                                   */
/*                                      O    = C                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point courant),                                                                               */
/*                                                                                                                                   */
/*                                      O    = R.O .(1 - O )                                                                         */
/*                                       n+1      n       n                                                                          */
/*                                                                                                                                   */
/*                  (ou 'R' designe un nombre reel Argument                                                                          */
/*                  arbitraire appele "taux de croissance").                                                                         */
/*                                                                                                                                   */
/*                    Si |O | tend vers l'infini, 'C'                                                                                */
/*                         n                                                                                                         */
/*                  n'appartient pas a l'ensemble de Verhulst                                                                        */
/*                  calcule pour le nombre reel 'R'.                                                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Forme generale :                                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................#...............................                                                 */
/*                  ...............................###..............................                                                 */
/*                  ................................#...............................                                                 */
/*                  .........................#.###########.#........................                                                 */
/*                  ........................#################.......................                                                 */
/*                  ............####.......###################.......####...........                                                 */
/*                  .........##########...#####################...##########........                                                 */
/*                  ....###..###########..#####################..###########..###...                                                 */
/*                  ################################################################                                                 */
/*                  ....###..###########..#####################..###########..###...                                                 */
/*                  .........##########...#####################...##########........                                                 */
/*                  ............####.......###################.......####...........                                                 */
/*                  ........................#################.......................                                                 */
/*                  .........................#.###########.#........................                                                 */
/*                  ................................#...............................                                                 */
/*                  ...............................###..............................                                                 */
/*                  ................................#...............................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                  ................................................................                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Logical,SINT(Iverhulst_dans_HHC_____utiliser_la_forme_la_plus_simple,VRAI)));
                                        /* Faut-il utiliser la forme ('VRAI') :                                                      */
                                        /*                                                                                           */
                                        /*                  O    = R.O .(1 - O )                                                     */
                                        /*                   n+1      n       n                                                      */
                                        /*                                                                                           */
                                        /* ou bien la forme ('FAUX') :                                                               */
                                        /*                                                                                           */
                                        /*                                      2                                                    */
                                        /*                  O    = (R+1).O - R.O                                                     */
                                        /*                   n+1          n     n                                                    */
                                        /*                                                                                           */
DEFV(Common,DEFV(Float,SINT(Iverhulst_dans_HHC_____seuil_du_carre_du_module,SEUIL_MODULE_DANS_HHC)));
                                        /* Seuil de divergence du carre du module d'un nombre hyper-hyper-complexe de la suite       */
                                        /* dans le cas particulier du calcul de l'ensemble de Verhulst.                              */

DEFV(Common,DEFV(FonctionP,POINTERp(Iverhulst_dans_HHC(imageR
                                                      ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                      ,ARGUMENT_POINTERs(coin_haut_droite)
                                                      ,composante_J
                                                      ,composante_K
                                                      ,composante_S
                                                      ,composante_T
                                                      ,composante_U
                                                      ,composante_V
                                                      ,ARGUMENT_POINTERs(taux_de_croissance)
                                                      ,nombre_maximal_d_iterations
                                                      ,visualisation_arguments_de_sortie
                                                      ,ponderation_argumentA1
                                                      ,ponderation_argumentA2
                                                      ,ponderation_argumentA3
                                                      ,ponderation_argumentA4
                                                      ,ponderation_argumentA5
                                                      ,ponderation_argumentA6
                                                      ,ponderation_argumentA7
                                                       )
                                    )
                 )
     )
                                        /* Fonction introduite le 20111129105411...                                                  */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
DEFV(Argument,DEFV(Float,composante_S));
DEFV(Argument,DEFV(Float,composante_T));
DEFV(Argument,DEFV(Float,composante_U));
DEFV(Argument,DEFV(Float,composante_V));
                                        /* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace          */
                                        /* bidimensionnel de l'espace hyper-hyper-complexe'.                                         */
DEFV(Argument,DEFV(hyper_hyper_complexe,POINTERs(taux_de_croissance)));
                                        /* Taux de croissance hyper-hyper-complexe 'R' de l'ensemble de Verhulst que l'on veut       */
                                        /* calculer.                                                                                 */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentA1));
DEFV(Argument,DEFV(Float,ponderation_argumentA2));
DEFV(Argument,DEFV(Float,ponderation_argumentA3));
DEFV(Argument,DEFV(Float,ponderation_argumentA4));
DEFV(Argument,DEFV(Float,ponderation_argumentA5));
DEFV(Argument,DEFV(Float,ponderation_argumentA6));
DEFV(Argument,DEFV(Float,ponderation_argumentA7));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : une combinaison lineaire des arguments {A1,A2,A3,A4,A5,A6,A7}        */
                                        /* de O  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'),  */
                                        /*     n                                                                                     */
                                        /* les sept valeurs flottantes etant les ponderations des arguments {A1,A2,A3,A4,A5,A6,A7}.  */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_HHC
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision.                       */

     begin_image
          Bblock
          F_ITERATION_DANS_HHC(TEST_DU_CARRE_DU_MODULE_DANS_HHC(Iverhulst_dans_HHC_____seuil_du_carre_du_module)
                              ,BLOC(Bblock
                                    HHCegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres hyper-hyper-complexes sur le "point Courant" 'C',  */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  O  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                    EGAL(nombre_courant_d_iterations,UN);
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */
                                        /* valeur non nulle soit rangee...                                                           */
                                    Eblock
                                    )
                              ,BLOC(Bblock
                                    Test(IL_FAUT(Iverhulst_dans_HHC_____utiliser_la_forme_la_plus_simple))
                                         Bblock
                                         DEFV(hyper_hyper_complexe,point_manoeuvre_1);
                                         DEFV(hyper_hyper_complexe,point_manoeuvre_2);
                                        /* Points hyper-hyper-complexes de maneuvre lors de l'iteration.                             */

                                         aHHCforme_lineaire(point_manoeuvre_1,NEGA(FU),suite_point,FU);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  1 - O  = -O  + 1                                                         */
                                        /*                       n     n                                                             */
                                        /*                                                                                           */
                                         aHHCproduit(point_manoeuvre_2,suite_point,point_manoeuvre_1);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  O .(1 - O )                                                              */
                                        /*                   n       n                                                               */
                                        /*                                                                                           */
                                        /* ATTENTION, rappelons que le produit de deux octonions n'est pas commutatif, ce qui        */
                                        /* signifie que :                                                                            */
                                        /*                                                                                           */
                                        /*                  O .(1 - O ) # (1 - O ).O                                                 */
                                        /*                   n       n          n   n                                                */
                                        /*                                                                                           */
                                         aHHCproduit(suite_point,INDIRECT(taux_de_croissance),point_manoeuvre_2);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  O    = R.O .(1 - O )                                                     */
                                        /*                   n+1      n       n                                                      */
                                        /*                                                                                           */
                                        /* ATTENTION, rappelons que le produit de deux octonions n'est pas commutatif, ce qui        */
                                        /* signifie que :                                                                            */
                                        /*                                                                                           */
                                        /*                  R.O # O.R                                                                */
                                        /*                                                                                           */
                                         Eblock
                                    ATes
                                         Bblock
                                         DEFV(hyper_hyper_complexe,point_manoeuvre_1);
                                         DEFV(hyper_hyper_complexe,point_manoeuvre_2);
                                         DEFV(hyper_hyper_complexe,point_manoeuvre_3);
                                         DEFV(hyper_hyper_complexe,point_manoeuvre_4);
                                        /* Points hyper-hyper-complexes de maneuvre lors de l'iteration.                             */

                                         aHHCproduit(point_manoeuvre_1,suite_point,suite_point);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                   2                                                                       */
                                        /*                  O                                                                        */
                                        /*                   n                                                                       */
                                        /*                                                                                           */

                                         aHHCproduit(point_manoeuvre_2,INDIRECT(taux_de_croissance),point_manoeuvre_1);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                     2                                                                     */
                                        /*                  R.O                                                                      */
                                        /*                     n                                                                     */
                                        /*                                                                                           */

                                         aHHCforme_lineaire(point_manoeuvre_3,FU,INDIRECT(taux_de_croissance),FU);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  R+1                                                                      */
                                        /*                                                                                           */

                                         aHHCproduit(point_manoeuvre_4,point_manoeuvre_3,suite_point);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                  (R+1).O                                                                  */
                                        /*                         n                                                                 */
                                        /*                                                                                           */

                                         aHHCdifference(suite_point,point_manoeuvre_4,point_manoeuvre_2);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                                      2                                                    */
                                        /*                  O    = (R+1).O - R.O                                                     */
                                        /*                   n+1          n     n                                                    */
                                        /*                                                                                           */
                                         Eblock
                                    ETes
                                    Eblock
                                    )
                              ,EXPOSANT_INUTILE
                                        /* Le 20111130114853, je note que cet argument ('DEUX') est inutile ici, de meme que         */
                                        /* calcul de 'point_manoeuvre' via 'HHCpuissance(...)'.                                      */
                                        /*                                                                                           */
                                        /* Le 20111130125631, 'DEUX' fut d'ailleurs remplace par 'EXPOSANT_INUTILE'...               */
                              ,BLOC(VIDE;
                                    )
                                        /* Introduit le 20150225152454...                                                            */
                               );
          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E S   R A C I N E S   N - I E M E S   D E   L ' U N I T E                                                  */
/*        D A N S   L ' E S P A C E   H Y P E R - H Y P E R - C O M P L E X E  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iracines_n_iemes_de_l_unite_dans_HHC_____seuil_du_carre_du_module,F_INFINI)));
                                        /* Seuil de divergence du carre du module d'un nombre hyper-hyper-complexe de la suite       */
                                        /* dans le cas particulier de la recherche des racines n_iemes de l'unite...                 */

DEFV(Common,DEFV(FonctionP,POINTERp(Iracines_n_iemes_de_l_unite_dans_HHC(imageR
                                                                        ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                                        ,ARGUMENT_POINTERs(coin_haut_droite)
                                                                        ,composante_J
                                                                        ,composante_K
                                                                        ,composante_S
                                                                        ,composante_T
                                                                        ,composante_U
                                                                        ,composante_V
                                                                        ,exposant
                                                                        ,nombre_maximal_d_iterations
                                                                        ,visualisation_arguments_de_sortie
                                                                        ,ponderation_argumentA1
                                                                        ,ponderation_argumentA2
                                                                        ,ponderation_argumentA3
                                                                        ,ponderation_argumentA4
                                                                        ,ponderation_argumentA5
                                                                        ,ponderation_argumentA6
                                                                        ,ponderation_argumentA7
                                                                         )
                                    )
                 )
     )
                                        /* Fonction introduite le 20111129105411...                                                  */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat a generer.                                                                 */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
DEFV(Argument,DEFV(Float,composante_S));
DEFV(Argument,DEFV(Float,composante_T));
DEFV(Argument,DEFV(Float,composante_U));
DEFV(Argument,DEFV(Float,composante_V));
                                        /* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace          */
                                        /* bidimensionnel de l'espace hyper-hyper-complexe'.                                         */
DEFV(Argument,DEFV(Positive,exposant));
                                        /* Exposant 'N'.                                                                             */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentA1));
DEFV(Argument,DEFV(Float,ponderation_argumentA2));
DEFV(Argument,DEFV(Float,ponderation_argumentA3));
DEFV(Argument,DEFV(Float,ponderation_argumentA4));
DEFV(Argument,DEFV(Float,ponderation_argumentA5));
DEFV(Argument,DEFV(Float,ponderation_argumentA6));
DEFV(Argument,DEFV(Float,ponderation_argumentA7));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : une combinaison lineaire des arguments {A1,A2,A3,A4,A5,A6,A7}        */
                                        /* de O  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'),  */
                                        /*     n                                                                                     */
                                        /* les sept valeurs flottantes etant les ponderations des arguments {A1,A2,A3,A4,A5,A6,A7}.  */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_HHC
     DEFV(hyper_hyper_complexe,exposant_octonionique_moins_1);
                                        /* Exposant complexe moins 1.                                                                */
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision.                       */

     begin_image
          Bblock
          F_ITERATION_DANS_HHC(TEST_DU_CARRE_DU_MODULE_DANS_HHC(Iracines_n_iemes_de_l_unite_dans_HHC_____seuil_du_carre_du_module)
                              ,BLOC(Bblock
                                    HHCinitialisation(exposant_octonionique_moins_1
                                                     ,FLOT(PRED(exposant)),I0_Octonion,J0_Octonion,K0_Octonion
                                                     ,S0_Octonion,T0_Octonion,U0_Octonion,V0_Octonion
                                                      );
                                        /* Conversion complexe de l'exposant moins 1.                                                */
                                    HHCegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres complexes sur le "point Courant" 'C',              */
                                        /* soit :                                                                                    */
                                        /*                                                                                           */
                                        /*                  O  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                    EGAL(nombre_courant_d_iterations,UN);
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */
                                        /* valeur non nulle soit rangee...                                                           */
                                    Eblock
                                    )
                              ,BLOC(Bblock
                                    Test(IZNE(HHCmodule2(suite_point)))
                                         Bblock
                                         DEFV(hyper_hyper_complexe,point_manoeuvre_1);
                                         DEFV(hyper_hyper_complexe,point_manoeuvre_3);
                                         DEFV(hyper_hyper_complexe,point_manoeuvre_4);
                                         DEFV(hyper_hyper_complexe,point_manoeuvre_5);
                                         DEFV(hyper_hyper_complexe,point_manoeuvre_6);
                                         DEFV(hyper_hyper_complexe,point_manoeuvre_7);
                                        /* Points complexes de maneuvre lors de l'iteration.                                         */

                                         aHHCexponentielle_octonionique(point_manoeuvre_6,suite_point,exposant_octonionique_moins_1);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                 N-1                                                                       */
                                        /*                O                                                                          */
                                        /*                 n                                                                         */
                                        /*                                                                                           */
                                         aHHCproduit(point_manoeuvre_7,suite_point,point_manoeuvre_6);
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                 N                                                                         */
                                        /*                O                                                                          */
                                        /*                 n                                                                         */
                                        /*                                                                                           */
                                         aHHCforme_lineaire(point_manoeuvre_1,FLOT(exposant),point_manoeuvre_6,FZERO)
                                        /* Calcul de :                                                                               */
                                        /*                                                                                           */
                                        /*                     N-1                                                                   */
                                        /*                  N.O                                                                      */
                                        /*                     n                                                                     */
                                        /*                                                                                           */

                                         aHHCdifference(point_manoeuvre_3,point_manoeuvre_7,HHC_____octonion_p1__0__0__0__0__0__0__0);
                                        /* Puis de :                                                                                 */
                                        /*                                                                                           */
                                        /*                   N                                                                       */
                                        /*                  O  - 1                                                                   */
                                        /*                   n                                                                       */
                                        /*                                                                                           */

                                         aHHCquotient(point_manoeuvre_4,point_manoeuvre_3,point_manoeuvre_1);
                                        /* Puis de :                                                                                 */
                                        /*                                                                                           */
                                        /*                    N                                                                      */
                                        /*                   O  - 1                                                                  */
                                        /*                    n                                                                      */
                                        /*                  ---------                                                                */
                                        /*                       N-1                                                                 */
                                        /*                   N.O                                                                     */
                                        /*                      n                                                                    */
                                        /*                                                                                           */

                                         aHHCdifference(point_manoeuvre_5,suite_point,point_manoeuvre_4);
                                         HHCegal(suite_point,point_manoeuvre_5);
                                        /* Puis de :                                                                                 */
                                        /*                                                                                           */
                                        /*                                N                                                          */
                                        /*                               O  - 1                                                      */
                                        /*                                n                                                          */
                                        /*                  O    = O  - --------                                                     */
                                        /*                   n+1    n       N-1                                                      */
                                        /*                               N.O                                                         */
                                        /*                                  n                                                        */
                                        /*                                                                                           */
                                         Eblock
                                    ATes
                                         Bblock
                                        /* L'origine (0,0) est un point particulier...                                               */
                                         Eblock
                                    ETes
                                    Eblock
                                    )
                              ,EXPOSANT_INUTILE
                                        /* Le 20111130114853, je note que cet argument ('DEUX') est inutile ici, de meme que         */
                                        /* calcul de 'point_manoeuvre' via 'HHCpuissance(...)'.                                      */
                                        /*                                                                                           */
                                        /* Le 20111130125631, 'DEUX' fut d'ailleurs remplace par 'EXPOSANT_INUTILE'...               */
                              ,BLOC(VIDE;
                                    )
                                        /* Introduit le 20150225152454...                                                            */
                               );
          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D ' U N   P O L Y N O M E   V A R I A B L E   Q U E L C O N Q U E                                      */
/*        D A N S   L ' E S P A C E   H Y P E R - H Y P E R - C O M P L E X E  :                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Soit la suite :                                                                                                */
/*                                                                                                                                   */
/*                                      O    = C                                                                                     */
/*                                       0                                                                                           */
/*                                                                                                                                   */
/*                                      O    = polynome(O )                                                                          */
/*                                       n+1             n                                                                           */
/*                                                                                                                                   */
/*                  (ou 'C' designe le point Courant).                                                                               */
/*                                                                                                                                   */
/*                    La fonction 'polynome(...)' est definie                                                                        */
/*                  par (la translation 't' de l'exposant pouvant                                                                    */
/*                  etre negative a compter du 20100316172716) :                                                                     */
/*                                                                                                                                   */
/*                                                        0+t       1+t             p+t                                              */
/*                                      polynome(O) = A .O    + A .O    + ... + A .O    + alpha.A + beta.C                           */
/*                                                     0         1               p                                                   */
/*                                                                                                                                   */
/*                  (ou 'A' et 'C' designent respectivement un                                                                       */
/*                  nombre complexe arbitraire Argument et le                                                                        */
/*                  point Courant). Quant a la suite de coefficients                                                                 */
/*                  {A0,A1,...,Ap} elle est definie a partir d'un album                                                              */
/*                  d'images (indexe par 'Z' -majuscule-).                                                                           */
/*                                                                                                                                   */
/*                    Mais ATTENTION, si cela permet de faire varier                                                                 */
/*                  localement le polynome au point {X,Y} on notera                                                                  */
/*                  bien que :                                                                                                       */
/*                                                                                                                                   */
/*                                      C # X + i.Y + ...                                                                            */
/*                                                                                                                                   */
/*                  a priori (les coordonnees {X,Y} sont relatives                                                                   */
/*                  a une image, alors que 'C' est dans l'espace                                                                     */
/*                  hyper-complexe. Cela signifie que lors d'un changement                                                           */
/*                  de la fenetre de calcul {coin_bas_gauche,coin_haut_droite}                                                       */
/*                  (par zoom et/ou translation), les coefficients {A0,A1,...,Ap}                                                    */
/*                  du polynome, eux, resteront les memes...                                                                         */
/*                                                                                                                                   */
/*                    Enfin, on notera deux choix importants possibles :                                                             */
/*                                                                                                                                   */
/*                                      {alpha=1,beta=0}  : ensemble de type "Julia",                                                */
/*                                      {alpha=0,beta=1}  : ensemble de type "Mandelbrot",                                           */
/*                                                                                                                                   */
/*                  toutes les autres combinaisons etant evidemment                                                                  */
/*                  possibles...                                                                                                     */
/*                                                                                                                                   */
/*                    Le 20100210133645 a ete introduite la possibilite de                                                           */
/*                  parametrer localement en {X,Y} et partiellement le produit                                                       */
/*                  non theorique (s'il est active) par {exposa1_Rho,ponder1_A1_,ponder1_A2_,...,ponder1_A7_}.                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota important :                                                                                                           */
/*                                                                                                                                   */
/*                    La definition du polynome, comme la definition                                                                 */
/*                  du parametrage du produit non theorique, n'ont                                                                   */
/*                  reellement de sens que lorsqu'un seule 'imageR'                                                                  */
/*                  est calculee puisque dans le cas contraire, ce                                                                   */
/*                  sont les memes definitions qui seront utilisees                                                                  */
/*                  pour d'autres images. Pour bien faire, il conviendrait                                                           */
/*                  de les rendre "multidimensionnelles"...                                                                          */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____faire_la_rotation_de__nombre_argument_A,VRAI)));
                                        /* Introduit le 20100303081954 car, en effet a cette date je me demande si cette rotation    */
                                        /* est justifiee, meme si c'est avec elle que les resultats sont les plus spectaculaires...  */
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A1_,VRAI)));
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A2_,VRAI)));
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A3_,VRAI)));
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A4_,VRAI)));
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A5_,VRAI)));
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A6_,VRAI)));
DEFV(Common,DEFV(Logical,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A7_,VRAI)));
                                        /* Introduit le 20100221090225 a cause de 'v $ximcd/operator$FON 20100210182653'...          */
DEFV(Common,DEFV(Int,SINT(Iiteration_polynome_variable_quelconque_dans_HHC_____premier_exposant_du_polynome,ZERO)));
                                        /* Introduit le 20100316172716 afin de pouvoir des polynomes contenant des puissances        */
                                        /* negatives de 'Z'...                                                                       */

DEFV(Common,DEFV(FonctionP,POINTERp(Iiteration_polynome_variable_quelconque_dans_HHC(imageR
                                                                                    ,definition_du_polynome
                                                                                    ,definition_de_exposa1_Rho
                                                                                    ,definition_de_ponder1_A1_
                                                                                    ,definition_de_ponder1_A2_
                                                                                    ,definition_de_ponder1_A3_
                                                                                    ,definition_de_ponder1_A4_
                                                                                    ,definition_de_ponder1_A5_
                                                                                    ,definition_de_ponder1_A6_
                                                                                    ,definition_de_ponder1_A7_
                                                                                    ,ponderation_du_nombre_argument_A
                                                                                    ,ARGUMENT_POINTERs(nombre_argument_A)
                                                                                    ,ponderation_du_nombre_courant_C
                                                                                    ,ARGUMENT_POINTERs(coin_bas_gauche)
                                                                                    ,ARGUMENT_POINTERs(coin_haut_droite)
                                                                                    ,composante_J
                                                                                    ,composante_K
                                                                                    ,composante_S
                                                                                    ,composante_T
                                                                                    ,composante_U
                                                                                    ,composante_V
                                                                                    ,nombre_maximal_d_iterations
                                                                                    ,seuil_du_carre_du_module
                                                                                    ,visualisation_arguments_de_sortie
                                                                                    ,ponderation_argumentA1
                                                                                    ,ponderation_argumentA2
                                                                                    ,ponderation_argumentA3
                                                                                    ,ponderation_argumentA4
                                                                                    ,ponderation_argumentA5
                                                                                    ,ponderation_argumentA6
                                                                                    ,ponderation_argumentA7
                                                                                     )
                                    )
                 )
     )
                                        /* Fonction introduite le 20111118211805...                                                  */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat a generer.                                                                 */
DEFV(Argument,DEFV(albumF,definition_du_polynome));
                                        /* Definition du polynome variable (en {X,Y}) a l'aide d'un album.                           */
DEFV(Argument,DEFV(imageF,definition_de_exposa1_Rho));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_A1_));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_A2_));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_A3_));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_A4_));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_A5_));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_A6_));
DEFV(Argument,DEFV(imageF,definition_de_ponder1_A7_));
                                        /* Definition du parametrage partiel eventuel du "faux" produit.                             */
DEFV(Argument,DEFV(Float,ponderation_du_nombre_argument_A));
                                        /* Ponderation du nombre complexe argument 'A'.                                              */
DEFV(Argument,DEFV(hyper_hyper_complexe,POINTERs(nombre_argument_A)));
                                        /* Nombre hyper-complexe argument 'A'.                                                       */
DEFV(Argument,DEFV(Float,ponderation_du_nombre_courant_C));
                                        /* Ponderation du nombre hyper-complexe courant 'C'.                                         */
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */
DEFV(Argument,DEFV(Float,composante_J));
DEFV(Argument,DEFV(Float,composante_K));
DEFV(Argument,DEFV(Float,composante_S));
DEFV(Argument,DEFV(Float,composante_T));
DEFV(Argument,DEFV(Float,composante_U));
DEFV(Argument,DEFV(Float,composante_V));
                                        /* Les arguments 'coin_bas_gauche' et 'coin_haut_droite' definissent un sous-espace          */
                                        /* bidimensionnel de l'espace hyper-hyper-complexe'.                                         */
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));
                                        /* Nombre maximal d'iterations demande.                                                      */
DEFV(Argument,DEFV(Float,seuil_du_carre_du_module));
                                        /* Seuil du carre du module definissant l'arret des iterations.                              */
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));
DEFV(Argument,DEFV(Float,ponderation_argumentA1));
DEFV(Argument,DEFV(Float,ponderation_argumentA2));
DEFV(Argument,DEFV(Float,ponderation_argumentA3));
DEFV(Argument,DEFV(Float,ponderation_argumentA4));
DEFV(Argument,DEFV(Float,ponderation_argumentA5));
DEFV(Argument,DEFV(Float,ponderation_argumentA6));
DEFV(Argument,DEFV(Float,ponderation_argumentA7));
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */
                                        /* l'on va visualiser : une combinaison lineaire des arguments {A1,A2,A3,A4,A5,A6,A7}        */
                                        /* de O  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX'),  */
                                        /*     n                                                                                     */
                                        /* les sept valeurs flottantes etant les ponderations des arguments {A1,A2,A3,A4,A5,A6,A7}.  */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     BVARIABLES_F_ITERATION_DANS_HHC

     DEFV(hyper_hyper_complexe,nombre_argument_A_apres_transformation_eventuelle);
                                        /* Point hyper-complexe argument apres transformation eventuelle...                          */
     /*..............................................................................................................................*/
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;

     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;
                                        /* Initialisation eventuelle du processus d'extension de la precision.                       */

     Test(IL_FAUT(Iiteration_polynome_variable_quelconque_dans_HHC_____faire_la_rotation_de__nombre_argument_A))
          Bblock
          ROTATION_TRIDIMENSIONNELLE_DANS_HHC(nombre_argument_A_apres_transformation_eventuelle,INDIRECT(nombre_argument_A));
                                        /* Recuperation du nombre hyper-complexe "generateur", avec rotation eventuelle.             */
          Eblock
     ATes
          Bblock
          HHCegal(nombre_argument_A_apres_transformation_eventuelle,INDIRECT(nombre_argument_A));
                                        /* Cas ou la rotation de 'nombre_argument' est inhibee...                                    */
          Eblock
     ETes

     begin_image
          Bblock

#define   prendre_la_partie_entiere_de_ponder1_A1_                                                                                      \
                    Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A1_
#define   prendre_la_partie_entiere_de_ponder1_A2_                                                                                      \
                    Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A2_
#define   prendre_la_partie_entiere_de_ponder1_A3_                                                                                      \
                    Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A3_
#define   prendre_la_partie_entiere_de_ponder1_A4_                                                                                      \
                    Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A4_
#define   prendre_la_partie_entiere_de_ponder1_A5_                                                                                      \
                    Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A5_
#define   prendre_la_partie_entiere_de_ponder1_A6_                                                                                      \
                    Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A6_
#define   prendre_la_partie_entiere_de_ponder1_A7_                                                                                      \
                    Iiteration_polynome_variable_quelconque_dans_HHC_____prendre_la_partie_entiere_de_ponder1_A7_
                                        /* Afin de raccourcir des lignes qui suivent...                                              */

          gF_ITERATION_DANS_HHC(TEST_DU_CARRE_DU_MODULE_DANS_HHC(seuil_du_carre_du_module)
                               ,BLOC(Bblock
                                     INITIALISATION_DU_POINT_COURANT_DANS_HHC;
                                     Eblock
                                     )
                                        /* Introduit le 20091012111043...                                                            */
                               ,BLOC(Bblock
                                     HHCegal(suite_point,point_courant);
                                        /* Initialisation de la suite des nombres hyper-complexes avec :                             */
                                        /*                                                                                           */
                                        /*                  O  = C                                                                   */
                                        /*                   0                                                                       */
                                        /*                                                                                           */
                                     EGAL(nombre_courant_d_iterations,UN);
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */
                                        /* valeur non nulle soit rangee...                                                           */
                                     Eblock
                                     )
                               ,BLOC(VIDE;
                                     )
                               ,BLOC(Bblock
                                     DEFV(hyper_hyper_complexe,puissance_courante);
                                     DEFV(hyper_hyper_complexe,polynome_courant);

                                     BSaveModifyVariable(Float
                                                        ,FHHCproduit_____avec_le_produit_non_theorique__exposa1_Rho
                                                        ,loadF_point(definition_de_exposa1_Rho,X,Y)
                                                         );
                                     BSaveModifyVariable(Float
                                                        ,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle1
                                                        ,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_A1_)
                                                             ,AINT
                                                             ,NEUT
                                                             ,loadF_point(definition_de_ponder1_A1_,X,Y)
                                                              )
                                                         );
                                     BSaveModifyVariable(Float
                                                        ,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle2
                                                        ,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_A2_)
                                                             ,AINT
                                                             ,NEUT
                                                             ,loadF_point(definition_de_ponder1_A2_,X,Y)
                                                              )
                                                         );
                                     BSaveModifyVariable(Float
                                                        ,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle3
                                                        ,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_A3_)
                                                             ,AINT
                                                             ,NEUT
                                                             ,loadF_point(definition_de_ponder1_A3_,X,Y)
                                                              )
                                                         );
                                     BSaveModifyVariable(Float
                                                        ,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle4
                                                        ,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_A4_)
                                                             ,AINT
                                                             ,NEUT
                                                             ,loadF_point(definition_de_ponder1_A4_,X,Y)
                                                              )
                                                         );
                                     BSaveModifyVariable(Float
                                                        ,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle5
                                                        ,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_A5_)
                                                             ,AINT
                                                             ,NEUT
                                                             ,loadF_point(definition_de_ponder1_A5_,X,Y)
                                                              )
                                                         );
                                     BSaveModifyVariable(Float
                                                        ,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle6
                                                        ,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_A6_)
                                                             ,AINT
                                                             ,NEUT
                                                             ,loadF_point(definition_de_ponder1_A6_,X,Y)
                                                              )
                                                         );
                                     BSaveModifyVariable(Float
                                                        ,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle7
                                                        ,OPC1(IL_FAUT(prendre_la_partie_entiere_de_ponder1_A7_)
                                                             ,AINT
                                                             ,NEUT
                                                             ,loadF_point(definition_de_ponder1_A7_,X,Y)
                                                              )
                                                         );
                                        /* Parametrage partiel eventuel du "faux" produit. On notera que cela n'a d'utilite que      */
                                        /* si le produit non theorique est active et alors il n'est utilise que pour l'unique        */
                                        /* 'HHCproduit(...)' qui suit...                                                             */

                                     aHHCpuissance(puissance_courante
                                                  ,point_courant
                                                  ,Iiteration_polynome_variable_quelconque_dans_HHC_____premier_exposant_du_polynome
                                                   );

                                     aHHCcombinaison_lineaire_2(polynome_courant
                                                               ,ponderation_du_nombre_argument_A
                                                               ,nombre_argument_A_apres_transformation_eventuelle
                                                               ,ponderation_du_nombre_courant_C
                                                               ,point_courant
                                                                );
                                        /* Definition du polynome et initialisation avec :                                           */
                                        /*                                                                                           */
                                        /*                  polynome(O) = alpha.A + beta.C                                           */
                                        /*                                                                                           */
                                        /*                                                                                           */

                                     begin_fuite
                                          Bblock
                                          DEFV(Float,INIT(coefficient_polynomial,AloadF_point(definition_du_polynome,X,Y,Z)));
                                          DEFV(hyper_hyper_complexe,monome_courant);

                                          aHHCforme_lineaire(monome_courant,coefficient_polynomial,puissance_courante,FZERO);
                                          aHHCsomme(polynome_courant,polynome_courant,monome_courant);
                                        /* Calcul iteratif du polynome courant :                                                     */
                                        /*                                                                                           */
                                        /*                                    0       1             p                                */
                                        /*                  polynome(O) = A .O  + A .O  + ... + A .O  + alpha.A + beta.C             */
                                        /*                                 0       1             p                                   */
                                        /*                                                                                           */
                                        /* ou 'A(i)' designe la i-ieme page de l'album 'definition_du_polynome'...                   */

                                          aHHCproduit(puissance_courante,puissance_courante,suite_point);
                                        /* Calcul de la puissance courante suivante (Z+1) :                                          */
                                        /*                                                                                           */
                                        /*                                  Z+1                                                      */
                                        /*                  puissance(O) = O                                                         */
                                        /*                                                                                           */
                                          Eblock
                                     end_fuite

                                     HHCegal(suite_point,polynome_courant);
                                        /* Et iteration de la fonction :                                                             */
                                        /*                                                                                           */
                                        /*                  O    = polynome(O )                                                      */
                                        /*                   n+1             n                                                       */
                                        /*                                                                                           */

                                     ESaveModifyVariable(Float
                                                        ,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle7
                                                         );
                                     ESaveModifyVariable(Float
                                                        ,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle6
                                                         );
                                     ESaveModifyVariable(Float
                                                        ,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle5
                                                         );
                                     ESaveModifyVariable(Float
                                                        ,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle4
                                                         );
                                     ESaveModifyVariable(Float
                                                        ,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle3
                                                         );
                                     ESaveModifyVariable(Float
                                                        ,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle2
                                                         );
                                     ESaveModifyVariable(Float
                                                        ,FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle1
                                                         );
                                     ESaveModifyVariable(Float
                                                        ,FHHCproduit_____avec_le_produit_non_theorique__exposa1_Rho
                                                         );
                                        /* Parametrage partiel eventuel du "faux" produit.                                           */
                                     Eblock
                                     )
                               ,BLOC(VIDE;
                                     )
                                        /* Introduit le 20150225152454...                                                            */
                                );

#undef    prendre_la_partie_entiere_de_ponder1_A7_
#undef    prendre_la_partie_entiere_de_ponder1_A6_
#undef    prendre_la_partie_entiere_de_ponder1_A5_
#undef    prendre_la_partie_entiere_de_ponder1_A4_
#undef    prendre_la_partie_entiere_de_ponder1_A3_
#undef    prendre_la_partie_entiere_de_ponder1_A2_
#undef    prendre_la_partie_entiere_de_ponder1_A1_

          Eblock
     end_image

     RETI(imageR);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T E U R   D E   F O N C T I O N S   C A L C U L A N T                                                          */
/*        U N E   F O N C T I O N   H Y P E R - H Y P E R - C O M P L E X E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#pragma   xcg__gen_ext_Z__gen_Fonction_SE__GENERE__Fonction                     GENERE__FonctionHHJ_I_FONCTION_HHC      POINTERHHJ
#define   GENERE__FonctionHHJ_I_FONCTION_HHC(nom_et_arguments_de_la_fonction,Nfonction,Vfonction,alpha,beta_,gamma,delta,nom)           \
DEFV(FonctionHHJ,POINTERHHJ(nom_et_arguments_de_la_fonction))                                                                           \
                                        /* ATTENTION, il ne faut pas ecrire :                                                        */ \
                                        /*                                                                                           */ \
                                        /*        DEFV(Common,DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction)))             */ \
                                        /*                                                                                           */ \
                                        /* puisqu'en effet la directive 'Common' est utilisee lors de l'appel par :                  */ \
                                        /*                                                                                           */ \
                                        /*        DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(...))                               */ \
                                        /*                                                                                           */ \
                                        /* Actuellement cette redondance ne serait pas genante, mais plus tard...                    */ \
DEFV(Argument,DEFV(imageHHJ,imageR));                                                                                                   \
                                        /* Image Resultat a generer.                                                                 */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));                                                                                \
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));                                                                               \
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */ \
DEFV(Argument,DEFV(Float,composante_J));                                                                                                \
DEFV(Argument,DEFV(Float,composante_K));                                                                                                \
DEFV(Argument,DEFV(Float,composante_S));                                                                                                \
DEFV(Argument,DEFV(Float,composante_T));                                                                                                \
DEFV(Argument,DEFV(Float,composante_U));                                                                                                \
DEFV(Argument,DEFV(Float,composante_V));                                                                                                \
                                        /* Composantes complementaires definissant l'espace hyper-hyper-complexe...                  */ \
/*-----------------------------------------------------------------------------------------------------------------------------------*/ \
     Bblock                                                                                                                             \
     BVARIABLES_F_ITERATION_QUELCONQUE_DANS_HHC                                                                                         \
     /*..............................................................................................................................*/ \
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;                                                         \
                                                                                                                                        \
     begin_image                                                                                                                        \
          Bblock                                                                                                                        \
          DEFV(hyper_hyper_complexe,point_courant_transforme);                                                                          \
                                                                                                                                        \
          INITIALISATION_DU_POINT_COURANT_DANS_HHC;                                                                                     \
                                        /* Initialisation du "point Courant" 'C'.                                                    */ \
                                                                                                                                        \
          HHCforme_homographique(point_courant_transforme,alpha,point_courant,beta_,gamma,point_courant,delta);                         \
                                        /* Transformation homographique du "point Courant" 'C'.                                      */ \
                                                                                                                                        \
          CALS(Nfonction(point_courant_transforme));                                                                                    \
                                        /* Application de la transformation...                                                       */ \
                                                                                                                                        \
          storeHHJ_point(Vfonction                                                                                                      \
                        ,imageR                                                                                                         \
                        ,X,Y                                                                                                            \
                         );                                                                                                             \
                                        /* Generation de l'image "hyper_hyper_complexe"...                                           */ \
          Eblock                                                                                                                        \
     end_image                                                                                                                          \
                                                                                                                                        \
     RETIHHJ(imageR);                                                                                                                   \
     Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' cos '   H Y P E R - H Y P E R - C O M P L E X E  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionHHJ

DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(IHHJfonction_cosinus_circulaire_dans_HHC(            /* Common,DEFV(Fonction,) :   \  */
                                                            imageR                                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_S                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_T                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_U                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_V                            /* Common,DEFV(Fonction,) :   \  */
                                                                                        )           /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCcosinus_circulaire                              /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCcosinus_circulaire_____valeur                   /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCcosinus_circulaire_____Halpha                   /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCcosinus_circulaire_____Hbeta_                   /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCcosinus_circulaire_____Hgamma                   /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCcosinus_circulaire_____Hdelta                   /* Common,DEFV(Fonction,) :   \  */
                                              ,"cos"                                                /* Common,DEFV(Fonction,) :   \  */
                                               )                                                    /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionHHJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' sin '   H Y P E R - H Y P E R - C O M P L E X E  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionHHJ

DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(IHHJfonction_sinus_circulaire_dans_HHC(              /* Common,DEFV(Fonction,) :   \  */
                                                            imageR                                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_S                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_T                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_U                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_V                            /* Common,DEFV(Fonction,) :   \  */
                                                                                      )             /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCsinus_circulaire                                /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCsinus_circulaire_____valeur                     /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCsinus_circulaire_____Halpha                     /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCsinus_circulaire_____Hbeta_                     /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCsinus_circulaire_____Hgamma                     /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCsinus_circulaire_____Hdelta                     /* Common,DEFV(Fonction,) :   \  */
                                              ,"sin"                                                /* Common,DEFV(Fonction,) :   \  */
                                               )                                                    /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionHHJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' tg '   H Y P E R - H Y P E R - C O M P L E X E  :                            */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionHHJ

DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(IHHJfonction_tangente_circulaire_dans_HHC(           /* Common,DEFV(Fonction,) :   \  */
                                                            imageR                                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_S                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_T                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_U                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_V                            /* Common,DEFV(Fonction,) :   \  */
                                                                                         )          /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCtangente_circulaire                             /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCtangente_circulaire_____valeur                  /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCtangente_circulaire_____Halpha                  /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCtangente_circulaire_____Hbeta_                  /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCtangente_circulaire_____Hgamma                  /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCtangente_circulaire_____Hdelta                  /* Common,DEFV(Fonction,) :   \  */
                                              ,"tg"                                                 /* Common,DEFV(Fonction,) :   \  */
                                               )                                                    /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionHHJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' ch '   H Y P E R - H Y P E R - C O M P L E X E  :                            */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionHHJ

DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(IHHJfonction_cosinus_hyperbolique_dans_HHC(          /* Common,DEFV(Fonction,) :   \  */
                                                            imageR                                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_S                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_T                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_U                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_V                            /* Common,DEFV(Fonction,) :   \  */
                                                                                          )         /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCcosinus_hyperbolique                            /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCcosinus_hyperbolique_____valeur                 /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCcosinus_hyperbolique_____Halpha                 /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCcosinus_hyperbolique_____Hbeta_                 /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCcosinus_hyperbolique_____Hgamma                 /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCcosinus_hyperbolique_____Hdelta                 /* Common,DEFV(Fonction,) :   \  */
                                              ,"ch"                                                 /* Common,DEFV(Fonction,) :   \  */
                                               )                                                    /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionHHJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' sh '   H Y P E R - H Y P E R - C O M P L E X E  :                            */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionHHJ

DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(IHHJfonction_sinus_hyperbolique_dans_HHC(            /* Common,DEFV(Fonction,) :   \  */
                                                            imageR                                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_S                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_T                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_U                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_V                            /* Common,DEFV(Fonction,) :   \  */
                                                                                        )           /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCsinus_hyperbolique                              /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCsinus_hyperbolique_____valeur                   /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCsinus_hyperbolique_____Halpha                   /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCsinus_hyperbolique_____Hbeta_                   /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCsinus_hyperbolique_____Hgamma                   /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCsinus_hyperbolique_____Hdelta                   /* Common,DEFV(Fonction,) :   \  */
                                              ,"sh"                                                 /* Common,DEFV(Fonction,) :   \  */
                                               )                                                    /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionHHJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' th '   H Y P E R - H Y P E R - C O M P L E X E  :                            */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionHHJ

DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(IHHJfonction_tangente_hyperbolique_dans_HHC(         /* Common,DEFV(Fonction,) :   \  */
                                                            imageR                                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_S                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_T                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_U                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_V                            /* Common,DEFV(Fonction,) :   \  */
                                                                                           )        /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCtangente_hyperbolique                           /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCtangente_hyperbolique_____valeur                /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCtangente_hyperbolique_____Halpha                /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCtangente_hyperbolique_____Hbeta_                /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCtangente_hyperbolique_____Hgamma                /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCtangente_hyperbolique_____Hdelta                /* Common,DEFV(Fonction,) :   \  */
                                              ,"th"                                                 /* Common,DEFV(Fonction,) :   \  */
                                               )                                                    /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionHHJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' exp '   H Y P E R - H Y P E R - C O M P L E X E  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionHHJ

DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(IHHJfonction_exponentielle_neperienne_dans_HHC(      /* Common,DEFV(Fonction,) :   \  */
                                                            imageR                                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_S                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_T                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_U                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_V                            /* Common,DEFV(Fonction,) :   \  */
                                                                                              )     /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCexponentielle_neperienne                        /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCexponentielle_neperienne_____valeur             /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCexponentielle_neperienne_____Halpha             /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCexponentielle_neperienne_____Hbeta_             /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCexponentielle_neperienne_____Hgamma             /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHCexponentielle_neperienne_____Hdelta             /* Common,DEFV(Fonction,) :   \  */
                                              ,"exp"                                                /* Common,DEFV(Fonction,) :   \  */
                                               )                                                    /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionHHJ

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   F O N C T I O N   ' log '   H Y P E R - H Y P E R - C O M P L E X E  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionHHJ

DEFV(Common,GENERE__FonctionHHJ_I_FONCTION_HHC(IHHJfonction_logarithme_dans_HHC(                    /* Common,DEFV(Fonction,) :   \  */
                                                            imageR                                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_S                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_T                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_U                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_V                            /* Common,DEFV(Fonction,) :   \  */
                                                                                )                   /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHClogarithme                                      /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHClogarithme_____valeur                           /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHClogarithme_____Halpha                           /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHClogarithme_____Hbeta_                           /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHClogarithme_____Hgamma                           /* Common,DEFV(Fonction,) :   \  */
                                              ,fFHHClogarithme_____Hdelta                           /* Common,DEFV(Fonction,) :   \  */
                                              ,"log"                                                /* Common,DEFV(Fonction,) :   \  */
                                               )                                                    /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionHHJ

#undef    GENERE__FonctionHHJ_I_FONCTION_HHC

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T E U R   D E   F O N C T I O N S   I T E R A N T                                                              */
/*        U N E   F O N C T I O N   H Y P E R - H Y P E R - C O M P L E X E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#pragma   xcg__gen_ext_Z__gen_Fonction_SE__GENERE__Fonction                     GENERE__FonctionP_I_ITERAT_F_HHC        POINTERp
#define   GENERE__FonctionP_I_ITERAT_F_HHC(nom_et_arguments_de_la_fonction,Nfonction,Vfonction,seuil_du_carre_du_module,czero,vz,fz)    \
                                        /* ATTENTION : le nom de la fonction est suivi de ses arguments pour des raisons liees       */ \
                                        /* a la recuperation automatique des fichiers d'arguments ; on trouvera donc :               */ \
                                        /*                                                                                           */ \
                                        /*        GENERE__FonctionP_FONCTION_C(nom_et_arguments_de_la_fonction,Nfonction,Vfonction)  */ \
                                        /*                                                                                           */ \
                                        /* D'autre part, la fonction 'Nfonction' devra etre de nom '__...' afin que son nombre       */ \
                                        /* d'arguments ne soit pas verifie ('v $xcg/gen.arg$D/debut$I __f').                         */ \
                                        /*                                                                                           */ \
                                        /* Le 20210212153501, l'argument 'czero' qui permet de changer le zero, puis le              */ \
                                        /* 20210213103027 ce fut le cas de 'vz' et 'fz' qui definissent respectivement le "Vrai"     */ \
                                        /* zero (celui qui correpond au type 'hyper_hyper_complexe' et qui n'est pas modifiable)     */ \
                                        /* et le "Faux" zero (celui qui peut etre modifier pour, par exemple, faire "du Mandelbrot"  */ \
                                        /* -ou presque- ci-apres...).                                                                */ \
DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction))                                                                               \
                                        /* ATTENTION, il ne faut pas ecrire :                                                        */ \
                                        /*                                                                                           */ \
                                        /*        DEFV(Common,DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction)))             */ \
                                        /*                                                                                           */ \
                                        /* mais :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*        DEFV(FonctionP,POINTERp(nom_et_arguments_de_la_fonction))                          */ \
                                        /*                                                                                           */ \
                                        /* puisqu'en effet la directive 'Common' est utilisee lors de l'appel par :                  */ \
                                        /*                                                                                           */ \
                                        /*        DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(...))                                 */ \
                                        /*                                                                                           */ \
                                        /* Actuellement cette redondance ne serait pas genante, mais plus tard...                    */ \
DEFV(Argument,DEFV(image,imageR));                                                                                                      \
                                        /* Image Resultat a generer.                                                                 */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_bas_gauche)));                                                                                \
                                        /* Definition du point situe en bas et a gauche de la fenetre,                               */ \
DEFV(Argument,DEFV(complexe,POINTERs(coin_haut_droite)));                                                                               \
                                        /* Definition du point situe en haut et a droite de la fenetre.                              */ \
DEFV(Argument,DEFV(Float,composante_J));                                                                                                \
DEFV(Argument,DEFV(Float,composante_K));                                                                                                \
DEFV(Argument,DEFV(Float,composante_S));                                                                                                \
DEFV(Argument,DEFV(Float,composante_T));                                                                                                \
DEFV(Argument,DEFV(Float,composante_U));                                                                                                \
DEFV(Argument,DEFV(Float,composante_V));                                                                                                \
                                        /* Composantes complementaires definissant l'espace hyper-hyper-complexe...                  */ \
DEFV(Argument,DEFV(Positive,nombre_maximal_d_iterations));                                                                              \
                                        /* Nombre maximal d'iterations demande.                                                      */ \
DEFV(Argument,DEFV(Logical,visualisation_arguments_de_sortie));                                                                         \
DEFV(Argument,DEFV(Float,ponderation_argumentA1));                                                                                      \
DEFV(Argument,DEFV(Float,ponderation_argumentA2));                                                                                      \
DEFV(Argument,DEFV(Float,ponderation_argumentA3));                                                                                      \
DEFV(Argument,DEFV(Float,ponderation_argumentA4));                                                                                      \
DEFV(Argument,DEFV(Float,ponderation_argumentA5));                                                                                      \
DEFV(Argument,DEFV(Float,ponderation_argumentA6));                                                                                      \
DEFV(Argument,DEFV(Float,ponderation_argumentA7));                                                                                      \
                                        /* Cet indicateur logique permet de choisir le type d'information que                        */ \
                                        /* l'on va visualiser : l'argument (c'est-a-dire ATAN(Imaginaire/Reelle))                    */ \
                                        /* de O  lors de la divergence ('VRAI') ou bien simplement le nombre d'iterations ('FAUX').  */ \
                                        /*     n                                                                                     */ \
/*-----------------------------------------------------------------------------------------------------------------------------------*/ \
     Bblock                                                                                                                             \
     BVARIABLES_F_ITERATION_DANS_HHC                                                                                                    \
     /*..............................................................................................................................*/ \
     VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE;                                                         \
                                                                                                                                        \
     INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC;                                            \
                                                                                                                                        \
     gF_ITERATION_DANS_HHC__INITIALISATIONS_DIVERSES;                                                                                   \
                                                                                                                                        \
     begin_image                                                                                                                        \
          Bblock                                                                                                                        \
          gF_ITERATION_DANS_HHC(TEST_DU_CARRE_DU_MODULE_DANS_HHC(seuil_du_carre_du_module)                                              \
                               ,BLOC(Bblock                                                                                             \
                                     INITIALISATION_DU_POINT_COURANT_DANS_HHC;                                                          \
                                     Eblock                                                                                             \
                                     )                                                                                                  \
                               ,BLOC(Bblock                                                                                             \
                                     Test(IL_FAUT(czero))                                                                               \
                                          Bblock                                                                                        \
                                          HHCegal(fz,point_courant);                                                                    \
                                          HHCegal(point_courant,vz);                                                                    \
                                        /* Introduit le 20210212153501 afin de pouvoir faire quelque chose qui ressemble au calcul   */ \
                                        /* de l'ensemble de Mandelbrot en faisant partir l'iteration du point courant au lieu de 0.  */ \
                                        /*                                                                                           */ \
                                        /* C'est avec le cosinus hyperbolique 'ch(...)' que l'on s'approche le plus de l'ensemble    */ \
                                        /* de Mandelbrot en notant qu'alors c'est la fonction :                                      */ \
                                        /*                                                                                           */ \
                                        /*                              1   2                                                        */ \
                                        /*                  f(Z) = 1 + ---.Z                                                         */ \
                                        /*                              2                                                            */ \
                                        /*                                                                                           */ \
                                        /* que l'on itere, au lieu de l'habituelle :                                                 */ \
                                        /*                                                                                           */ \
                                        /*                          2                                                                */ \
                                        /*                  f(Z) = Z                                                                 */ \
                                        /*                                                                                           */ \
                                        /* et ce en prenant 'v $ximcd/operator$FON INDICE_MAXIMAL_D_UNE_SERIE_TRIGONOMETRIQUE'       */ \
                                        /* egal a 2 evidemment...                                                                    */ \
                                          Eblock                                                                                        \
                                     ATes                                                                                               \
                                          Bblock                                                                                        \
                                          HHCegal(fz,vz);                                                                               \
                                        /* A priori, on restaure le Faux zero a partir du Vrai...                                    */ \
                                          Eblock                                                                                        \
                                     ETes                                                                                               \
                                                                                                                                        \
                                     HHCegal(suite_point,point_courant);                                                                \
                                        /* Initialisation de la suite des nombres hyper_hyper_complexes sur le "point Courant" 'C',  */ \
                                        /* soit :                                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  Z  = C                                                                   */ \
                                        /*                   0                                                                       */ \
                                        /*                                                                                           */ \
                                     EGAL(nombre_courant_d_iterations,UN);                                                              \
                                        /* Initialisation du compteur des iterations ; ce compteur est initialise                    */ \
                                        /* sur 1 et non pas sur 0, afin que meme s'il n'y a pas d'iterations, une                    */ \
                                        /* valeur non nulle soit rangee...                                                           */ \
                                     Eblock                                                                                             \
                                     )                                                                                                  \
                               ,BLOC(VIDE;                                                                                              \
                                     )                                                                                                  \
                               ,BLOC(Bblock                                                                                             \
                                     CALS(Nfonction(suite_point));                                                                      \
                                     HHCegal(suite_point,Vfonction);                                                                    \
                                        /* Et iteration de la fonction :                                                             */ \
                                        /*                                                                                           */ \
                                        /*                  Z  = Nfonction(Z )                                                       */ \
                                        /*                   n              n                                                        */ \
                                        /*                                                                                           */ \
                                        /* en notant qu'il est preferable de ne pas ecrire :                                         */ \
                                        /*                                                                                           */ \
                                        /*                  HHCegal(suite_point,Nfonction(suite_point));                             */ \
                                        /*                                                                                           */ \
                                        /* car cette derniere ecriture, de par la programmation de 'v $ximcd/operator$FON HHCegal',  */ \
                                        /* provoquerait deux fois le calcul de la fonction 'Nfonction(suite_point)'...               */ \
                                     Eblock                                                                                             \
                                     )                                                                                                  \
                               ,BLOC(VIDE;                                                                                              \
                                     )                                                                                                  \
                                );                                                                                                      \
          Eblock                                                                                                                        \
     end_image                                                                                                                          \
                                                                                                                                        \
     RETI(imageR);                                                                                                                      \
     Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' cos '   H Y P E R - H Y P E R - C O M P L E X E  :                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_cosinus_circulaire_dans_HHC_____seuil,FLOT(MILLE))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */
DEFV(Common,DEFV(Logical,SINT(Iiteration_cosinus_circulaire_dans_HHC_____changer_le_zero,FAUX)));
                                        /* La possibilite de changer le 'zero' a ete introduit le 20210212153501...                  */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(Iiteration_cosinus_circulaire_dans_HHC(imageR          /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_S                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_T                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_U                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_V                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA1                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA2                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA3                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA4                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA5                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA6                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA7                  /* Common,DEFV(Fonction,) :   \  */
                                                                                    )               /* Common,DEFV(Fonction,) :   \  */
              ,fFHHCcosinus_circulaire                                                              /* Common,DEFV(Fonction,) :   \  */
              ,fFHHCcosinus_circulaire_____valeur                                                   /* Common,DEFV(Fonction,) :   \  */
              ,Iiteration_cosinus_circulaire_dans_HHC_____seuil                                     /* Common,DEFV(Fonction,) :   \  */
              ,Iiteration_cosinus_circulaire_dans_HHC_____changer_le_zero                           /* Common,DEFV(Fonction,) :   \  */
              ,HHC_____octonion__0__0__0__0__0__0__0__0                                             /* Common,DEFV(Fonction,) :   \  */
              ,FgHHCserie_cosinus_____HHC_____octonion__0__0__0__0__0__0__0__0                      /* Common,DEFV(Fonction,) :   \  */
                                             )                                                      /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' sin '   H Y P E R - H Y P E R - C O M P L E X E  :                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_sinus_circulaire_dans_HHC_____seuil,FLOT(MILLE))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */
DEFV(Common,DEFV(Logical,SINT(Iiteration_sinus_circulaire_dans_HHC_____changer_le_zero,FAUX)));
                                        /* La possibilite de changer le 'zero' a ete introduit le 20210212153501...                  */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(Iiteration_sinus_circulaire_dans_HHC(imageR            /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_S                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_T                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_U                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_V                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA1                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA2                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA3                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA4                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA5                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA6                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA7                  /* Common,DEFV(Fonction,) :   \  */
                                                                                  )                 /* Common,DEFV(Fonction,) :   \  */
              ,fFHHCsinus_circulaire                                                                /* Common,DEFV(Fonction,) :   \  */
              ,fFHHCsinus_circulaire_____valeur                                                     /* Common,DEFV(Fonction,) :   \  */
              ,Iiteration_sinus_circulaire_dans_HHC_____seuil                                       /* Common,DEFV(Fonction,) :   \  */
              ,Iiteration_sinus_circulaire_dans_HHC_____changer_le_zero                             /* Common,DEFV(Fonction,) :   \  */
              ,HHC_____octonion__0__0__0__0__0__0__0__0                                             /* Common,DEFV(Fonction,) :   \  */
              ,FgHHCserie_sinus_____HHC_____octonion__0__0__0__0__0__0__0__0                        /* Common,DEFV(Fonction,) :   \  */
                                             )                                                      /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' tg '   H Y P E R - H Y P E R - C O M P L E X E  :                      */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_tangente_circulaire_dans_HHC_____seuil,FDEUX)));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(Iiteration_tangente_circulaire_dans_HHC(imageR         /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_S                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_T                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_U                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_V                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA1                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA2                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA3                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA4                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA5                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA6                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA7                  /* Common,DEFV(Fonction,) :   \  */
                                                                                     )              /* Common,DEFV(Fonction,) :   \  */
              ,fFHHCtangente_circulaire                                                             /* Common,DEFV(Fonction,) :   \  */
              ,fFHHCtangente_circulaire_____valeur                                                  /* Common,DEFV(Fonction,) :   \  */
              ,Iiteration_tangente_circulaire_dans_HHC_____seuil                                    /* Common,DEFV(Fonction,) :   \  */
              ,FAUX                                                                                 /* Common,DEFV(Fonction,) :   \  */
              ,HHC_____octonion__0__0__0__0__0__0__0__0                                             /* Common,DEFV(Fonction,) :   \  */
              ,HHC_____octonion__0__0__0__0__0__0__0__0                                             /* Common,DEFV(Fonction,) :   \  */
                                             )                                                      /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' ch '   H Y P E R - H Y P E R - C O M P L E X E  :                      */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_cosinus_hyperbolique_dans_HHC_____seuil,FLOT(MILLE))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */
DEFV(Common,DEFV(Logical,SINT(Iiteration_cosinus_hyperbolique_dans_HHC_____changer_le_zero,FAUX)));
                                        /* La possibilite de changer le 'zero' a ete introduit le 20210212153501...                  */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(Iiteration_cosinus_hyperbolique_dans_HHC(imageR        /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_S                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_T                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_U                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_V                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA1                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA2                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA3                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA4                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA5                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA6                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA7                  /* Common,DEFV(Fonction,) :   \  */
                                                                                      )             /* Common,DEFV(Fonction,) :   \  */
              ,fFHHCcosinus_hyperbolique                                                            /* Common,DEFV(Fonction,) :   \  */
              ,fFHHCcosinus_hyperbolique_____valeur                                                 /* Common,DEFV(Fonction,) :   \  */
              ,Iiteration_cosinus_hyperbolique_dans_HHC_____seuil                                   /* Common,DEFV(Fonction,) :   \  */
              ,Iiteration_cosinus_hyperbolique_dans_HHC_____changer_le_zero                         /* Common,DEFV(Fonction,) :   \  */
              ,HHC_____octonion__0__0__0__0__0__0__0__0                                             /* Common,DEFV(Fonction,) :   \  */
              ,FgHHCserie_cosinus_hyperbolique_____HHC_____octonion__0__0__0__0__0__0__0__0         /* Common,DEFV(Fonction,) :   \  */
                                             )                                                      /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' sh '   H Y P E R - H Y P E R - C O M P L E X E  :                      */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_sinus_hyperbolique_dans_HHC_____seuil,FLOT(MILLE))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */
DEFV(Common,DEFV(Logical,SINT(Iiteration_sinus_hyperbolique_dans_HHC_____changer_le_zero,FAUX)));
                                        /* La possibilite de changer le 'zero' a ete introduit le 20210212153501...                  */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(Iiteration_sinus_hyperbolique_dans_HHC(imageR          /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_S                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_T                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_U                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_V                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA1                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA2                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA3                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA4                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA5                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA6                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA7                  /* Common,DEFV(Fonction,) :   \  */
                                                                                    )               /* Common,DEFV(Fonction,) :   \  */
              ,fFHHCsinus_hyperbolique                                                              /* Common,DEFV(Fonction,) :   \  */
              ,fFHHCsinus_hyperbolique_____valeur                                                   /* Common,DEFV(Fonction,) :   \  */
              ,Iiteration_sinus_hyperbolique_dans_HHC_____seuil                                     /* Common,DEFV(Fonction,) :   \  */
              ,Iiteration_sinus_hyperbolique_dans_HHC_____changer_le_zero                           /* Common,DEFV(Fonction,) :   \  */
              ,HHC_____octonion__0__0__0__0__0__0__0__0                                             /* Common,DEFV(Fonction,) :   \  */
              ,FgHHCserie_sinus_hyperbolique_____HHC_____octonion__0__0__0__0__0__0__0__0           /* Common,DEFV(Fonction,) :   \  */
                                             )                                                      /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' th '   H Y P E R - H Y P E R - C O M P L E X E  :                      */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_tangente_hyperbolique_dans_HHC_____seuil,FDEUX)));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(Iiteration_tangente_hyperbolique_dans_HHC(imageR       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_S                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_T                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_U                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_V                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA1                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA2                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA3                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA4                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA5                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA6                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA7                  /* Common,DEFV(Fonction,) :   \  */
                                                                                       )            /* Common,DEFV(Fonction,) :   \  */
              ,fFHHCtangente_hyperbolique                                                           /* Common,DEFV(Fonction,) :   \  */
              ,fFHHCtangente_hyperbolique_____valeur                                                /* Common,DEFV(Fonction,) :   \  */
              ,Iiteration_tangente_hyperbolique_dans_HHC_____seuil                                  /* Common,DEFV(Fonction,) :   \  */
              ,FAUX                                                                                 /* Common,DEFV(Fonction,) :   \  */
              ,HHC_____octonion__0__0__0__0__0__0__0__0                                             /* Common,DEFV(Fonction,) :   \  */
              ,HHC_____octonion__0__0__0__0__0__0__0__0                                             /* Common,DEFV(Fonction,) :   \  */
                                             )                                                      /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' exp '   H Y P E R - H Y P E R - C O M P L E X E  :                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_exponentielle_neperienne_dans_HHC_____seuil,FLOT(MILLIARD))));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(Iiteration_exponentielle_neperienne_dans_HHC(imageR    /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_S                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_T                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_U                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_V                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA1                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA2                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA3                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA4                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA5                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA6                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA7                  /* Common,DEFV(Fonction,) :   \  */
                                                                                          )         /* Common,DEFV(Fonction,) :   \  */
              ,fFHHCexponentielle_neperienne                                                        /* Common,DEFV(Fonction,) :   \  */
              ,fFHHCexponentielle_neperienne_____valeur                                             /* Common,DEFV(Fonction,) :   \  */
              ,Iiteration_exponentielle_neperienne_dans_HHC_____seuil                               /* Common,DEFV(Fonction,) :   \  */
              ,FAUX                                                                                 /* Common,DEFV(Fonction,) :   \  */
              ,HHC_____octonion__0__0__0__0__0__0__0__0                                             /* Common,DEFV(Fonction,) :   \  */
              ,HHC_____octonion__0__0__0__0__0__0__0__0                                             /* Common,DEFV(Fonction,) :   \  */
                                             )                                                      /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I T E R A T I O N   D E   L A   F O N C T I O N   ' log '   H Y P E R - H Y P E R - C O M P L E X E  :                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(Float,SINT(Iiteration_logarithme_dans_HHC_____seuil,FDEUX)));
                                        /* Seuil de divergence du carre du module lors des iterations.                               */

DEFV(Common,GENERE__FonctionP_I_ITERAT_F_HHC(Iiteration_logarithme_dans_HHC(imageR                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_bas_gauche)      /* Common,DEFV(Fonction,) :   \  */
                                                           ,ARGUMENT_POINTERs(coin_haut_droite)     /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_J                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_K                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_S                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_T                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_U                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,composante_V                            /* Common,DEFV(Fonction,) :   \  */
                                                           ,nombre_maximal_d_iterations             /* Common,DEFV(Fonction,) :   \  */
                                                           ,visualisation_arguments_de_sortie       /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA1                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA2                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA3                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA4                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA5                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA6                  /* Common,DEFV(Fonction,) :   \  */
                                                           ,ponderation_argumentA7                  /* Common,DEFV(Fonction,) :   \  */
                                                                            )                       /* Common,DEFV(Fonction,) :   \  */
              ,fFHHClogarithme                                                                      /* Common,DEFV(Fonction,) :   \  */
              ,fFHHClogarithme_____valeur                                                           /* Common,DEFV(Fonction,) :   \  */
              ,Iiteration_logarithme_dans_HHC_____seuil                                             /* Common,DEFV(Fonction,) :   \  */
              ,FAUX                                                                                 /* Common,DEFV(Fonction,) :   \  */
              ,HHC_____octonion__0__0__0__0__0__0__0__0                                             /* Common,DEFV(Fonction,) :   \  */
              ,HHC_____octonion__0__0__0__0__0__0__0__0                                             /* Common,DEFV(Fonction,) :   \  */
                                             )                                                      /* Common,DEFV(Fonction,) :   \  */
     )                                                                                              /* Common,DEFV(Fonction,) :      */
                                        /* Fonction introduite le 20210206123600...                                                  */

EFonctionP

#undef    GENERE__FonctionP_I_ITERAT_F_HHC

#undef    TEST_D_OVERFLOW_D_UNE_SUITE_HYPER_HYPER_COMPLEXE
#undef    TEST_D_UNDERFLOW_D_UNE_SUITE_HYPER_HYPER_COMPLEXE
#undef    INITIALISATION_DU_POINT_COURANT_DANS_HHC
#undef    BVARIABLES_F_ITERATION_DANS_HHC

#undef    ROTATION_TRIDIMENSIONNELLE_DANS_HHC

#undef    VARIABLES_COMMUNES_DES_ITERATIONS_DANS_C_HC_HHC

#undef    SEUIL_MODULE_DANS_HHC
#undef    TEST_DU_CARRE_DU_MODULE_DANS_HHC

#undef    F_ITERATION_QUELCONQUE_DANS_HHC
#undef    BVARIABLES_F_ITERATION_QUELCONQUE_DANS_HHC

#undef    F_ITERATION_DANS_HHC
#undef    gF_ITERATION_DANS_HHC
#undef    gF_ITERATION_DANS_HHC__INITIALISATIONS_DIVERSES

#undef    TRANSFORMATION_LINEAIRE_D_UNE_COMPOSANTE
#undef    INVERSION_D_UNE_COMPOSANTE

#undef    PARAMETRE_D_INVERSION_Ri2
#undef    PARAMETRE_D_INVERSION_Rs2

#undef    REPLIEMENT_D_UNE_COMPOSANTE
#undef    REPLIEMENT_SINUSOIDAL_D_UNE_COMPOSANTE
#undef    REPLIEMENT_POLYNOMIAL_D_UNE_COMPOSANTE
#undef    REPLIEMENT_AFFINE_PAR_MORCEAUX_D_UNE_COMPOSANTE

#undef    NE_PAS_TESTER_L_UNDERFLOW_ET_L_OVERFLOW
#undef    TESTER_L_UNDERFLOW_ET_L_OVERFLOW

#undef    PAS_ASSEZ_D_ITERATIONS

#undef    ITERATIONS_DIVERSES_____EXTREMITE
#undef    ITERATIONS_DIVERSES_____ORIGINE__

#undef    ITERATIONS_DIVERSES_____REPLIER_L_ESPACE

#undef    EXPOSANT_INUTILE

#undef    BVARIABLES_D_HOMOTHETIE_C_HC_HHC
#undef    VARIABLES_RELATIVES_A_LA_NECESSITE_D_HOMOTHETIE

#undef    Y_PLAN_IMAGE_MODULO
#undef    X_PLAN_IMAGE_MODULO
#undef    Y_PLAN_IMAGE
#undef    X_PLAN_IMAGE
#undef    Y_IMAGE_PLAN
#undef    X_IMAGE_PLAN
#undef    Y_COIN_HAUT_DROITE
#undef    X_COIN_HAUT_DROITE
#undef    Y_COIN_BAS_GAUCHE
#undef    X_COIN_BAS_GAUCHE

#undef    VALIDATION_DE_LA_FENETRE_DE_CALCUL_AVANT_HOMOTHETIE_ET_EDITION_EVENTUELLE
#undef    RANGEMENT_DU_NIVEAU_COURANT_ET_EVENTUELLEMENT_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC
#undef    INITIALISATION_EVENTUELLE_DE_L_EXTENSION_DE_LA_PRECISIONS_DES_ITERATIONS_DANS_C_HC_HHC

#undef    fNON_APPARTENANCE_A_L_ENSEMBLE
#undef    fAPPARTENANCE_A_L_ENSEMBLE
#undef    NON_APPARTENANCE_A_L_ENSEMBLE
#undef    APPARTENANCE_A_L_ENSEMBLE

_______________________________________________________________________________________________________________________________________



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