_______________________________________________________________________________________________________________________________________ /*************************************************************************************************************************************/ /* */ /* Q U E L Q U E S F O N C T I O N S U T I L E S D A N S L E S N O M B R E S C O M P L E X E S : */ /* */ /* */ /* Definition : */ /* */ /* Dans ce fichier se trouve quelques */ /* fonctions utiles definies pour les */ /* nombres complexes. */ /* */ /* */ /* Author of '$ximcf/fonction$FON' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 19990616085943). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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_fonction_____ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_COMPLEXES)); /* Indicateur introduit le 20070129122544... */ #Aifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_COMPLEXES DEFV(Common,DEFV(Logical,_______VERSION__ximcf_fonction_____ARITHMETIQUE_DE_BASE_DANS_LES_NOMBRES_COMPLEXES)); /* Indicateur introduit le 20070129132819... */ #Eifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_COMPLEXES _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A P P R O X I M A T I O N D E L A F O N C T I O N ' famma ' */ /* P A R L A F O R M U L E D ' E U L E R - G A U S S : */ /* */ /* */ /* Definition : */ /* */ /* La fonction 'famma' est definie */ /* dans le plan Complexe par la formule */ /* de Euler-Gauss : */ /* */ /* z */ /* k */ /* famma(z) = limite -------------------------------- */ /* k --> infini z z z */ /* (1 + ---)(1 + ---)...(1 + ---) */ /* 1 2 k */ /* */ /* 'z' etant different des entiers {0,-1,-2,...,-k}. */ /* */ /* On notera que 'famma(z)' est en fait la */ /* fonction factorielle generalisee (souvent */ /* notee 'PI' -la lettre grecque-) et qu'elle */ /* peut aussi s'ecrire : */ /* */ /* famma(z-1) = gamma(z) */ /* */ /* Le nom 'famma' est donc une contraction */ /* de 'Factorielle' et de 'gAMMA'... */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionJ #define PREMIER_INDICE_D_APPROXIMATION_DE_LA_FONCTION_FAMMA \ UN \ /* Valeur initiale de l'indice 'n'... */ DEFV(Common,DEFV(complexe,fFCfamma_Euler_Gauss_____valeur)); /* Nombre complexe resultat. On notera qu'il est mis en 'Common' afin de pouvoir etre */ /* renvoye "directement" sans utiliser le 'RETU(...)'. En effet, a cause de la programmation */ /* de 'FCegal(...)' ('v $ximcd/operator$FON FCegal'), lorsque le nombre Argument 'z1' est */ /* une fonction, celle-ci est appelee deux fois : la premiere pour 'Reelle(...)' et la */ /* seconde pour Imaginaire(...)'. La definition en 'Common' autorise la recuperation directe */ /* du resultat... */ DEFV(Common,DEFV(FonctionJ,fFCfamma_Euler_Gauss(z,dernier_indice_d_approximation_de_la_fonction_famma))) DEFV(Argument,DEFV(complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'famma(z)'. */ DEFV(Argument,DEFV(Positive,dernier_indice_d_approximation_de_la_fonction_famma)); /* Nombre d'iterations 'n' pour obtenir l'approximation souhaitee pour 'famma(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Cinitialisation(fFCfamma_Euler_Gauss_____valeur,FLOT__UNDEF,I0_Complexe); /* Au cas ou l'on demanderait un nombre incorrect d'iterations (0 par exemple), ou bien */ /* au cas ou la fonction serait declaree indefinie ci-apres... */ Test(IFOU(IFET(IFET(fEST_ENTIER(Reelle(z)) ,IZLE(Reelle(z)) ) ,IZEQ(Imaginaire(z)) ) ,IFOU(IFLT(dernier_indice_d_approximation_de_la_fonction_famma,PREMIER_INDICE_D_APPROXIMATION_DE_LA_FONCTION_FAMMA) ,IZLE(dernier_indice_d_approximation_de_la_fonction_famma) ) ) ) /* Les deux tests sur 'dernier_indice_d_approximation_de_la_fonction_famma' ne sont pas */ /* redondants car il est imperatif de detecter explicitement si 'n' est strictement */ /* positif (ce qui est necessaire) ou pas (ce qui est impossible...). */ Bblock /* Cas ou 'z' est un nombre entier negatif : la fonction est alors indefinie ; elle vaut */ /* plus ou moins l'infini, suivant que l'on arrive par la droite ou par la gauche. Ainsi, */ /* pour : */ /* */ /* n E {0,1,2,...} */ /* */ /* on a : */ /* */ /* famma(-(2n) a droite) = +infini */ /* famma(-(2n) a gauche) = -infini */ /* famma(-(2n+1) a droite) = -infini */ /* famma(-(2n+1) a gauche) = +infini */ /* */ /* d'ou le renvoi de la valeur 'UNDEF', ne sachant pas determiner le signe... */ Eblock ATes Bblock DEFV(Int,INIT(indice_d_iteration,PREMIER_INDICE_D_APPROXIMATION_DE_LA_FONCTION_FAMMA)); /* Indice de calcul du produit. */ DEFV(complexe,z_numerateur); DEFV(complexe,z_denominateur); /* Nombres complexes de manoeuvre. */ Cexponentielle(z_numerateur,dernier_indice_d_approximation_de_la_fonction_famma,z); /* Calcul de : */ /* */ /* z */ /* z = n */ /* N */ /* */ Cegal(z_denominateur,C_____nombre_complexe_p1__0); /* Initialisation du produit du denominateur avec le nombre complexe (1,0). */ Repe(NBRE(PREMIER_INDICE_D_APPROXIMATION_DE_LA_FONCTION_FAMMA,dernier_indice_d_approximation_de_la_fonction_famma)) Bblock DEFV(complexe,z_reduit_translate); /* Nombres complexes de manoeuvre. */ Cforme_lineaire(z_reduit_translate,INVE(indice_d_iteration),z,FU); /* Calcul de : */ /* */ /* z */ /* z = 1 + --- */ /* T k */ /* */ Cproduit(z_denominateur,z_denominateur,z_reduit_translate); /* Calcul iteratif de : */ /* */ /* z z z */ /* z = (1 + ---)(1 + ---)...(1 + ---) */ /* D 1 2 k */ /* */ INCR(indice_d_iteration,I); /* Progression de l'indice d'iteration... */ Eblock ERep Cquotient(fFCfamma_Euler_Gauss_____valeur,z_numerateur,z_denominateur); /* Calcul de : */ /* */ /* z */ /* n */ /* z = -------------------------------- */ /* G z z z */ /* (1 + ---)(1 + ---)...(1 + ---) */ /* 1 2 n */ /* */ Eblock ETes RETU(fFCfamma_Euler_Gauss_____valeur); Eblock #undef PREMIER_INDICE_D_APPROXIMATION_DE_LA_FONCTION_FAMMA EFonctionJ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A P P R O X I M A T I O N D E L A F O N C T I O N ' gamma ' */ /* P A R L A F O R M U L E D E W E I E R S T R A S S : */ /* */ /* */ /* Definition : */ /* */ /* La fonction 'gamma' est definie */ /* dans le plan Complexe par la formule */ /* de Euler-Gauss : */ /* k=infini */ /* ------ z */ /* | | - --- */ /* 1 E.z | | z k */ /* ---------- = z.e | | [(1 + ---)e ] */ /* gamma(z) k */ /* k=1 */ /* */ /* */ /* 'z' etant different des entiers {0,-1,-2,...,-k} */ /* et ou 'E' symbolise la constante d'Euler. */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionJ #define PREMIER_INDICE_D_APPROXIMATION_DE_LA_FONCTION_GAMMA \ UN \ /* Valeur initiale de l'indice 'n'... */ DEFV(Common,DEFV(complexe,fFCgamma_Weierstrass_____valeur)); /* Nombre complexe resultat. On notera qu'il est mis en 'Common' afin de pouvoir etre */ /* renvoye "directement" sans utiliser le 'RETU(...)'. En effet, a cause de la programmation */ /* de 'FCegal(...)' ('v $ximcd/operator$FON FCegal'), lorsque le nombre Argument 'z1' est */ /* une fonction, celle-ci est appelee deux fois : la premiere pour 'Reelle(...)' et la */ /* seconde pour Imaginaire(...)'. La definition en 'Common' autorise la recuperation directe */ /* du resultat... */ DEFV(Common,DEFV(FonctionJ,fFCgamma_Weierstrass(z,dernier_indice_d_approximation_de_la_fonction_gamma))) DEFV(Argument,DEFV(complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'gamma(z)'. */ DEFV(Argument,DEFV(Positive,dernier_indice_d_approximation_de_la_fonction_gamma)); /* Nombre d'iterations 'n' pour obtenir l'approximation souhaitee pour 'gamma(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(complexe,z_un_sur_gamma); /* Inverse du nombre complexe resultat. */ /*..............................................................................................................................*/ Cinitialisation(fFCgamma_Weierstrass_____valeur,FLOT__UNDEF,I0_Complexe); /* Au cas ou l'on demanderait un nombre incorrect d'iterations (0 par exemple), ou bien */ /* au cas ou la fonction serait declaree indefinie ci-apres... */ Test(IFOU(IFET(IFET(fEST_ENTIER(Reelle(z)) ,IZLE(Reelle(z)) ) ,IZEQ(Imaginaire(z)) ) ,IFOU(IFLT(dernier_indice_d_approximation_de_la_fonction_gamma,PREMIER_INDICE_D_APPROXIMATION_DE_LA_FONCTION_GAMMA) ,IZLE(dernier_indice_d_approximation_de_la_fonction_gamma) ) ) ) /* Les deux tests sur 'dernier_indice_d_approximation_de_la_fonction_gamma' ne sont pas */ /* redondants car il est imperatif de detecter explicitement si 'n' est strictement */ /* positif (ce qui est necessaire) ou pas (ce qui est impossible...). */ Bblock /* Cas ou 'z' est un nombre entier negatif : la fonction est alors indefinie. */ Eblock ATes Bblock DEFV(Int,INIT(indice_d_iteration,PREMIER_INDICE_D_APPROXIMATION_DE_LA_FONCTION_GAMMA)); /* Indice de calcul du produit. */ DEFV(complexe,z_Euler); DEFV(complexe,z_exponentielle); /* Nombres complexes de manoeuvre. */ Cforme_lineaire(z_Euler,EULER,z,FZERO); Cexponentielle(z_exponentielle,EN,z_Euler); Cproduit(z_un_sur_gamma,z,z_exponentielle); /* Calcul de : */ /* */ /* E.z */ /* z.e */ /* */ Repe(NBRE(PREMIER_INDICE_D_APPROXIMATION_DE_LA_FONCTION_GAMMA,dernier_indice_d_approximation_de_la_fonction_gamma)) Bblock DEFV(complexe,z_reduit); DEFV(complexe,z_reduit_translate); /* Nombres complexes de manoeuvre. */ Cforme_lineaire(z_reduit,INVE(indice_d_iteration),z,FZERO); /* Calcul de : */ /* */ /* z */ /* --- */ /* k */ /* */ Cforme_lineaire(z_reduit_translate,FU,z_reduit,FU); /* Calcul de : */ /* */ /* z */ /* 1 + --- */ /* k */ /* */ Cproduit(z_un_sur_gamma,z_un_sur_gamma,z_reduit_translate); /* Calcul iteratif de : */ /* */ /* z z z */ /* (1 + ---)(1 + ---)...(1 + ---) */ /* 1 2 k */ /* */ Cforme_lineaire(z_reduit,NEGA(FU),z_reduit,FZERO); Cexponentielle(z_exponentielle,EN,z_reduit); /* Calcul de : */ /* */ /* z */ /* - --- */ /* k */ /* e */ /* */ Cproduit(z_un_sur_gamma,z_un_sur_gamma,z_exponentielle); /* Calcul iteratif de l'inverse de 'gamma(z)'. */ INCR(indice_d_iteration,I); /* Progression de l'indice d'iteration... */ Eblock ERep Cquotient(fFCgamma_Weierstrass_____valeur,C_____nombre_complexe_p1__0,z_un_sur_gamma); /* Calcul final de 'gamma' a partir de son inverse... */ Eblock ETes RETU(fFCgamma_Weierstrass_____valeur); Eblock #undef PREMIER_INDICE_D_APPROXIMATION_DE_LA_FONCTION_GAMMA EFonctionJ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A P P R O X I M A T I O N D E L A F O N C T I O N ' famma ' */ /* A L ' A I D E D E S O N P R O L O N G E M E N T A N A L Y T I Q U E : */ /* */ /* */ /* Definition : */ /* */ /* La fonction 'famma' est definie */ /* dans le plan Complexe par : */ /* */ /* z */ /* n */ /* famma(z) = limite -------------------------------- */ /* n --> infini z z z */ /* (1 + ---)(1 + ---)...(1 + ---) */ /* 1 2 n */ /* */ /* Il est possible de faire un prolongement */ /* analytique qui converge "partout" en ecrivant */ /* (d'apres 'RIEMANN'S ZETA FUNCTION de H.M Edwards, */ /* Academic Press, New-York, 1974, reference BCX PAM-AC58, */ /* page 106) : */ /* */ /* 1 log(2p) */ /* log(famma(z)) = (z + ---)log(z) - z + --------- */ /* 2 2 */ /* */ /* k=V */ /* _______ */ /* \ B */ /* \ 2k */ /* + / --------------- */ /* /______ 2k-1 */ /* 2k(2k-1)z */ /* k=1 */ /* */ /* + epsilon(z,N,V) */ /* */ /* */ /* Enfin, 'epsilon' sera neglige. Au passage, il */ /* s'agit de la methode de sommation de Euler-Maclaurin. */ /* */ /* Lorsqu'il y risque de divergence (lorsque */ /* 'Reelle(z)' est inferieure ou egale a 1), on */ /* utilise l'equation fonctionelle : */ /* */ /* famma(z+n) */ /* famma(z) = --------------------- */ /* (z+1).(z+2)...(z+n) */ /* */ /* */ /* qui permet de translater 'z' d'autant que */ /* necessaire... */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionJ DEFV(Common,DEFV(Float,SINT(fFCfamma_sommation_Euler_MacLaurin_____precision_du_calcul,PARE(1.0e-3)))); /* Precision demandee pour calculer la fonction 'famma'. ATTENTION, une valeur plus petite */ /* de la precision cree des problemes lors des calculs de factorielles... */ DEFV(Common,DEFV(Logical,SINT(fFCfamma_sommation_Euler_MacLaurin_____editer_les_parametres_de_calcul,FAUX))); /* Pour editer eventuellement {N,V,k}. */ #define VALEUR_MINIMALE_DE_indice_k_LORS_DU_CALCUL_DE_LA_FONCTION_fFCfamma_sommation_Euler_MacLaurin \ UN \ /* Valeur initiale de l'indice 'k'... */ DEFV(Common,DEFV(Int,SINT(fFCfamma_sommation_Euler_MacLaurin_____valeur_minimale_de_nombre_V_lors_du_calcul ,VALEUR_MINIMALE_DE_indice_k_LORS_DU_CALCUL_DE_LA_FONCTION_fFCfamma_sommation_Euler_MacLaurin ) ) ); DEFV(Common,DEFV(Int,SINT(fFCfamma_sommation_Euler_MacLaurin_____valeur_maximale_de_nombre_V_lors_du_calcul ,INFINI ) ) ); /* Afin de borner la valeur de 'V'. Ce dispositif est essentiel dans le cas ou la fonction */ /* 'fFCfamma_sommation_Euler_MacLaurin(...)' est appelee plusieurs fois de suite dans un */ /* pave du plan Complexe ('v $xrc/gamma.21$K fFCfamma_sommation_Euler_MacLaurin') de facon */ /* a garantir que tous les calculs se font dans les memes conditions, assurant ainsi la */ /* "continuite"... */ #define SEUIL_DE_DIVERGENCE_DE_LA_SOMMATION_DE_LA_FONCTION_fFCfamma_sommation_Euler_MacLaurin \ GRO4(FU) \ /* Seuil a tester par rapport a 'Reelle(z)'. On notera que 1 devrait suffir puisque l'on */ \ /* fait par la suite un test strictement superieur a cette constante, mais il semble qu'il */ \ /* vaille mieux etre prudent puisque l'on voit des ouvrages ou il est dit que cette formule */ \ /* vaut pour des "grands" z... */ DEFV(Common,DEFV(complexe,fFCfamma_sommation_Euler_MacLaurin_____valeur)); /* Nombre complexe resultat. On notera qu'il est mis en 'Common' afin de pouvoir etre */ /* renvoye "directement" sans utiliser le 'RETU(...)'. En effet, a cause de la programmation */ /* de 'FCegal(...)' ('v $ximcd/operator$FON FCegal'), lorsque le nombre Argument 'z1' est */ /* une fonction (et par exemple 'fFCfamma_sommation_Euler_MacLaurin(...)'), celle-ci est */ /* appelee deux fois : la premiere pour 'Reelle(...)' et la seconde pour Imaginaire(...)'. */ /* La definition en 'Common' autorise la recuperation directe du resultat... */ DEFV(Common,DEFV(FonctionJ,fFCfamma_sommation_Euler_MacLaurin(z))) DEFV(Argument,DEFV(complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'famma(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IFLT(fFCfamma_sommation_Euler_MacLaurin_____valeur_maximale_de_nombre_V_lors_du_calcul ,fFCfamma_sommation_Euler_MacLaurin_____valeur_minimale_de_nombre_V_lors_du_calcul ) ) Bblock PRINT_ERREUR("la relation d'ordre entre les bornes de 'V' est incorrecte, elles sont donc permutees"); iSWAP(fFCfamma_sommation_Euler_MacLaurin_____valeur_maximale_de_nombre_V_lors_du_calcul ,fFCfamma_sommation_Euler_MacLaurin_____valeur_minimale_de_nombre_V_lors_du_calcul ); Eblock ATes Bblock Eblock ETes Test(CTestIFEQ(z,C_____nombre_complexe__0__0)) /* Cas du pole (0,0) : */ Bblock Cinitialisation(fFCfamma_sommation_Euler_MacLaurin_____valeur,F_PETIT_INFINI,I0_Complexe); /* La valeur de 'famma' est alors (infini,0). */ Eblock ATes Bblock DEFV(Int,INIT(nombre_V ,TRON(ADD2(MAX2(UN,NEGA(ENTE(MOIT(Reelle(z))))),UN) ,MAX2(fFCfamma_sommation_Euler_MacLaurin_____valeur_minimale_de_nombre_V_lors_du_calcul ,VALEUR_MINIMALE_DE_indice_k_LORS_DU_CALCUL_DE_LA_FONCTION_fFCfamma_sommation_Euler_MacLaurin ) ,fFCfamma_sommation_Euler_MacLaurin_____valeur_maximale_de_nombre_V_lors_du_calcul ) ) ); /* Definition du nombre 'V' en le majorant un petit peu, puis en le bornant... ATTENTION, */ /* 'VALEUR_MINIMALE_DE_indice_k_LORS_DU_CALCUL_DE_LA_FONCTION_fFCfamma_sommation_Euler_...' */ /* est utilise ici correctement... */ DEFV(Logical,INIT(continuer_l_approximation_de_la_fonction_famma,VRAI)); /* Indicateur de convergence... */ DEFV(Int,INIT(indice_k,VALEUR_MINIMALE_DE_indice_k_LORS_DU_CALCUL_DE_LA_FONCTION_fFCfamma_sommation_Euler_MacLaurin)); /* Indices de sommation de la fonction 'famma'. */ DEFV(complexe,z_effectif); DEFV(complexe,z_diviseur_final_de_fFCfamma_sommation_Euler_MacLaurin); DEFV(complexe,log_de_fFCfamma_sommation_Euler_MacLaurin_____valeur); DEFV(complexe,z_plus_un_demi); DEFV(complexe,log_de_z); DEFV(complexe,z_terme_courant); /* Nombres complexes de manoeuvre. */ Cegal(z_diviseur_final_de_fFCfamma_sommation_Euler_MacLaurin,C_____nombre_complexe_p1__0); /* Le diviseur final de 'log(famma(z+n))' sera a priori le nombre (1,0). */ Test(IFGT(Reelle(z),SEUIL_DE_DIVERGENCE_DE_LA_SOMMATION_DE_LA_FONCTION_fFCfamma_sommation_Euler_MacLaurin)) Bblock Cegal(z_effectif,z); /* Dans le cas ou il n'y a pas de risque de divergences avec l'inverse de 'z', on calcule */ /* 'famma(z)'. */ Eblock ATes Bblock DEFV(Int,INIT(indice_n,UN)); /* Indices de sommation de la fonction 'famma'. */ DEFV(Int,INIT(translation_entiere_z ,ADD2(INTE(SOUS(SEUIL_DE_DIVERGENCE_DE_LA_SOMMATION_DE_LA_FONCTION_fFCfamma_sommation_Euler_MacLaurin ,Reelle(z) ) ) ,UN ) ) ); Cforme_lineaire(z_effectif,FU,z,FLOT(translation_entiere_z)); /* On va translater le 'z' d'une certaine quantite entiere suffisante pour assurer la */ /* convergence. En fait, on va calculer 'log(famma(z+n))', sachant que : */ /* */ /* famma(z+n) */ /* famma(z) = --------------------- */ /* (z+1).(z+2)...(z+n) */ /* */ Repe(translation_entiere_z) Bblock Cforme_lineaire(z_terme_courant,FU,z,FLOT(indice_n)); Cproduit(z_diviseur_final_de_fFCfamma_sommation_Euler_MacLaurin ,z_diviseur_final_de_fFCfamma_sommation_Euler_MacLaurin ,z_terme_courant ); /* Calcul de : */ /* */ /* (z+1).(z+2)...(z+n) */ /* */ INCR(indice_n,I); /* Progression de l'indice d'iteration... */ Eblock ERep Eblock ETes Cforme_lineaire(z_plus_un_demi,FU,z_effectif,FDU); Clogarithme(log_de_z,z_effectif); Cproduit(log_de_fFCfamma_sommation_Euler_MacLaurin_____valeur,z_plus_un_demi,log_de_z); Cdifference(log_de_fFCfamma_sommation_Euler_MacLaurin_____valeur ,log_de_fFCfamma_sommation_Euler_MacLaurin_____valeur ,z_effectif ); Cforme_lineaire(log_de_fFCfamma_sommation_Euler_MacLaurin_____valeur ,FU ,log_de_fFCfamma_sommation_Euler_MacLaurin_____valeur ,MOIT(LOGX(CERCLE_TRIGONOMETRIQUE)) ); /* Calcul de : */ /* */ /* 1 log(2p) */ /* log(famma(Z)) = (Z + ---)log(Z) - Z + --------- */ /* 2 2 */ /* */ /* en posant : */ /* */ /* Z = z + n */ /* */ Tant(IL_FAUT(continuer_l_approximation_de_la_fonction_famma)) Bblock DEFV(complexe,z_terme_courant); DEFV(complexe,z_produit_courant); DEFV(complexe,z_puissance_moins_2k_plus_un); /* Nombres complexes de manoeuvre. */ DEFV(Float,INIT(Bernoulli_2k,calcul_du_nombre_de_Bernoulli_B2k(indice_k))); /* Valeur du nombre de Bernoulli 'B(2k)'. */ Cegal(z_produit_courant,C_____nombre_complexe_p1__0); /* Initialisation du produit courant vec le nombre complexe (1,0). */ Repe(NBRE(VALEUR_MINIMALE_DE_indice_k_LORS_DU_CALCUL_DE_LA_FONCTION_fFCfamma_sommation_Euler_MacLaurin ,SOUS(DOUB(indice_k),UN) ) ) Bblock Cproduit(z_produit_courant,z_produit_courant,z_effectif); /* Calcul de : */ /* */ /* p=2k-1 */ /* ________ */ /* | | */ /* | | */ /* | | z */ /* | | */ /* */ /* p=1 */ /* */ Eblock ERep Test(IZNE(Cmodule(z_produit_courant))) Bblock Cforme_lineaire(z_produit_courant,MUL2(DOUB(indice_k),SOUS(DOUB(indice_k),UN)),z_produit_courant,FZERO); Cinitialisation(z_terme_courant,Bernoulli_2k,I0_Complexe); Cquotient(z_terme_courant,z_terme_courant,z_produit_courant); /* Calcul de : */ /* */ /* */ /* B */ /* 2k */ /* --------------- */ /* 2k-1 */ /* 2k(2k-1)z */ /* */ /* */ Eblock ATes Bblock Cinitialisation(z_terme_courant,F_PETIT_INFINI,F_PETIT_INFINI); /* Cas d'une division par (0,0)... */ Eblock ETes Csomme(log_de_fFCfamma_sommation_Euler_MacLaurin_____valeur ,log_de_fFCfamma_sommation_Euler_MacLaurin_____valeur,z_terme_courant ); /* Cumul dans l'approximation du logarithme de 'famma(z+n)'. */ Test(IFET(IFGT(indice_k,nombre_V) ,IFLE(Cmodule(z_terme_courant) ,fFCfamma_sommation_Euler_MacLaurin_____precision_du_calcul ) ) ) /* On considere que l'erreur commise est de l'ordre du terme courant... */ Bblock EGAL(continuer_l_approximation_de_la_fonction_famma,FAUX); /* Des que la precision est atteinte, on arrete d'iterer... */ Eblock ATes Bblock INCR(indice_k,I); /* Tant que la precision n'est pas atteinte, on itere... */ Eblock ETes Eblock ETan Cexponentielle(fFCfamma_sommation_Euler_MacLaurin_____valeur,EN,log_de_fFCfamma_sommation_Euler_MacLaurin_____valeur); /* Et enfin, calcul de 'famma(z+n)' par exponentiation de son logarithme... */ Cquotient(fFCfamma_sommation_Euler_MacLaurin_____valeur ,fFCfamma_sommation_Euler_MacLaurin_____valeur ,z_diviseur_final_de_fFCfamma_sommation_Euler_MacLaurin ); /* Et calcul final de 'famma(z)' en utilisant l'equation fonctionnelle : */ /* */ /* famma(z+n) */ /* famma(z) = --------------------- */ /* (z+1).(z+2)...(z+n) */ /* */ Test(IL_FAUT(fFCfamma_sommation_Euler_MacLaurin_____editer_les_parametres_de_calcul)) Bblock CAL3(Prme4("Le calcul de la fonction 'famma(%+.^^^,%+.^^^)=(%+.^^^,%+.^^^)' a ete fait avec :\n" ,Reelle(z) ,Imaginaire(z) ,Reelle(fFCfamma_sommation_Euler_MacLaurin_____valeur) ,Imaginaire(fFCfamma_sommation_Euler_MacLaurin_____valeur) ) ); /* Edition completee le 20240625171035... */ CAL3(Prme1("V=%d\n",nombre_V)); CAL3(Prme1("k=%d\n",indice_k)); Eblock ATes Bblock Eblock ETes Eblock ETes RETU(fFCfamma_sommation_Euler_MacLaurin_____valeur); Eblock #undef SEUIL_DE_DIVERGENCE_DE_LA_SOMMATION_DE_LA_FONCTION_fFCfamma_sommation_Euler_MacLaurin #undef VALEUR_MINIMALE_DE_indice_k_LORS_DU_CALCUL_DE_LA_FONCTION_fFCfamma_sommation_Euler_MacLaurin EFonctionJ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A P P R O X I M A T I O N D E L A F O N C T I O N ' gamma ' : */ /* */ /* */ /* Definition : */ /* */ /* La fonction 'gamma' est definie */ /* dans le plan Complexe par : */ /* */ /* gamma(z) = famma(z-1) */ /* */ /* avec, en particulier : */ /* */ /* gamma(n) = (n-1)! */ /* */ /* pour 'n' entier positif... */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionJ DEFV(Common,DEFV(complexe,fFCgamma_sommation_Euler_MacLaurin_____valeur)); /* Nombre complexe resultat. On notera qu'il est mis en 'Common' afin de pouvoir etre */ /* renvoye "directement" sans utiliser le 'RETU(...)'. En effet, a cause de la programmation */ /* de 'FCegal(...)' ('v $ximcd/operator$FON FCegal'), lorsque le nombre Argument 'z1' est */ /* une fonction, celle-ci est appelee deux fois : la premiere pour 'Reelle(...)' et la */ /* seconde pour Imaginaire(...)'. La definition en 'Common' autorise la recuperation directe */ /* du resultat... */ DEFV(Common,DEFV(Float,SINT(fFCgamma_sommation_Euler_MacLaurin_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFCgamma_sommation_Euler_MacLaurin_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCgamma_sommation_Euler_MacLaurin_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCgamma_sommation_Euler_MacLaurin_____Hdelta,FU))); /* Arguments "Homographiques" introduits le 20091021154607, la valeur par defaut */ /* garantissant la compatibilite anterieure... */ DEFV(Common,DEFV(FonctionJ,fFCgamma_sommation_Euler_MacLaurin(z))) DEFV(Argument,DEFV(complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'gamma(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(complexe,z_moins_un); /* Nombres complexes de manoeuvre. */ /*..............................................................................................................................*/ Cforme_lineaire(z_moins_un,FU,z,NEGA(FU)); CALS(fFCfamma_sommation_Euler_MacLaurin(z_moins_un)); Cegal(fFCgamma_sommation_Euler_MacLaurin_____valeur,fFCfamma_sommation_Euler_MacLaurin_____valeur); /* Calcul de 'famma(z-1)'. */ RETU(fFCgamma_sommation_Euler_MacLaurin_____valeur); Eblock EFonctionJ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A P P R O X I M A T I O N D E L A F O N C T I O N ' zeta ' */ /* A L ' A I D E D E S O N P R O L O N G E M E N T A N A L Y T I Q U E : */ /* */ /* */ /* Definition : */ /* */ /* La fonction 'zeta' est definie */ /* dans le plan Complexe par : */ /* */ /* n=+infini */ /* _______ */ /* \ */ /* \ -z */ /* zeta(z) = / n */ /* /______ */ /* */ /* n=1 */ /* */ /* Malheureusement, cette serie ne converge que pour : */ /* */ /* Reelle(z) > 1 */ /* */ /* Il est possible de faire un prolongement */ /* analytique qui converge "partout" en ecrivant */ /* (d'apres 'RIEMANN'S ZETA FUNCTION de H.M Edwards, */ /* Academic Press, New-York, 1974, reference BCX PAM-AC58, */ /* page 114) : */ /* */ /* n=N-1 */ /* _______ */ /* \ */ /* \ -z */ /* zeta(z) = / n */ /* /______ */ /* */ /* n=1 */ /* */ /* 1-z -z */ /* N N */ /* + ------ + ----- */ /* z-1 2 */ /* */ /* k=V p=2k-2 */ /* _______ ________ */ /* \ B | | */ /* \ 2k -z-(2k)+1 | | */ /* + / [-------.N | | (z+p)] */ /* /______ (2k)! | | */ /* */ /* k=1 p=0 */ /* */ /* + epsilon(z,N,V) */ /* */ /* a condition de choisir : */ /* */ /* N ~ |z| */ /* */ /* et 'V' tel que : */ /* */ /* Reelle(z+2V+1) > 1 */ /* */ /* soit : */ /* */ /* V >= MAX2(1,-Reelle(z)/2) */ /* */ /* Enfin, 'epsilon' sera neglige. Au passage, il */ /* s'agit de la methode de sommation de Euler-Maclaurin. */ /* */ /* */ /* Pour les 'z' tels que 'Reelle(z) est negatif, */ /* on utilisera l'equation fonctionnelle : */ /* */ /* z-1 z.p */ /* zeta(z) = famma(-z)(2.p) 2.sin(-----)zeta(1-z) */ /* 2 */ /* */ /* afin d'eviter des instabilites numeriques... */ /* */ /* */ /* 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. On n'oubliera */ /* pas la propriete : */ /* */ /* --- --------- */ /* zeta( z ) = zeta(z) */ /* */ /* qui implique que si 'z' est un zero, le conjugue */ /* de 'z' est un zero, son conjugue l'est aussi... */ /* */ /* */ /* 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... */ /* */ /* zeta(-1) = -1/12 d'ou : 1+2+3+4+... = -1/12 (Ramanujan, 1910) */ /* */ /* ce qui va permettre de faire des tests de */ /* validite... */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionJ DEFV(Common,DEFV(Float,SINT(fFCzeta_sommation_Euler_MacLaurin_____precision_du_calcul,PARE(1.0e-3)))); /* Precision demandee pour calculer la fonction 'zeta'. ATTENTION, une valeur plus petite */ /* de la precision cree des problemes lors des calculs de factorielles (explicitement */ /* dans 'factorielle_non_recursive_sans_validation(...)' ou de facon plus discrete lors */ /* de calculs de produits tel celui concernant '(z+p)'... */ DEFV(Common,DEFV(Positive,SINT(fFCzeta_sommation_Euler_MacLaurin_____time_out,MILLE))); /* Lors de la mise au point de 'v $xiirc/ZETA_21_IdM' sur '$LACT1A', il est apparu que pour */ /* X=786 et Y=439 le processus bouclait via 'continuer_l_approximation_de_la_fonction_zeta'. */ /* Un decompteur a donc ete introduit le 20240625121302 pour eviter cela... */ DEFV(Common,DEFV(Float,SINT(fFCzeta_sommation_Euler_MacLaurin_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFCzeta_sommation_Euler_MacLaurin_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCzeta_sommation_Euler_MacLaurin_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCzeta_sommation_Euler_MacLaurin_____Hdelta,FU))); /* Arguments "Homographiques" introduits le 20091021154607, la valeur par defaut */ /* garantissant la compatibilite anterieure... */ DEFV(Common,DEFV(Logical,SINT(fFCzeta_sommation_Euler_MacLaurin_____editer_les_parametres_de_calcul,FAUX))); /* Pour editer eventuellement {N,V,k}. */ #define VALEUR_MINIMALE_DE_indice_n_LORS_DU_CALCUL_DE_LA_FONCTION_fFCzeta_sommation_Euler_MacLaurin \ UN \ /* Valeur initiale de l'indice 'n'... */ DEFV(Common,DEFV(Int,SINT(fFCzeta_sommation_Euler_MacLaurin_____valeur_minimale_de_nombre_N_lors_du_calcul ,VALEUR_MINIMALE_DE_indice_n_LORS_DU_CALCUL_DE_LA_FONCTION_fFCzeta_sommation_Euler_MacLaurin ) ) ); DEFV(Common,DEFV(Int,SINT(fFCzeta_sommation_Euler_MacLaurin_____valeur_maximale_de_nombre_N_lors_du_calcul ,INFINI ) ) ); /* Afin de borner la valeur de 'N'. Ce dispositif est essentiel dans le cas ou la fonction */ /* 'fFCfamma_sommation_Euler_MacLaurin(...)' est appelee plusieurs fois de suite dans un */ /* pave du plan Complexe ('v $xrc/gamma.21$K fFCfamma_sommation_Euler_MacLaurin') de facon */ /* a garantir que tous les calculs se font dans les memes conditions, assurant ainsi la */ /* "continuite"... */ DEFV(Common,DEFV(Int,SINT(fFCzeta_sommation_Euler_MacLaurin_____valeur_minimale_de_nombre_V_lors_du_calcul ,VALEUR_MINIMALE_DE_indice_n_LORS_DU_CALCUL_DE_LA_FONCTION_fFCzeta_sommation_Euler_MacLaurin ) ) ); DEFV(Common,DEFV(Int,SINT(fFCzeta_sommation_Euler_MacLaurin_____valeur_maximale_de_nombre_V_lors_du_calcul ,INFINI ) ) ); /* Afin de borner la valeur de 'V'. Ce dispositif est essentiel dans le cas ou la fonction */ /* 'fFCfamma_sommation_Euler_MacLaurin(...)' est appelee plusieurs fois de suite dans un */ /* pave du plan Complexe ('v $xrc/gamma.21$K fFCfamma_sommation_Euler_MacLaurin') de facon */ /* a garantir que tous les calculs se font dans les memes conditions, assurant ainsi la */ /* "continuite"... */ #define SEUIL_DE_DIVERGENCE_DU_CALCUL_DE_LA_FONCTION_fFCzeta_sommation_Euler_MacLaurin \ FZERO \ /* Seuil a tester par rapport a 'Reelle(z)'. On notera que 1 devrait suffir puisque l'on */ \ /* fait par la suite un test strictement superieur a cette constante, mais il semble qu'il */ \ /* vaille mieux etre prudent puisque l'on voit des ouvrages ou il est dit que cette formule */ \ /* vaut pour des "grands" z... */ DEFV(Common,DEFV(complexe,fFCzeta_sommation_Euler_MacLaurin_____valeur)); /* Nombre complexe resultat. On notera qu'il est mis en 'Common' afin de pouvoir etre */ /* renvoye "directement" sans utiliser le 'RETU(...)'. En effet, a cause de la programmation */ /* de 'FCegal(...)' ('v $ximcd/operator$FON FCegal'), lorsque le nombre Argument 'z1' est */ /* une fonction (et par exemple 'fFCzeta_sommation_Euler_MacLaurin(...)'), celle-ci est */ /* appelee deux fois : la premiere pour 'Reelle(...)' et la seconde pour Imaginaire(...)'. */ /* La definition en 'Common' autorise la recuperation directe du resultat... */ DEFV(Common,DEFV(FonctionJ,fFCzeta_sommation_Euler_MacLaurin(z))) DEFV(Argument,DEFV(complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'zeta(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IFLT(fFCzeta_sommation_Euler_MacLaurin_____valeur_maximale_de_nombre_N_lors_du_calcul ,fFCzeta_sommation_Euler_MacLaurin_____valeur_minimale_de_nombre_N_lors_du_calcul ) ) Bblock PRINT_ERREUR("la relation d'ordre entre les bornes de 'N' est incorrecte, elles sont donc permutees"); iSWAP(fFCzeta_sommation_Euler_MacLaurin_____valeur_maximale_de_nombre_N_lors_du_calcul ,fFCzeta_sommation_Euler_MacLaurin_____valeur_minimale_de_nombre_N_lors_du_calcul ); Eblock ATes Bblock Eblock ETes Test(IFLT(fFCzeta_sommation_Euler_MacLaurin_____valeur_maximale_de_nombre_V_lors_du_calcul ,fFCzeta_sommation_Euler_MacLaurin_____valeur_minimale_de_nombre_V_lors_du_calcul ) ) Bblock PRINT_ERREUR("la relation d'ordre entre les bornes de 'V' est incorrecte, elles sont donc permutees"); iSWAP(fFCzeta_sommation_Euler_MacLaurin_____valeur_maximale_de_nombre_V_lors_du_calcul ,fFCzeta_sommation_Euler_MacLaurin_____valeur_minimale_de_nombre_V_lors_du_calcul ); Eblock ATes Bblock Eblock ETes Test(CTestIFEQ(z,C_____nombre_complexe_p1__0)) /* Cas du pole (1,0) : */ Bblock Cinitialisation(fFCzeta_sommation_Euler_MacLaurin_____valeur,F_PETIT_INFINI,I0_Complexe); /* La valeur de 'zeta' est alors (infini,0). */ Eblock ATes Bblock DEFV(Int,INIT(nombre_N,UNDEF)); /* Definition du nombre 'N' en le majorant un petit peu, puis en le bornant... On notera */ /* la valeur minimale de 2 necessaire car la premiere somme que l'on fait va de 1 a N-1. */ DEFV(Int,INIT(nombre_V,UNDEF)); /* Definition du nombre 'V' en le majorant un petit peu, puis en le bornant... ATTENTION, */ /* 'VALEUR_MINIMALE_DE_indice_n_LORS_DU_CALCUL_DE_LA_FONCTION_fFCzeta_sommation_...' est */ /* utilise ici correctement... */ DEFV(Logical,INIT(continuer_l_approximation_de_la_fonction_zeta,VRAI)); DEFV(Positive,INIT(time_out_d_approximation_de_la_fonction_zeta,fFCzeta_sommation_Euler_MacLaurin_____time_out)); /* Indicateur de convergence... */ DEFV(Int,INIT(indice_n,VALEUR_MINIMALE_DE_indice_n_LORS_DU_CALCUL_DE_LA_FONCTION_fFCzeta_sommation_Euler_MacLaurin)); DEFV(Int,INIT(indice_k,VALEUR_MINIMALE_DE_indice_n_LORS_DU_CALCUL_DE_LA_FONCTION_fFCzeta_sommation_Euler_MacLaurin)); /* Indices de sommation de la fonction 'zeta'. */ DEFV(complexe,z_effectif); DEFV(complexe,z_multiplicateur_final_de_fFCzeta_sommation_Euler_MacLaurin); DEFV(complexe,moins_z); DEFV(complexe,z_moins_un); DEFV(complexe,un_moins_z); DEFV(complexe,z_monome_1); DEFV(complexe,z_monome_2); DEFV(complexe,z_terme_courant); /* Nombres complexes de manoeuvre. */ Cegal(z_multiplicateur_final_de_fFCzeta_sommation_Euler_MacLaurin,C_____nombre_complexe_p1__0); /* Le multiplicateur final de 'zeta(z)' sera a priori le nombre (1,0). */ Test(IFGE(Reelle(z),SEUIL_DE_DIVERGENCE_DU_CALCUL_DE_LA_FONCTION_fFCzeta_sommation_Euler_MacLaurin)) /* Il convient de prendre 'IFGE(...)' afin d'assurer un calcul correct a l'origine. */ Bblock Cegal(z_effectif,z); /* Dans le cas ou il n'y a pas de risque de divergences avec les 'Reelle(z)' negatifs, on */ /* calcule 'zeta(z)'. */ Eblock ATes Bblock DEFV(complexe,famma_de_moins_z); DEFV(complexe,deux_pi_puissance_z_moins_un); DEFV(complexe,z_pi_sur_2); DEFV(complexe,sinus_de_z_pi_sur_2); /* Nombres complexes de manoeuvre. */ Cforme_lineaire(z_effectif,NEGA(FU),z,FU); /* Pour eviter les divergences pour 'Reelle(z)' negatif, on va calculer 'zeta(1-z)', */ /* sachant que : */ /* */ /* z-1 z.p */ /* zeta(z) = famma(-z)(2.p) 2.sin(-----)zeta(1-z) */ /* 2 */ /* */ Cnegation(moins_z,z); /* Calcul de '-z'. */ CALS(fFCfamma_sommation_Euler_MacLaurin(moins_z)); Cegal(famma_de_moins_z,fFCfamma_sommation_Euler_MacLaurin_____valeur); /* Calcul de 'famma(-z)'. */ Cforme_lineaire(z_moins_un,NEUT(FU),z,NEGA(FU)); Cexponentielle(deux_pi_puissance_z_moins_un,CERCLE_TRIGONOMETRIQUE,z_moins_un); /* Calcul de '2.p' a la puissance 'z-1'. */ Cforme_lineaire(z_pi_sur_2,PI_SUR_2,z,FZERO); Csinus(sinus_de_z_pi_sur_2,z_pi_sur_2); /* Calcul de 'sinus(z.p/2)'. */ Cproduit(z_multiplicateur_final_de_fFCzeta_sommation_Euler_MacLaurin ,famma_de_moins_z ,z_multiplicateur_final_de_fFCzeta_sommation_Euler_MacLaurin ); Cproduit(z_multiplicateur_final_de_fFCzeta_sommation_Euler_MacLaurin ,deux_pi_puissance_z_moins_un ,z_multiplicateur_final_de_fFCzeta_sommation_Euler_MacLaurin ); Cproduit(z_multiplicateur_final_de_fFCzeta_sommation_Euler_MacLaurin ,sinus_de_z_pi_sur_2 ,z_multiplicateur_final_de_fFCzeta_sommation_Euler_MacLaurin ); Cforme_lineaire(z_multiplicateur_final_de_fFCzeta_sommation_Euler_MacLaurin ,FDEUX ,z_multiplicateur_final_de_fFCzeta_sommation_Euler_MacLaurin ,FZERO ); /* Calcul du multiplicateur final. */ Eblock ETes EGAL(nombre_N ,TRON(ADD2(INTE(Cmodule(z)),UN) ,MAX2(fFCzeta_sommation_Euler_MacLaurin_____valeur_minimale_de_nombre_N_lors_du_calcul ,ADD2(VALEUR_MINIMALE_DE_indice_n_LORS_DU_CALCUL_DE_LA_FONCTION_fFCzeta_sommation_Euler_MacLaurin ,UN ) ) ,fFCzeta_sommation_Euler_MacLaurin_____valeur_maximale_de_nombre_N_lors_du_calcul ) ); /* Definition du nombre 'N' en le majorant un petit peu, puis en le bornant... On notera */ /* la valeur minimale de 2 necessaire car la premiere somme que l'on fait va de 1 a N-1. */ EGAL(nombre_V ,TRON(ADD2(MAX2(UN,NEGA(ENTE(MOIT(Reelle(z))))),UN) ,MAX2(fFCzeta_sommation_Euler_MacLaurin_____valeur_minimale_de_nombre_V_lors_du_calcul ,VALEUR_MINIMALE_DE_indice_n_LORS_DU_CALCUL_DE_LA_FONCTION_fFCzeta_sommation_Euler_MacLaurin ) ,fFCzeta_sommation_Euler_MacLaurin_____valeur_maximale_de_nombre_V_lors_du_calcul ) ); /* Definition du nombre 'V' en le majorant un petit peu, puis en le bornant... ATTENTION, */ /* 'VALEUR_MINIMALE_DE_indice_n_LORS_DU_CALCUL_DE_LA_FONCTION_fFCzeta_sommation_...' est */ /* utilise ici correctement... */ Cegal(fFCzeta_sommation_Euler_MacLaurin_____valeur,C_____nombre_complexe__0__0); /* Initialisation du resultat avec (0+i0). */ Cnegation(moins_z,z_effectif); /* Calcul de '-z'. */ Cforme_lineaire(z_moins_un,NEUT(FU),z_effectif,NEGA(FU)); Cforme_lineaire(un_moins_z,NEGA(FU),z_effectif,NEUT(FU)); /* Calcul de 'z-1' et '1-z'. */ Repe(NBRE(VALEUR_MINIMALE_DE_indice_n_LORS_DU_CALCUL_DE_LA_FONCTION_fFCzeta_sommation_Euler_MacLaurin,SOUS(nombre_N,UN))) Bblock Cexponentielle(z_terme_courant,indice_n,moins_z); /* Calcul de : */ /* */ /* -z */ /* n */ /* */ Csomme(fFCzeta_sommation_Euler_MacLaurin_____valeur,fFCzeta_sommation_Euler_MacLaurin_____valeur,z_terme_courant); /* Et sommation... */ INCR(indice_n,I); /* Progression de l'indice d'iteration... */ Eblock ERep Cexponentielle(z_monome_1,nombre_N,un_moins_z); Cquotient(z_monome_1,z_monome_1,z_moins_un); /* Calcul du premier monome : */ /* */ /* 1-z */ /* N */ /* ------ */ /* z-1 */ /* */ Cexponentielle(z_monome_2,nombre_N,moins_z); Cforme_lineaire(z_monome_2,FDU,z_monome_2,FZERO); /* Calcul du second monome : */ /* */ /* -z */ /* N */ /* ----- */ /* 2 */ /* */ Csomme(fFCzeta_sommation_Euler_MacLaurin_____valeur,fFCzeta_sommation_Euler_MacLaurin_____valeur,z_monome_1); Csomme(fFCzeta_sommation_Euler_MacLaurin_____valeur,fFCzeta_sommation_Euler_MacLaurin_____valeur,z_monome_2); /* Et sommation... */ Tant(IL_FAUT(continuer_l_approximation_de_la_fonction_zeta)) Bblock DEFV(complexe,z_produit_courant); DEFV(complexe,moins_z_moins_2k_plus_un); DEFV(complexe,z_plus_2k_moins_un); /* Nombres complexes de manoeuvre. */ DEFV(Int,INIT(indice_p,ZERO)); /* Nombre 'p'. */ DEFV(Float,INIT(factorielle_2k,factorielle_non_recursive_sans_validation(DOUB(indice_k)))); /* Valeur de '(2k)!'. On notera qu'elle est calculee deux fois : une premiere fois dans */ /* 'nombre_de_Bernoulli(...)' et une deuxieme fois lors de l'appel explicite de */ /* 'factorielle_non_recursive_sans_validation(...)'. */ /* */ /* Mais plus grave, ce double calcul ne sert a rien car en effet, '(2k)!' sert une premiere */ /* fois en numerateur lors du calcul de 'B(2k)', puis divise (donc en denominateur) 'B(2k)' */ /* lui-meme lors de la somme en 'k'. On pourrait donc simplifier en ne la mettant pas, */ /* mais c'est plus correct mathematiquement avec... */ /* */ /* Le 20000316152326 j'ai esaye d'arranger cela en rendant facultative cette multiplication */ /* puis cette division par '(2k)!' mais cela ne fait pas disparaitre le probleme lie au */ /* calcul iteratif du produit 'PI(z+p)' ci-apres qui pose le meme probleme. J'ai donc */ /* supprime cette possibilite (finalement assez dangereuse..). */ DEFV(Float,INIT(Bernoulli_2k,calcul_du_nombre_de_Bernoulli_B2k(indice_k))); /* Valeur du nombre de Bernoulli 'B(2k)'. */ Cegal(z_produit_courant,C_____nombre_complexe_p1__0); /* Initialisation du produit courant avec le nombre complexe (1,0). */ Repe(NBRE(ZERO,DOUB(SOUS(indice_k,UN)))) Bblock DEFV(complexe,z_plus_p); Cforme_lineaire(z_plus_p,FU,z_effectif,FLOT(indice_p)); /* Calcul de 'z+p'. */ Cproduit(z_produit_courant,z_produit_courant,z_plus_p); /* Calcul de : */ /* */ /* p=2k-2 */ /* ________ */ /* | | */ /* | | */ /* | | (z+p) */ /* | | */ /* */ /* p=0 */ /* */ INCR(indice_p,I); /* Progression de l'indice d'iteration... */ Eblock ERep Cforme_lineaire(moins_z_moins_2k_plus_un,NEGA(FU),z_effectif,FLOT(ADD2(NEGA(DOUB(indice_k)),UN))); /* Calcul de '-z-2k+1'. */ Cexponentielle(z_terme_courant,nombre_N,moins_z_moins_2k_plus_un); /* Calcul de : */ /* */ /* -z-2k+1 */ /* N */ /* */ Cproduit(z_terme_courant,z_produit_courant,z_terme_courant); Cforme_lineaire(z_terme_courant,DIVI(Bernoulli_2k,factorielle_2k),z_terme_courant,FZERO); /* Calcul de : */ /* */ /* i=2k-2 */ /* ________ */ /* B | | */ /* 2k -z-(2k)+1 | | */ /* -------.N | | (z+i) */ /* (2k)! | | */ /* */ /* i=0 */ /* */ Csomme(fFCzeta_sommation_Euler_MacLaurin_____valeur,fFCzeta_sommation_Euler_MacLaurin_____valeur,z_terme_courant); /* Et sommation... */ Cforme_lineaire(z_plus_2k_moins_un,NEUT(FU),z_effectif,FLOT(SOUS(DOUB(indice_k),UN))); /* Calcul de 'z+2k-1'. */ Test(IFOU(IZEQ(time_out_d_approximation_de_la_fonction_zeta) ,IFET(IFGT(indice_k,nombre_V) ,IFLE(SCAL(Cmodule(z_terme_courant) ,ABSO(Reelle(z_plus_2k_moins_un)) ,Cmodule(z_plus_2k_moins_un) ) ,fFCzeta_sommation_Euler_MacLaurin_____precision_du_calcul ) ) ) ) /* On considere que l'erreur commise est de l'ordre du terme courant (module par le */ /* module de 'z_plus_2k_moins_un' a quelque chose pres...). */ Bblock DEFV(IntFloat,Verification_de_____fFCzeta_sommation_Euler_MacLaurin_____Rvaleur); DEFV(IntFloat,Verification_de_____fFCzeta_sommation_Euler_MacLaurin_____Ivaleur); EGAL(Equivalence_IntFloat_FloaT(Verification_de_____fFCzeta_sommation_Euler_MacLaurin_____Rvaleur) ,Reelle(fFCzeta_sommation_Euler_MacLaurin_____valeur) ); EGAL(Equivalence_IntFloat_FloaT(Verification_de_____fFCzeta_sommation_Euler_MacLaurin_____Ivaleur) ,Imaginaire(fFCzeta_sommation_Euler_MacLaurin_____valeur) ); Test(IFOU(IFEQ(Equivalence_IntFloat_InT(Verification_de_____fFCzeta_sommation_Euler_MacLaurin_____Rvaleur) ,NAN_VALEUR_INDETERMINEE ) ,IFEQ(Equivalence_IntFloat_InT(Verification_de_____fFCzeta_sommation_Euler_MacLaurin_____Ivaleur) ,NAN_VALEUR_INDETERMINEE ) ) ) Bblock PRINT_ERREUR("le calcul de 'zeta/Euler/MacLaurin' conduit a une ou des valeurs indeterminees"); CAL1(Prer2("(le decompteur de 'time-out' vaut %d/%d)\n" ,time_out_d_approximation_de_la_fonction_zeta ,fFCzeta_sommation_Euler_MacLaurin_____time_out ) ); Eblock ATes Bblock Eblock ETes EGAL(continuer_l_approximation_de_la_fonction_zeta,FAUX); /* Des que la precision est atteinte, on arrete d'iterer... */ Eblock ATes Bblock INCR(indice_k,I); /* Tant que la precision n'est pas atteinte, on itere... */ DECR(time_out_d_approximation_de_la_fonction_zeta,I); /* Pour eviter des bouclages a l'infini... */ Eblock ETes Eblock ETan Cproduit(fFCzeta_sommation_Euler_MacLaurin_____valeur ,z_multiplicateur_final_de_fFCzeta_sommation_Euler_MacLaurin ,fFCzeta_sommation_Euler_MacLaurin_____valeur ); /* Et calcul final de 'zeta(z)' en utilisant l'equation fonctionnelle : */ /* */ /* z-1 z.p */ /* zeta(z) = famma(-z)(2.p) 2.sin(-----)zeta(1-z) */ /* 2 */ /* */ Test(IL_FAUT(fFCzeta_sommation_Euler_MacLaurin_____editer_les_parametres_de_calcul)) Bblock CAL3(Prme4("Le calcul de la fonction 'zeta(%+.^^^,%+.^^^)=(%+.^^^,%+.^^^)' a ete fait avec :\n" ,Reelle(z) ,Imaginaire(z) ,Reelle(fFCzeta_sommation_Euler_MacLaurin_____valeur) ,Imaginaire(fFCzeta_sommation_Euler_MacLaurin_____valeur) ) ); /* Edition completee le 20240625171035... */ /* Le 20060105091338, le format "16g" est passe a "^^g" pour plus de souplesse... */ /* */ /* Le 20091123122801, le format "^^g" est passe a "^^^" pour plus de souplesse... */ /* */ /* Edition completee le 20240625171035... */ CAL3(Prme1("N=%d\n",nombre_N)); CAL3(Prme1("V=%d\n",nombre_V)); CAL3(Prme1("k=%d\n",indice_k)); Eblock ATes Bblock Eblock ETes Eblock ETes RETU(fFCzeta_sommation_Euler_MacLaurin_____valeur); Eblock #undef SEUIL_DE_DIVERGENCE_DU_CALCUL_DE_LA_FONCTION_fFCzeta_sommation_Euler_MacLaurin #undef VALEUR_MINIMALE_DE_indice_n_LORS_DU_CALCUL_DE_LA_FONCTION_fFCzeta_sommation_Euler_MacLaurin EFonctionJ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A F O N C T I O N ' cos ' C I R C U L A I R E */ /* C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionJ DEFV(Common,DEFV(Logical,SINT(fFCcosinus_circulaire_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210208174211... */ DEFV(Common,DEFV(Float,SINT(FgCserie_cosinus_____C_____exposant,FU))); /* Introduit le 20210217163925... */ DEFV(Common,DEFV(complexe,INIS(FgCserie_cosinus_____C_____nombre_complexe__0__0 ,DEFINITION_DE__C_____nombre_complexe__0__0 ) ) ); DEFV(Common,DEFV(complexe,fFCcosinus_circulaire_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFCcosinus_circulaire_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFCcosinus_circulaire_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCcosinus_circulaire_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCcosinus_circulaire_____Hdelta,FU))); /* Arguments "Homographiques" introduits le 20091021154607, la valeur par defaut */ /* garantissant la compatibilite anterieure... */ DEFV(Common,DEFV(FonctionJ,fFCcosinus_circulaire(z))) DEFV(Argument,DEFV(complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'cosinus(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFCcosinus_circulaire_____utiliser_le_developpement_en_serie)) Bblock Cserie_cosinus(fFCcosinus_circulaire_____valeur,z); Eblock ATes Bblock Ccosinus(fFCcosinus_circulaire_____valeur,z); Eblock ETes RETU(fFCcosinus_circulaire_____valeur); Eblock EFonctionJ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A F O N C T I O N ' sin ' C I R C U L A I R E */ /* C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionJ DEFV(Common,DEFV(Logical,SINT(fFCsinus_circulaire_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210208174211... */ DEFV(Common,DEFV(Float,SINT(FgCserie_sinus_____C_____exposant,FU))); /* Introduit le 20210217163925... */ DEFV(Common,DEFV(complexe,INIS(FgCserie_sinus_____C_____nombre_complexe__0__0 ,DEFINITION_DE__C_____nombre_complexe__0__0 ) ) ); DEFV(Common,DEFV(complexe,fFCsinus_circulaire_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFCsinus_circulaire_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFCsinus_circulaire_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCsinus_circulaire_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCsinus_circulaire_____Hdelta,FU))); /* Arguments "Homographiques" introduits le 20091021154607, la valeur par defaut */ /* garantissant la compatibilite anterieure... */ DEFV(Common,DEFV(FonctionJ,fFCsinus_circulaire(z))) DEFV(Argument,DEFV(complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'sinus(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFCsinus_circulaire_____utiliser_le_developpement_en_serie)) Bblock Cserie_sinus(fFCsinus_circulaire_____valeur,z); Eblock ATes Bblock Csinus(fFCsinus_circulaire_____valeur,z); Eblock ETes RETU(fFCsinus_circulaire_____valeur); Eblock EFonctionJ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A F O N C T I O N ' tg ' C I R C U L A I R E */ /* C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionJ DEFV(Common,DEFV(Logical,SINT(fFCtangente_circulaire_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210209111749... */ DEFV(Common,DEFV(complexe,fFCtangente_circulaire_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFCtangente_circulaire_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFCtangente_circulaire_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCtangente_circulaire_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCtangente_circulaire_____Hdelta,FU))); /* Arguments "Homographiques" introduits le 20091021154607, la valeur par defaut */ /* garantissant la compatibilite anterieure... */ DEFV(Common,DEFV(FonctionJ,fFCtangente_circulaire(z))) DEFV(Argument,DEFV(complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'tangente(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFCtangente_circulaire_____utiliser_le_developpement_en_serie)) Bblock Cserie_tangente(fFCtangente_circulaire_____valeur,z); Eblock ATes Bblock Ctangente(fFCtangente_circulaire_____valeur,z); Eblock ETes RETU(fFCtangente_circulaire_____valeur); Eblock EFonctionJ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A F O N C T I O N ' ch ' H Y P E R B O L I Q U E */ /* C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionJ DEFV(Common,DEFV(Logical,SINT(fFCcosinus_hyperbolique_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210208174211... */ DEFV(Common,DEFV(Float,SINT(FgCserie_cosinus_hyperbolique_____C_____exposant,FU))); /* Introduit le 20210217163925... */ DEFV(Common,DEFV(complexe,INIS(FgCserie_cosinus_hyperbolique_____C_____nombre_complexe__0__0 ,DEFINITION_DE__C_____nombre_complexe__0__0 ) ) ); DEFV(Common,DEFV(complexe,fFCcosinus_hyperbolique_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFCcosinus_hyperbolique_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFCcosinus_hyperbolique_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCcosinus_hyperbolique_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCcosinus_hyperbolique_____Hdelta,FU))); /* Arguments "Homographiques" introduits le 20091021154607, la valeur par defaut */ /* garantissant la compatibilite anterieure... */ DEFV(Common,DEFV(FonctionJ,fFCcosinus_hyperbolique(z))) DEFV(Argument,DEFV(complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'ch(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFCcosinus_hyperbolique_____utiliser_le_developpement_en_serie)) Bblock Cserie_cosinus_hyperbolique(fFCcosinus_hyperbolique_____valeur,z); Eblock ATes Bblock Ccosinus_hyperbolique(fFCcosinus_hyperbolique_____valeur,z); Eblock ETes RETU(fFCcosinus_hyperbolique_____valeur); Eblock EFonctionJ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A F O N C T I O N ' sh ' H Y P E R B O L I Q U E */ /* C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionJ DEFV(Common,DEFV(Logical,SINT(fFCsinus_hyperbolique_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210208174211... */ DEFV(Common,DEFV(Float,SINT(FgCserie_sinus_hyperbolique_____C_____exposant,FU))); /* Introduit le 20210217163925... */ DEFV(Common,DEFV(complexe,INIS(FgCserie_sinus_hyperbolique_____C_____nombre_complexe__0__0 ,DEFINITION_DE__C_____nombre_complexe__0__0 ) ) ); DEFV(Common,DEFV(complexe,fFCsinus_hyperbolique_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFCsinus_hyperbolique_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFCsinus_hyperbolique_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCsinus_hyperbolique_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCsinus_hyperbolique_____Hdelta,FU))); /* Arguments "Homographiques" introduits le 20091021154607, la valeur par defaut */ /* garantissant la compatibilite anterieure... */ DEFV(Common,DEFV(FonctionJ,fFCsinus_hyperbolique(z))) DEFV(Argument,DEFV(complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'sh(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFCsinus_hyperbolique_____utiliser_le_developpement_en_serie)) Bblock Cserie_sinus_hyperbolique(fFCsinus_hyperbolique_____valeur,z); Eblock ATes Bblock Csinus_hyperbolique(fFCsinus_hyperbolique_____valeur,z); Eblock ETes RETU(fFCsinus_hyperbolique_____valeur); Eblock EFonctionJ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A F O N C T I O N ' th ' H Y P E R B O L I Q U E */ /* C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionJ DEFV(Common,DEFV(Logical,SINT(fFCtangente_hyperbolique_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210209111749... */ DEFV(Common,DEFV(complexe,fFCtangente_hyperbolique_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFCtangente_hyperbolique_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFCtangente_hyperbolique_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCtangente_hyperbolique_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCtangente_hyperbolique_____Hdelta,FU))); /* Arguments "Homographiques" introduits le 20091021154607, la valeur par defaut */ /* garantissant la compatibilite anterieure... */ DEFV(Common,DEFV(FonctionJ,fFCtangente_hyperbolique(z))) DEFV(Argument,DEFV(complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'th(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFCtangente_hyperbolique_____utiliser_le_developpement_en_serie)) Bblock Cserie_tangente_hyperbolique(fFCtangente_hyperbolique_____valeur,z); Eblock ATes Bblock Ctangente_hyperbolique(fFCtangente_hyperbolique_____valeur,z); Eblock ETes RETU(fFCtangente_hyperbolique_____valeur); Eblock EFonctionJ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E X P O N E N T I E L L E X ^ Z C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionJ DEFV(Common,DEFV(complexe,fFCexponentielle_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(FonctionJ,fFCexponentielle(base,z))) DEFV(Argument,DEFV(Float,base)); DEFV(Argument,DEFV(complexe,z)); /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ FCexponentielle(fFCexponentielle_____valeur,base,z); RETU(fFCexponentielle_____valeur); Eblock EFonctionJ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E X P O N E N T I E L L E e ^ Z C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionJ DEFV(Common,DEFV(complexe,fFCexponentielle_neperienne_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFCexponentielle_neperienne_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFCexponentielle_neperienne_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCexponentielle_neperienne_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFCexponentielle_neperienne_____Hdelta,FU))); /* Arguments "Homographiques" introduits le 20091021154607, la valeur par defaut */ /* garantissant la compatibilite anterieure... */ DEFV(Common,DEFV(FonctionJ,fFCexponentielle_neperienne(z))) /* Fonction introduite le 20090303145946... */ DEFV(Argument,DEFV(complexe,z)); /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ FCexponentielle(fFCexponentielle_neperienne_____valeur,EN,z); RETU(fFCexponentielle_neperienne_____valeur); Eblock 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(complexe,fFClogarithme_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFClogarithme_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFClogarithme_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFClogarithme_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFClogarithme_____Hdelta,FU))); /* Arguments "Homographiques" introduits le 20091021154607, la valeur par defaut */ /* garantissant la compatibilite anterieure... */ DEFV(Common,DEFV(FonctionJ,fFClogarithme(z))) DEFV(Argument,DEFV(complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'log(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Clogarithme(fFClogarithme_____valeur,z); RETU(fFClogarithme_____valeur); Eblock EFonctionJ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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_fonction_____ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_COMPLEXES)); /* Indicateur introduit le 20070129122544... */ #Aifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_COMPLEXES DEFV(Common,DEFV(Logical,_______VERSION__ximcf_fonction_____ARITHMETIQUE_DE_BASE_DANS_LES_NOMBRES_HYPER_COMPLEXES)); /* Indicateur introduit le 20070129132819... */ #Eifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_COMPLEXES _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A F O N C T I O N ' cos ' C I R C U L A I R E */ /* H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHJ DEFV(Common,DEFV(Logical,SINT(fFHCcosinus_circulaire_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210208174211... */ DEFV(Common,DEFV(Float,SINT(FgHCserie_cosinus_____HC_____exposant,FU))); /* Introduit le 20210217163925... */ DEFV(Common,DEFV(hyper_complexe,INIS(FgHCserie_cosinus_____HC_____quaternion__0__0__0__0 ,DEFINITION_DE__HC_____quaternion__0__0__0__0 ) ) ); DEFV(Common,DEFV(hyper_complexe,fFHCcosinus_circulaire_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFHCcosinus_circulaire_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFHCcosinus_circulaire_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHCcosinus_circulaire_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHCcosinus_circulaire_____Hdelta,FU))); /* Arguments "Homographiques"... */ DEFV(Common,DEFV(FonctionHJ,fFHCcosinus_circulaire(z))) /* Fonction introduite le 20090303145946... */ DEFV(Argument,DEFV(hyper_complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'cosinus(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFHCcosinus_circulaire_____utiliser_le_developpement_en_serie)) Bblock HCserie_cosinus(fFHCcosinus_circulaire_____valeur,z); Eblock ATes Bblock HCcosinus(fFHCcosinus_circulaire_____valeur,z); Eblock ETes RETU(fFHCcosinus_circulaire_____valeur); Eblock EFonctionHJ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A F O N C T I O N ' sin ' C I R C U L A I R E */ /* H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHJ DEFV(Common,DEFV(Logical,SINT(fFHCsinus_circulaire_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210208174211... */ DEFV(Common,DEFV(Float,SINT(FgHCserie_sinus_____HC_____exposant,FU))); /* Introduit le 20210217163925... */ DEFV(Common,DEFV(hyper_complexe,INIS(FgHCserie_sinus_____HC_____quaternion__0__0__0__0 ,DEFINITION_DE__HC_____quaternion__0__0__0__0 ) ) ); DEFV(Common,DEFV(hyper_complexe,fFHCsinus_circulaire_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFHCsinus_circulaire_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFHCsinus_circulaire_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHCsinus_circulaire_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHCsinus_circulaire_____Hdelta,FU))); /* Arguments "Homographiques"... */ DEFV(Common,DEFV(FonctionHJ,fFHCsinus_circulaire(z))) /* Fonction introduite le 20090303145946... */ DEFV(Argument,DEFV(hyper_complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'sinus(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFHCsinus_circulaire_____utiliser_le_developpement_en_serie)) Bblock HCserie_sinus(fFHCsinus_circulaire_____valeur,z); Eblock ATes Bblock HCsinus(fFHCsinus_circulaire_____valeur,z); Eblock ETes RETU(fFHCsinus_circulaire_____valeur); Eblock EFonctionHJ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A F O N C T I O N ' tg ' C I R C U L A I R E */ /* H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHJ DEFV(Common,DEFV(Logical,SINT(fFHCtangente_circulaire_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210209111749... */ DEFV(Common,DEFV(hyper_complexe,fFHCtangente_circulaire_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFHCtangente_circulaire_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFHCtangente_circulaire_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHCtangente_circulaire_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHCtangente_circulaire_____Hdelta,FU))); /* Arguments "Homographiques"... */ DEFV(Common,DEFV(FonctionHJ,fFHCtangente_circulaire(z))) /* Fonction introduite le 20090303145946... */ DEFV(Argument,DEFV(hyper_complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'tangente(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFHCtangente_circulaire_____utiliser_le_developpement_en_serie)) Bblock HCserie_tangente(fFHCtangente_circulaire_____valeur,z); Eblock ATes Bblock HCtangente(fFHCtangente_circulaire_____valeur,z); Eblock ETes RETU(fFHCtangente_circulaire_____valeur); Eblock 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 B O L I Q U E */ /* H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHJ DEFV(Common,DEFV(Logical,SINT(fFHCcosinus_hyperbolique_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210208174211... */ DEFV(Common,DEFV(Float,SINT(FgHCserie_cosinus_hyperbolique_____HC_____exposant,FU))); /* Introduit le 20210217163925... */ DEFV(Common,DEFV(hyper_complexe,INIS(FgHCserie_cosinus_hyperbolique_____HC_____quaternion__0__0__0__0 ,DEFINITION_DE__HC_____quaternion__0__0__0__0 ) ) ); DEFV(Common,DEFV(hyper_complexe,fFHCcosinus_hyperbolique_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFHCcosinus_hyperbolique_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFHCcosinus_hyperbolique_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHCcosinus_hyperbolique_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHCcosinus_hyperbolique_____Hdelta,FU))); /* Arguments "Homographiques"... */ DEFV(Common,DEFV(FonctionHJ,fFHCcosinus_hyperbolique(z))) /* Fonction introduite le 20090303145946... */ DEFV(Argument,DEFV(hyper_complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'ch(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFHCcosinus_hyperbolique_____utiliser_le_developpement_en_serie)) Bblock HCserie_cosinus_hyperbolique(fFHCcosinus_hyperbolique_____valeur,z); Eblock ATes Bblock HCcosinus_hyperbolique(fFHCcosinus_hyperbolique_____valeur,z); Eblock ETes RETU(fFHCcosinus_hyperbolique_____valeur); Eblock 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 B O L I Q U E */ /* H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHJ DEFV(Common,DEFV(Logical,SINT(fFHCsinus_hyperbolique_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210208174211... */ DEFV(Common,DEFV(Float,SINT(FgHCserie_sinus_hyperbolique_____HC_____exposant,FU))); /* Introduit le 20210217163925... */ DEFV(Common,DEFV(hyper_complexe,INIS(FgHCserie_sinus_hyperbolique_____HC_____quaternion__0__0__0__0 ,DEFINITION_DE__HC_____quaternion__0__0__0__0 ) ) ); DEFV(Common,DEFV(hyper_complexe,fFHCsinus_hyperbolique_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFHCsinus_hyperbolique_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFHCsinus_hyperbolique_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHCsinus_hyperbolique_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHCsinus_hyperbolique_____Hdelta,FU))); /* Arguments "Homographiques"... */ DEFV(Common,DEFV(FonctionHJ,fFHCsinus_hyperbolique(z))) /* Fonction introduite le 20090303145946... */ DEFV(Argument,DEFV(hyper_complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'sh(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFHCsinus_hyperbolique_____utiliser_le_developpement_en_serie)) Bblock HCserie_sinus_hyperbolique(fFHCsinus_hyperbolique_____valeur,z); Eblock ATes Bblock HCsinus_hyperbolique(fFHCsinus_hyperbolique_____valeur,z); Eblock ETes RETU(fFHCsinus_hyperbolique_____valeur); Eblock 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 B O L I Q U E */ /* H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHJ DEFV(Common,DEFV(Logical,SINT(fFHCtangente_hyperbolique_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210209111749... */ DEFV(Common,DEFV(hyper_complexe,fFHCtangente_hyperbolique_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFHCtangente_hyperbolique_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFHCtangente_hyperbolique_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHCtangente_hyperbolique_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHCtangente_hyperbolique_____Hdelta,FU))); /* Arguments "Homographiques"... */ DEFV(Common,DEFV(FonctionHJ,fFHCtangente_hyperbolique(z))) /* Fonction introduite le 20090303145946... */ DEFV(Argument,DEFV(hyper_complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'th(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFHCtangente_hyperbolique_____utiliser_le_developpement_en_serie)) Bblock HCserie_tangente_hyperbolique(fFHCtangente_hyperbolique_____valeur,z); Eblock ATes Bblock HCtangente_hyperbolique(fFHCtangente_hyperbolique_____valeur,z); Eblock ETes RETU(fFHCtangente_hyperbolique_____valeur); Eblock EFonctionHJ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E X P O N E N T I E L L E X ^ Z H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHJ DEFV(Common,DEFV(hyper_complexe,fFHCexponentielle_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(FonctionHJ,fFHCexponentielle(base,z))) /* Fonction introduite le 20090303145946... */ DEFV(Argument,DEFV(Float,base)); DEFV(Argument,DEFV(hyper_complexe,z)); /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ FHCexponentielle(fFHCexponentielle_____valeur,base,z); RETU(fFHCexponentielle_____valeur); Eblock EFonctionHJ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E X P O N E N T I E L L E e ^ Z H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHJ DEFV(Common,DEFV(hyper_complexe,fFHCexponentielle_neperienne_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFHCexponentielle_neperienne_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFHCexponentielle_neperienne_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHCexponentielle_neperienne_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHCexponentielle_neperienne_____Hdelta,FU))); /* Arguments "Homographiques"... */ DEFV(Common,DEFV(FonctionHJ,fFHCexponentielle_neperienne(z))) /* Fonction introduite le 20090303145946... */ DEFV(Argument,DEFV(hyper_complexe,z)); /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ FHCexponentielle(fFHCexponentielle_neperienne_____valeur,EN,z); RETU(fFHCexponentielle_neperienne_____valeur); Eblock 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,DEFV(hyper_complexe,fFHClogarithme_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFHClogarithme_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFHClogarithme_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHClogarithme_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHClogarithme_____Hdelta,FU))); /* Arguments "Homographiques"... */ DEFV(Common,DEFV(FonctionHJ,fFHClogarithme(z))) DEFV(Argument,DEFV(hyper_complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'log(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ HClogarithme(fFHClogarithme_____valeur,z); RETU(fFHClogarithme_____valeur); Eblock EFonctionHJ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 : */ /* */ /*************************************************************************************************************************************/ #ifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES DEFV(Common,DEFV(Logical,_______VERSION__ximcf_fonction_____ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES)); /* Indicateur introduit le 20111201103119... */ #Aifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES DEFV(Common,DEFV(Logical,_______VERSION__ximcf_fonction_____ARITHMETIQUE_DE_BASE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES)); /* Indicateur introduit le 20111201103119... */ #Eifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A F O N C T I O N ' cos ' C I R C U L A I R E */ /* H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHHJ DEFV(Common,DEFV(Logical,SINT(fFHHCcosinus_circulaire_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210208174211... */ DEFV(Common,DEFV(Float,SINT(FgHHCserie_cosinus_____HHC_____exposant,FU))); /* Introduit le 20210217163925... */ DEFV(Common,DEFV(hyper_hyper_complexe,INIS(FgHHCserie_cosinus_____HHC_____octonion__0__0__0__0__0__0__0__0 ,DEFINITION_DE__HHC_____octonion__0__0__0__0__0__0__0__0 ) ) ); DEFV(Common,DEFV(hyper_hyper_complexe,fFHHCcosinus_circulaire_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFHHCcosinus_circulaire_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFHHCcosinus_circulaire_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHHCcosinus_circulaire_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHHCcosinus_circulaire_____Hdelta,FU))); /* Arguments "Homographiques"... */ DEFV(Common,DEFV(FonctionHHJ,fFHHCcosinus_circulaire(z))) /* Fonction introduite le 20210206105728... */ DEFV(Argument,DEFV(hyper_hyper_complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'cosinus(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFHHCcosinus_circulaire_____utiliser_le_developpement_en_serie)) Bblock HHCserie_cosinus(fFHHCcosinus_circulaire_____valeur,z); Eblock ATes Bblock HHCcosinus(fFHHCcosinus_circulaire_____valeur,z); Eblock ETes RETU(fFHHCcosinus_circulaire_____valeur); Eblock EFonctionHHJ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A F O N C T I O N ' sin ' C I R C U L A I R E */ /* H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHHJ DEFV(Common,DEFV(Logical,SINT(fFHHCsinus_circulaire_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210208174211... */ DEFV(Common,DEFV(Float,SINT(FgHHCserie_sinus_____HHC_____exposant,FU))); /* Introduit le 20210217163925... */ DEFV(Common,DEFV(hyper_hyper_complexe,INIS(FgHHCserie_sinus_____HHC_____octonion__0__0__0__0__0__0__0__0 ,DEFINITION_DE__HHC_____octonion__0__0__0__0__0__0__0__0 ) ) ); DEFV(Common,DEFV(hyper_hyper_complexe,fFHHCsinus_circulaire_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFHHCsinus_circulaire_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFHHCsinus_circulaire_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHHCsinus_circulaire_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHHCsinus_circulaire_____Hdelta,FU))); /* Arguments "Homographiques"... */ DEFV(Common,DEFV(FonctionHHJ,fFHHCsinus_circulaire(z))) /* Fonction introduite le 20210206105728... */ DEFV(Argument,DEFV(hyper_hyper_complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'sinus(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFHHCsinus_circulaire_____utiliser_le_developpement_en_serie)) Bblock HHCserie_sinus(fFHHCsinus_circulaire_____valeur,z); Eblock ATes Bblock HHCsinus(fFHHCsinus_circulaire_____valeur,z); Eblock ETes RETU(fFHHCsinus_circulaire_____valeur); Eblock EFonctionHHJ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A F O N C T I O N ' tg ' C I R C U L A I R E */ /* H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHHJ DEFV(Common,DEFV(Logical,SINT(fFHHCtangente_circulaire_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210209111749... */ DEFV(Common,DEFV(hyper_hyper_complexe,fFHHCtangente_circulaire_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFHHCtangente_circulaire_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFHHCtangente_circulaire_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHHCtangente_circulaire_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHHCtangente_circulaire_____Hdelta,FU))); /* Arguments "Homographiques"... */ DEFV(Common,DEFV(FonctionHHJ,fFHHCtangente_circulaire(z))) /* Fonction introduite le 20210206105728... */ DEFV(Argument,DEFV(hyper_hyper_complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'tangente(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFHHCtangente_circulaire_____utiliser_le_developpement_en_serie)) Bblock HHCserie_tangente(fFHHCtangente_circulaire_____valeur,z); Eblock ATes Bblock HHCtangente(fFHHCtangente_circulaire_____valeur,z); Eblock ETes RETU(fFHHCtangente_circulaire_____valeur); Eblock 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 B O L I Q U E */ /* H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHHJ DEFV(Common,DEFV(Logical,SINT(fFHHCcosinus_hyperbolique_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210208174211... */ DEFV(Common,DEFV(Float,SINT(FgHHCserie_cosinus_hyperbolique_____HHC_____exposant,FU))); /* Introduit le 20210217163925... */ DEFV(Common,DEFV(hyper_hyper_complexe,INIS(FgHHCserie_cosinus_hyperbolique_____HHC_____octonion__0__0__0__0__0__0__0__0 ,DEFINITION_DE__HHC_____octonion__0__0__0__0__0__0__0__0 ) ) ); DEFV(Common,DEFV(hyper_hyper_complexe,fFHHCcosinus_hyperbolique_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFHHCcosinus_hyperbolique_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFHHCcosinus_hyperbolique_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHHCcosinus_hyperbolique_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHHCcosinus_hyperbolique_____Hdelta,FU))); /* Arguments "Homographiques"... */ DEFV(Common,DEFV(FonctionHHJ,fFHHCcosinus_hyperbolique(z))) /* Fonction introduite le 20210206105728... */ DEFV(Argument,DEFV(hyper_hyper_complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'ch(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFHHCcosinus_hyperbolique_____utiliser_le_developpement_en_serie)) Bblock HHCserie_cosinus_hyperbolique(fFHHCcosinus_hyperbolique_____valeur,z); Eblock ATes Bblock HHCcosinus_hyperbolique(fFHHCcosinus_hyperbolique_____valeur,z); Eblock ETes RETU(fFHHCcosinus_hyperbolique_____valeur); Eblock 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 B O L I Q U E */ /* H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHHJ DEFV(Common,DEFV(Logical,SINT(fFHHCsinus_hyperbolique_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210208174211... */ DEFV(Common,DEFV(Float,SINT(FgHHCserie_sinus_hyperbolique_____HHC_____exposant,FU))); /* Introduit le 20210217163925... */ DEFV(Common,DEFV(hyper_hyper_complexe,INIS(FgHHCserie_sinus_hyperbolique_____HHC_____octonion__0__0__0__0__0__0__0__0 ,DEFINITION_DE__HHC_____octonion__0__0__0__0__0__0__0__0 ) ) ); DEFV(Common,DEFV(hyper_hyper_complexe,fFHHCsinus_hyperbolique_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFHHCsinus_hyperbolique_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFHHCsinus_hyperbolique_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHHCsinus_hyperbolique_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHHCsinus_hyperbolique_____Hdelta,FU))); /* Arguments "Homographiques"... */ DEFV(Common,DEFV(FonctionHHJ,fFHHCsinus_hyperbolique(z))) /* Fonction introduite le 20210206105728... */ DEFV(Argument,DEFV(hyper_hyper_complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'sh(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFHHCsinus_hyperbolique_____utiliser_le_developpement_en_serie)) Bblock HHCserie_sinus_hyperbolique(fFHHCsinus_hyperbolique_____valeur,z); Eblock ATes Bblock HHCsinus_hyperbolique(fFHHCsinus_hyperbolique_____valeur,z); Eblock ETes RETU(fFHHCsinus_hyperbolique_____valeur); Eblock 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 B O L I Q U E */ /* H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHHJ DEFV(Common,DEFV(Logical,SINT(fFHHCtangente_hyperbolique_____utiliser_le_developpement_en_serie,FAUX))); /* Possibilite introduite le 20210209111749... */ DEFV(Common,DEFV(hyper_hyper_complexe,fFHHCtangente_hyperbolique_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFHHCtangente_hyperbolique_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFHHCtangente_hyperbolique_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHHCtangente_hyperbolique_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHHCtangente_hyperbolique_____Hdelta,FU))); /* Arguments "Homographiques"... */ DEFV(Common,DEFV(FonctionHHJ,fFHHCtangente_hyperbolique(z))) /* Fonction introduite le 20210206105728... */ DEFV(Argument,DEFV(hyper_hyper_complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'th(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(fFHHCtangente_hyperbolique_____utiliser_le_developpement_en_serie)) Bblock HHCserie_tangente_hyperbolique(fFHHCtangente_hyperbolique_____valeur,z); Eblock ATes Bblock HHCtangente_hyperbolique(fFHHCtangente_hyperbolique_____valeur,z); Eblock ETes RETU(fFHHCtangente_hyperbolique_____valeur); Eblock EFonctionHHJ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E X P O N E N T I E L L E X ^ Z H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHHJ DEFV(Common,DEFV(hyper_hyper_complexe,fFHHCexponentielle_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(FonctionHHJ,fFHHCexponentielle(base,z))) /* Fonction introduite le 20210206105728... */ DEFV(Argument,DEFV(Float,base)); DEFV(Argument,DEFV(hyper_hyper_complexe,z)); /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ FHHCexponentielle(fFHHCexponentielle_____valeur,base,z); RETU(fFHHCexponentielle_____valeur); Eblock EFonctionHHJ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E X P O N E N T I E L L E e ^ Z H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHHJ DEFV(Common,DEFV(hyper_hyper_complexe,fFHHCexponentielle_neperienne_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFHHCexponentielle_neperienne_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFHHCexponentielle_neperienne_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHHCexponentielle_neperienne_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHHCexponentielle_neperienne_____Hdelta,FU))); /* Arguments "Homographiques"... */ DEFV(Common,DEFV(FonctionHHJ,fFHHCexponentielle_neperienne(z))) /* Fonction introduite le 20090303145946... */ DEFV(Argument,DEFV(hyper_hyper_complexe,z)); /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ FHHCexponentielle(fFHHCexponentielle_neperienne_____valeur,EN,z); RETU(fFHHCexponentielle_neperienne_____valeur); Eblock 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,DEFV(hyper_hyper_complexe,fFHHClogarithme_____valeur)); /* Nombre complexe resultat. */ DEFV(Common,DEFV(Float,SINT(fFHHClogarithme_____Halpha,FU))); DEFV(Common,DEFV(Float,SINT(fFHHClogarithme_____Hbeta_,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHHClogarithme_____Hgamma,FZERO))); DEFV(Common,DEFV(Float,SINT(fFHHClogarithme_____Hdelta,FU))); /* Arguments "Homographiques"... */ DEFV(Common,DEFV(FonctionHHJ,fFHHClogarithme(z))) DEFV(Argument,DEFV(hyper_hyper_complexe,z)); /* Nombre complexe 'z' dont on veut calculer 'log(z)'. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ HHClogarithme(fFHHClogarithme_____valeur,z); RETU(fFHHClogarithme_____valeur); Eblock EFonctionHHJ _______________________________________________________________________________________________________________________________________