/*************************************************************************************************************************************/ /* */ /* G E N E R A T I O N D E V A L E U R S C O R R E S P O N D A N T A */ /* L A D Y N A M I Q U E D E V E R H U L S T : */ /* */ /* */ /* Definition : */ /* */ /* Cette commande genere une suite de */ /* nombres 'X' tel que : */ /* */ /* X = D */ /* 0 */ /* */ /* 2 */ /* X = (R+1).X - R.X */ /* n n-1 n-1 */ /* */ /* ou 'D' designe la valeur de depart... */ /* */ /* */ /* Note sur la sensibilite aux erreurs d'arrondi : */ /* */ /* Le 20161219101525, je note un phenomene */ /* curieux sur '$LACT19' et sur '$LACT1A'. A */ /* partir de "derniere=2264", les resultats */ /* divergent : */ /* */ /* */ /* numero_d_image : LACT19 : LACT1A : */ /* */ /* 2259 +1.2474053760322 +1.2474053760322 /.\ */ /* 2260 +0.32156098766686 +0.32156098766686 | */ /* 2261 +0.97603954429958 +0.97603954429958 | */ /* 2262 +1.0461986010887 +1.0461986010887 | */ /* 2263 +0.90119986559487 +0.90119986559487 <- identiques, */ /* */ /* 2264 +1.1683158691349 +1.1683158691348 <- differents. */ /* 2265 +0.57837756632243 +0.57837756632247 | */ /* 2266 +1.3099484376146 +1.3099484376146 | */ /* 2267 +0.091899022831792 +0.091899022831718 | */ /* 2268 +0.34225980013485 +0.3422598001346 \./ */ /* */ /* On notera que les resultats precedents obtenus */ /* sur '$LACT1A' sont les memes, que '$xci/valeurs_chao$X' */ /* soit celui de '$LACT19' (via un 'reference') ou */ /* bien ait ete recompile sur '$LACT1A'... Cela montre */ /* que la difference ne vient pas des options de '$Cc', */ /* mais des processeurs eux-memes... */ /* */ /* On notera le 20161219114418 que les tests precedents */ /* ont ete refaits sur toutes les MACHINEs de type '$CMAP28' ; */ /* les resultats obtenus ont toujours ete ceux de '$LACT19'... */ /* */ /* On notera le 20161219172254 que '$LACT1A' donne les */ /* resultats de '$LACT19' a quatre conditions : */ /* */ /* 1-Supprimer l'option 'v $Fcompilers mfpmath=387', */ /* 2-Recompiler 'v $xbg/GooF_fonct$K', */ /* 3-Recompiler 'v $xci/valeurs_chao$K', */ /* 4-Activer l'option "GooF=FAUX" dans 'v $xci/valeurs_chao$K GooF'. */ /* */ /* Tout cela est bien mysterieux, meme si l'option 'v $Fcompilers mfpmath=387' */ /* semble jouer un role important, voire essentiel... */ /* */ /* Cette anomalie avec '$LACT1A' s'est vue aussi avec */ /* beaucoup d'autres programmes et en particulier ceux */ /* de '$xrs' ('v $xiirs/EPIC.31.diff' par exemple) ou */ /* encore ceux de '$xrc'... */ /* */ /* */ /* Author of '$xci/valeurs_chao$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 19990401095828). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R F A C E ' listG ' : */ /* */ /* */ /* :Debut_listG: */ /* :Fin_listG: */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */ /* */ /*************************************************************************************************************************************/ #define PRAGMA_CPP_____AUTORISER_LE_GooF /* Ceci est essentiel puisque l'on souhaite etudier l'influence de la syntaxe sur les */ /* resultats obtenus. Ceci a ete introduit le 20040420232207. */ @define PRAGMA_CL_____MODULE_NON_OPTIMISABLE /* Ceci est essentiel puisque l'on souhaite etudier l'influence de la syntaxe sur les */ /* resultats obtenus. Ceci manquait et a ete introduit le 20021102092724. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I C H I E R S D ' I N C L U D E S : */ /* */ /*************************************************************************************************************************************/ #include INCLUDES_MINI /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #include xci/sequence.01.I" #define DEPHASAGE_INITIAL \ ZERO \ /* Nombre de valeurs aleatoires a generer initialement en aveugle de facon a se dephaser */ \ /* dans la liste des valeurs aleatoires generees (introduit le 20021102093904). */ #define TAUX_DE_CROISSANCE \ GRO3(FU) \ /* Taux de croissance 'R' ; une valeur superieure a 2.57 donne un comportement chaotique. */ #define X_DE_DEPART \ FDU \ /* Definition de la variable 'x' de depart... */ #define UTILISER_LA_FORME_NATURELLE \ VRAI #define TESTER_L_ASSOCIATIVITE \ VRAI #define GENERALISER_LA_FORME \ FAUX /* Choix de la forme a utiliser pour le calcul. La generalisation a ete introduite le */ /* 20190104103807... */ #include xci/valeurs.01.I" #define COMPATIBILITE_20040420 \ FAUX \ /* Permet de proceder a des generations compatibles a celles qui furent effectues */ \ /* anterieurement au 20040420232207. Le 'GooF' est active par defaut... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #include xci/valeurs.02.I" #define GENERATION_DE_LA_VALEUR_CHAOTIQUE_COURANTE(valeur_aleatoire) \ Bblock \ Test(IL_FAUT(generaliser_la_forme)) \ /* Test introduit le 20190104103807... */ \ Bblock \ EGAL(X_courant \ ,HORNER_1_09(X_courant \ ,polynome_a9 \ ,polynome_a8 \ ,polynome_a7 \ ,polynome_a6 \ ,polynome_a5 \ ,polynome_a4 \ ,polynome_a3 \ ,polynome_a2 \ ,polynome_a1 \ ,polynome_a0 \ ) \ ); \ /* La generalisation introduite le 20190104103807 utilise un polynome du neuvieme degre */ \ /* initialise par la forme "naturelle"... */ \ /* */ \ /* ATTENTION : on notera qu'evidemment la programmation de la forme "naturelle" (ci-dessous) */ \ /* et de la forme "generalisee par defaut" (ci-dessus) differant, les resultats alors */ \ /* produits divergent rapidement ainsi qu'on le voit ici : */ \ /* */ \ /* forme "naturelle" : forme "generalisee" : */ \ /* */ \ /* +0.5 +0.5 */ \ /* +1.25 +1.25 */ \ /* +0.3125 +0.3125 */ \ /* +0.95703125 +0.95703125 */ \ /* +1.0803985595703 +1.0803985595703 */ \ /* +0.81981109571643 +0.81981109571643 */ \ /* +1.2629736848864 +1.2629736848864 */ \ /* +0.26658715339901 +0.26658715339901 */ \ /* +0.85314248252388 +0.85314248252389 <-- divergence... */ \ /* +1.2290136436345 +1.2290136436345 */ \ /* +0.38463096581879 +0.3846309658188 */ \ /* +1.0947009236751 +1.0947009236751 */ \ /* +0.78369335781513 +0.78369335781507 */ \ /* +1.2922475940099 +1.2922475940099 */ \ /* +0.15927884336664 +0.15927884336647 */ \ /* +0.56100612363391 +0.5610061236334 */ \ /* +1.2998408822714 +1.2998408822711 */ \ /* +0.13060457141332 +0.13060457141455 */ \ /* +0.47124562343111 +0.47124562343507 */ \ /* +1.2187651809155 +1.2187651809202 */ \ /* +0.41889502502597 +0.41889502501061 */ \ /* +1.1491609741294 +1.1491609741065 */ \ /* +0.63493106313163 +0.63493106319773 */ \ /* +1.3303118877381 +1.3303118877507 */ \ /* +0.012058394980346 +0.012058394930226 */ \ /* +0.047797365252877 +0.047797365056023 */ \ /* +0.18433569663616 +0.1843356959052 */ \ /* +0.63540383938162 +0.63540383726623 */ \ /* +1.3304012402238 +1.330401239827 */ \ /* +0.011702580928245 +0.011702582508461 */ \ /* +0.046399472511833 +0.046399478721743 */ \ /* */ \ Eblock \ ATes \ Bblock \ Test(IL_FAUT(utiliser_la_forme_naturelle)) \ Bblock \ EGAL(X_courant \ ,SOUS(MUL2(ADD2(taux_de_croissance,FU),X_courant) \ ,MUL2(taux_de_croissance,MUL2(X_courant,X_courant)) \ ) \ ); \ /* Calcul de la suite 'X' suivant : */ \ /* */ \ /* X = ((R+1).X) - (R.(X.X)) */ \ /* */ \ Eblock \ ATes \ Bblock \ Test(IL_FAUT(tester_l_associativite)) \ Bblock \ EGAL(X_courant \ ,SOUS(MUL2(ADD2(taux_de_croissance,FU),X_courant) \ ,MUL2(MUL2(taux_de_croissance,X_courant),X_courant) \ ) \ ); \ /* Calcul de la suite 'X' suivant : */ \ /* */ \ /* X = ((R+1).X) - ((R.X).X) */ \ /* */ \ Eblock \ ATes \ Bblock \ EGAL(X_courant \ ,SOUS(ADD2(MUL2(taux_de_croissance,X_courant),X_courant) \ ,MUL2(taux_de_croissance,MUL2(X_courant,X_courant)) \ ) \ ); \ /* Calcul de la suite 'X' suivant : */ \ /* */ \ /* X = (R.X) + X - (R.(X.X)) */ \ /* */ \ Eblock \ ETes \ Eblock \ ETes \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G E N E R A T I O N D E V A L E U R S C O R R E S P O N D A N T A */ /* L A D Y N A M I Q U E D E V E R H U L S T : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE)); /* Numero de la premiere image, */ DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE)); /* Numero de la derniere image. */ DEFV(Int,INIT(numero_d_image,UNDEF)); /* Numero de l'image courante. */ DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES)); /* Pas de passage d'un numero d'image a une autre. */ DEFV(Positive,INIT(dephasage_initial,DEPHASAGE_INITIAL)); /* Nombre de valeurs aleatoires a generer initialement en aveugle de facon a se dephaser */ /* dans la liste des valeurs aleatoires generees (introduit le 20021102093904). */ DEFV(Float,INIT(taux_de_croissance,TAUX_DE_CROISSANCE)); /* Taux de croissance 'R' ; une valeur superieure a 2.57 donne un comportement chaotique. */ DEFV(Float,INIT(X_de_depart,X_DE_DEPART)); /* Definition de la variable 'x' d'arrivee et de depart... */ DEFV(Float,INIT(X_courant,FLOT__UNDEF)); /* Definition de la variable 'x' de depart... */ DEFV(Logical,INIT(utiliser_la_forme_naturelle,UTILISER_LA_FORME_NATURELLE)); DEFV(Logical,INIT(tester_l_associativite,TESTER_L_ASSOCIATIVITE)); /* Choix de la forme a utiliser pour le calcul. */ DEFV(Logical,INIT(generaliser_la_forme,GENERALISER_LA_FORME)); DEFV(Float,INIT(polynome_a0,FZERO)); DEFV(Float,INIT(polynome_a1,ADD2(TAUX_DE_CROISSANCE,FU))); DEFV(Float,INIT(polynome_a2,NEGA(TAUX_DE_CROISSANCE))); DEFV(Float,INIT(polynome_a3,FZERO)); DEFV(Float,INIT(polynome_a4,FZERO)); DEFV(Float,INIT(polynome_a5,FZERO)); DEFV(Float,INIT(polynome_a6,FZERO)); DEFV(Float,INIT(polynome_a7,FZERO)); DEFV(Float,INIT(polynome_a8,FZERO)); DEFV(Float,INIT(polynome_a9,FZERO)); /* Definition du polynome de generalisation de la forme (introduit le 20190104103807). */ /* Il est du neuvieme degre et est initialise par la forme "naturelle"... */ #include xci/valeurs.03.I" DEFV(Logical,INIT(compatibilite_20040420,COMPATIBILITE_20040420)); /* Permet de proceder a des generations compatibles a celles qui furent effectues */ /* anterieurement au 20040420232207. Le 'GooF' est active par defaut... */ /*..............................................................................................................................*/ GET_ARGUMENTS_(nombre_d_arguments ,BLOC(GET_ARGUMENT_L("GooF_____compatibilite_20040420=""compatibilite_20040420=",compatibilite_20040420); GET_ARGUMENT_N("GooF=",compatibilite_20040420); /* Cet argument a ete introduit le 20161219165911 afin de rendre plus comprehensible */ /* l'argument "compatibilite_20040420="... */ GET_ARGUMENT_I("premiere=""p=""D=",premiere_image); GET_ARGUMENT_I("derniere=""d=""A=",derniere_image); GET_ARGUMENT_I("pas=",pas_des_images); GET_ARGUMENT_I("dephasage=",dephasage_initial); GET_ARGUMENT_F("taux=""r=""R=",taux_de_croissance); GET_ARGUMENT_F("Xd=""XD=""X0=",X_de_depart); GET_ARGUMENT_L("naturelle=""naturel=",utiliser_la_forme_naturelle); GET_ARGUMENT_L("associativite=",tester_l_associativite); GET_ARGUMENT_L("generaliser=""gen=",generaliser_la_forme); GET_ARGUMENT_F("a0=",polynome_a0); GET_ARGUMENT_F("a1=",polynome_a1); GET_ARGUMENT_F("a2=",polynome_a2); GET_ARGUMENT_F("a3=",polynome_a3); GET_ARGUMENT_F("a4=",polynome_a4); GET_ARGUMENT_F("a5=",polynome_a5); GET_ARGUMENT_F("a6=",polynome_a6); GET_ARGUMENT_F("a7=",polynome_a7); GET_ARGUMENT_F("a8=",polynome_a8); GET_ARGUMENT_F("a9=",polynome_a9); /* Ces arguments ont ete introduits le 20190104103807... */ PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1; /* Cette procedure fut introduite le 20061226185714... */ ) ); Test(IFLE(premiere_image,derniere_image)) Bblock EGAL(X_courant,X_de_depart); /* Initialisation de la suite... */ Repe(dephasage_initial) Bblock USs_GooF______CONDITIONNEL(NOTL(compatibilite_20040420) ,BLOC( Bblock GENERATION_DE_LA_VALEUR_CHAOTIQUE_COURANTE(X_courant); /* On saute eventuellement les 'dephasage_initial' premieres valeurs aleatoires (avec */ /* 'GooF' par defaut...). */ Eblock ) ); Eblock ERep DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images) Bblock Test(IFEQ(numero_d_image,premiere_image)) Bblock Eblock ATes Bblock USs_GooF______CONDITIONNEL(NOTL(compatibilite_20040420) ,BLOC( Bblock GENERATION_DE_LA_VALEUR_CHAOTIQUE_COURANTE(X_courant); /* Calcul des elements attendus de la suite (avec 'GooF' par defaut...). */ Eblock ) ); Eblock ETes CAL2(Prin2(Cara(chain_Aconcaten5(INTRODUCTION_FORMAT,valeurs_signees,".*",format_d_edition,"\n")) ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) ,MULTIPLE_DE(ENTIER_FLOTTANT(X_courant)) ) ); /* Et enfin, edition de la valeur "chaotique" courante. */ Eblock EDoI Eblock ATes Bblock PRINT_ERREUR("la relation d'ordre stricte ('premier < dernier') n'est pas respectee"); Eblock ETes RETU_Commande; Eblock ECommande