/*************************************************************************************************************************************/ /* */ /* O P E R A T I O N S E L E M E N T A I R E S S U R */ /* L E S N O M B R E S C O M P L E X E S , */ /* L E S N O M B R E S H Y P E R - C O M P L E X E S E T */ /* 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 */ /* S O U S F O R M E D E " D E F I N E " S : */ /* */ /* */ /* Definition : */ /* */ /* Dans ce fichier se trouvent les */ /* operations elementaires sur les */ /* nombres complexes, les nombres hyper-complexes */ /* et les nombres hyper-hyper-complexes, telles */ /* l'egalite et l'addition ; elles sont exprimees */ /* sous forme de "defines", ce qui donne de tres */ /* bonnes performances, mais un grand encombrement... */ /* */ /* */ /* Nota : */ /* */ /* Le 20061210104935, je tente d'expliquer la */ /* difference qui peut exister entre les couples */ /* de procedures du type (pour un certain operateur */ /* 'Coperateur(...)') : */ /* */ /* #define Coperateur(z,z1,...) \ */ /* Bblock \ */ /* FCoperateur(z,z1,...); \ */ /* Eblock */ /* #define FCoperateur(z,z1,...) \ */ /* Bblock \ */ /* UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_C \ */ /* (BLOC(FgCoperateur(z,z1,...);) \ */ /* ,FCoperateur_____utiliser_l_arithmetique_etendue \ */ /* ); \ */ /* Eblock */ /* #define FgCoperateur(z,z1,...) \ */ /* Bblock \ */ /* (...) \ */ /* Eblock */ /* */ /* L'analyse des differents fichiers qui les */ /* utilisent semblent indiquer les utilisations */ /* suivantes : */ /* */ /* FgCoperateur(...) --> $ximcd/operator$FON (utilisation locale et */ /* restreinte aux definitions */ /* des operateurs basiques), */ /* */ /* FCoperateur(...) --> $ximcd/operator$FON (utilisation locale pour */ /* la definition des operateurs */ /* non basiques et prend en */ /* compte l'extension eventuelle */ /* de l'arithmetique), */ /* */ /* Coperateur(...) --> tout autre fichier ('$DEF', '$FON', '$K',...). */ /* */ /* C'est en fait peu utile, mais restons-en la ; */ /* mais voila que ci-apres, cela a servi... */ /* */ /* Le 20070129095008 le niveau "fondamental" */ /* 'FgCoperateur(...)' fut introduit de facon a */ /* permettre l'introduction de l'arithmetique */ /* etendue, la ou cela est utile. Au passage, */ /* cela ne fut pas implemente pour les nombres */ /* hyper-hyper-complexes qui, en fait, ne servent */ /* pas et sont la juste en tant qu'exercice de */ /* style... */ /* */ /* */ /* Author of '$ximcd/operator$FON' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 19870000000000). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /* :Debut_listMN_DEFINITION_DES_OPERATEURS_DES_CORPS_CONSTRUITS_A_PARTIR_DE_R: */ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N G E N E R A L E D E S O P E R A T E U R S D A N S L E S */ /* C O R P S C O N S T R U I T S A P A R T I R D E S N O M B R E S R E E L S : */ /* */ /* */ /* Nota : */ /* */ /* Tous les operateurs arithmetiques dans */ /* un corps vont etre definis recursivement */ /* a partir de ceux du sous-corps grace auquel */ /* le corps est defini. Soient ainsi 'a', 'a1' */ /* et 'a2' des nombres Arguments dans le corps, */ /* et 'r' le Resultat d'une certaine operation */ /* concernant ces Arguments ; soit d'autre part */ /* 'R(...)' et 'I(...)' les fonctions d'acces */ /* aux parties Reelle et Imaginaire generalisees */ /* definissant un nombre quelconque du corps en */ /* tant que vecteur compose de deux nombres du */ /* sous corps. */ /* */ /* On a donc, par definition, pour tout nombre 'a' : */ /* */ /* a = {R(a),I(a)} */ /* */ /* 'a' appartenant a un certain corps K et */ /* 'R(a)' et 'I(a)' appartenant au "sous-corps" */ /* sK a partir duquel K est defini. */ /* */ /* De plus, tout nombre Reel 'x' est egal a */ /* son conjugue : */ /* */ /* _ */ /* x = x */ /* */ /* A partir de R (les nombres Reels) sera */ /* donc construit C (les nombres Complexes), */ /* qui lui-meme servira de base a Q (les */ /* Quaternions, appeles aussi HC [Hyper-Complexes]), */ /* qui lui-meme servira de base a O (les */ /* Octonions, appeles aussi HHC [Hyper-Hyper-Complexes]). */ /* */ /* */ /* Definition recursive des operateurs arithmetiques : */ /* */ /* r = a <==> {R(r),I(r)} = {R(a),I(a)} */ /* */ /* r = -a <==> {R(r),I(r)} = {-R(a),-I(a)} */ /* */ /* _ ____ */ /* r = a <==> {R(r),I(r)} = {R(a),-I(a)} */ /* */ /* r = a1 + a2 <==> {R(r),I(r)} = {R(a1)+R(a2),I(a1)+I(a2)} */ /* */ /* r = a1 - a2 <==> {R(r),I(r)} = {R(a1)-R(a2),I(a1)-I(a2)} */ /* */ /* r = (A.a1) + (B.a2) <==> {R(r),I(r)} = {[A.R(a1)]+[B.R(a2)],[A.I(a1)]+[B.I(a2)]} */ /* */ /* _____ _____ */ /* r = a1.a2 <==> {R(r),I(r)} = {[R(a1).R(a2)] - [I(a1).I(a2)],[R(a1).I(a2)] + [I(a1).R(a2)]} */ /* */ /* 2 2 2 2 */ /* |a| <==> |a| = |R(a)| + |I(a)| */ /* */ /* */ /* Exceptions au schema recursif : */ /* */ /* Malheureusement, echappent a ce schema, deux */ /* operateurs car, en effet, ils considerent chaque */ /* nombre du groupe, non pas comme un vecteur */ /* bidimensionnel dans le sous-groupe sous-jacent, */ /* mais comme un vecteur N-dimensionnel defini dans */ /* les nombres Reels. Ces operateurs d'exception */ /* sont : */ /* */ /* FH...Cinitialisation(...) */ /* FH...Cforme_lineaire(...) */ /* */ /* qui initialise et calcule une forme lineaire */ /* respectivement. D'une part le nombre d'arguments */ /* varient quand la dimension du groupe change, et */ /* d'autre part, en ce qui concerne le second, l'operation */ /* qu'il realise dissymetrise les differentes composantes, */ /* la premiere etant "scalee" et "translatee", alors que */ /* les suivantes ne sont que "scalees"... */ /* */ /* */ /*************************************************************************************************************************************/ /* :Fin_listMN_DEFINITION_DES_OPERATEURS_DES_CORPS_CONSTRUITS_A_PARTIR_DE_R: */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N G E N E R A L E D E L ' A F F E C T A T I O N D A N S L E S */ /* C O R P S C O N S T R U I T S A P A R T I R D E S N O M B R E S R E E L S : */ /* */ /*************************************************************************************************************************************/ #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FGegal(prefixe,corps,sous_corps,R,A,Preelle,Pimaginaire,egal) \ /* Definitions des arguments : */ \ /* */ \ /* prefixe : permet l'appel recursif de cette procedure, en prefixant le variables */ \ /* locales qui y sont definies (mais ATTENTION, 'prefixe' et 'corps' */ \ /* doivent etre places cote a cote pour garantir le bon fonctionnement */ \ /* de l'operateur '`' de concatenation...), */ \ /* corps : nom du corps dans lequel on definit l'affectation (par exemple, le */ \ /* corps des Quaternions), */ \ /* sous_corps : nom du sous-corps grace auquel l'affectation va etre definie (par */ \ /* exemple, le corps des Complexes), */ \ /* R : nom de l'element Resultat de l'affectation (R = A), */ \ /* A : nom de l'Argument, */ \ /* Preelle : definition de la fonction d'acces a la partie reelle generalisee d'un */ \ /* element du corps (par exemple 'dHReelle(...)'), */ \ /* Pimaginaire : definition de la fonction d'acces a la partie imaginaire generalisee */ \ /* d'un element du corps (par exemple 'dHImaginaire(...)'), */ \ /* egal : definition de la fonction d'affectation dans le sous-corps (par exemple */ \ /* 'Cegal(...)'). */ \ /* */ \ /* On notera qu'ici 'prefixe', 'corps' et 'sous_corps' sont inutiles dans cette procedure, */ \ /* mais conserves afin d'ameliorer la lisibilite, tout en garantissant la symetrie avec les */ \ /* procedures qui les utilisent... */ \ Bblock \ egal(Preelle(R),Preelle(A)); \ egal(Pimaginaire(R),Pimaginaire(A)); \ /* Decomposition-recomposition du resultat : */ \ /* */ \ /* {R(r),I(r)} = {R(a),I(a)} */ \ /* */ \ Eblock \ /* Definition generale de l'affectation d'un vecteur bidimensionnel defini dans un */ \ /* corps tel que celui des Complexes ou celui des Quaternions... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N G E N E R A L E D E L A N E G A T I O N D A N S L E S */ /* C O R P S C O N S T R U I T S A P A R T I R D E S N O M B R E S R E E L S : */ /* */ /*************************************************************************************************************************************/ #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FGnegation(prefixe,corps,sous_corps,R,A,Preelle,Pimaginaire,egal,negation) \ /* Definitions des arguments : */ \ /* */ \ /* prefixe : permet l'appel recursif de cette procedure, en prefixant le variables */ \ /* locales qui y sont definies (mais ATTENTION, 'prefixe' et 'corps' */ \ /* doivent etre places cote a cote pour garantir le bon fonctionnement */ \ /* de l'operateur '`' de concatenation...), */ \ /* corps : nom du corps dans lequel on definit l'affectation (par exemple, le */ \ /* corps des Quaternions), */ \ /* sous_corps : nom du sous-corps grace auquel l'affectation va etre definie (par */ \ /* exemple, le corps des Complexes), */ \ /* R : nom de l'element Resultat de l'affectation (R = A), */ \ /* A : nom de l'Argument, */ \ /* Preelle : definition de la fonction d'acces a la partie reelle generalisee d'un */ \ /* element du corps (par exemple 'dHReelle(...)'), */ \ /* Pimaginaire : definition de la fonction d'acces a la partie imaginaire generalisee */ \ /* d'un element du corps (par exemple 'dHImaginaire(...)'), */ \ /* egal : definition de la fonction d'affectation dans le sous-corps (par exemple */ \ /* 'Cegal(...)'), */ \ /* negation : definition de la negation dans le sous-corps (par exemple */ \ /* 'Cnegation(...)'). */ \ /* */ \ Bblock \ DEFV(sous_corps,prefixe`reel_A_inversee); \ /* Partie reelle generalisee de l'Argument 'A', mais inversee (en ce qui concerne les */ \ /* signes). */ \ DEFV(sous_corps,prefixe`imaginaire_A_inversee); \ /* Partie imaginaire generalisee de l'Argument 'A', mais inversee (en ce qui concerne les */ \ /* signes). */ \ \ negation(prefixe`reel_A_inversee,Preelle(A)); \ /* Calcul de : */ \ /* */ \ /* -R(a) */ \ /* */ \ negation(prefixe`imaginaire_A_inversee,Pimaginaire(A)); \ /* Calcul de : */ \ /* */ \ /* -I(a) */ \ /* */ \ egal(Preelle(R),prefixe`reel_A_inversee); \ egal(Pimaginaire(R),prefixe`imaginaire_A_inversee); \ /* Decomposition-recomposition du resultat : */ \ /* */ \ /* {R(r),I(r)} = {-R(a),-I(a)} */ \ /* */ \ Eblock \ /* Definition generale de la negation d'un vecteur bidimensionnel defini dans un */ \ /* corps tel que celui des Complexes ou celui des Quaternions... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N G E N E R A L E D E L A C O N J U G A I S O N D A N S L E S */ /* C O R P S C O N S T R U I T S A P A R T I R D E S N O M B R E S R E E L S : */ /* */ /*************************************************************************************************************************************/ #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FGconjugaison(prefixe,corps,sous_corps,R,A,Preelle,Pimaginaire,egal,conjugaison,negation) \ /* Definitions des arguments : */ \ /* */ \ /* prefixe : permet l'appel recursif de cette procedure, en prefixant le variables */ \ /* locales qui y sont definies (mais ATTENTION, 'prefixe' et 'corps' */ \ /* doivent etre places cote a cote pour garantir le bon fonctionnement */ \ /* de l'operateur '`' de concatenation...), */ \ /* corps : nom du corps dans lequel on definit l'affectation (par exemple, le */ \ /* corps des Quaternions), */ \ /* sous_corps : nom du sous-corps grace auquel l'affectation va etre definie (par */ \ /* exemple, le corps des Complexes), */ \ /* R : nom de l'element Resultat de l'affectation (R = A), */ \ /* A : nom de l'Argument, */ \ /* Preelle : definition de la fonction d'acces a la partie reelle generalisee d'un */ \ /* element du corps (par exemple 'dHReelle(...)'), */ \ /* Pimaginaire : definition de la fonction d'acces a la partie imaginaire generalisee */ \ /* d'un element du corps (par exemple 'dHImaginaire(...)'), */ \ /* egal : definition de la fonction d'affectation dans le sous-corps (par exemple */ \ /* 'Cegal(...)'), */ \ /* conjugaison : definition de la fonction de conjugaison dans le sous-corps (par exemple */ \ /* 'Cconjugaison(...)'), */ \ /* negation : definition de la negation dans le sous-corps (par exemple */ \ /* 'Cnegation(...)'). */ \ /* */ \ Bblock \ DEFV(sous_corps,prefixe`reel_A_barre); \ /* Conjugues de la partie reelle generalisee de l'Argument 'A'. */ \ DEFV(sous_corps,prefixe`imaginaire_A_inverse); \ /* Partie imaginaire generalisee de l'Argument 'A', mais inversee (en ce qui concerne les */ \ /* signes). */ \ \ conjugaison(prefixe`reel_A_barre,Preelle(A)); \ /* Calcul de : */ \ /* */ \ /* ---- */ \ /* R(a) */ \ /* */ \ negation(prefixe`imaginaire_A_inverse,Pimaginaire(A)); \ /* Calcul de : */ \ /* */ \ /* -I(a) */ \ /* */ \ egal(Preelle(R),prefixe`reel_A_barre); \ egal(Pimaginaire(R),prefixe`imaginaire_A_inverse); \ /* Decomposition-recomposition du resultat : */ \ /* */ \ /* ---- */ \ /* {R(r),I(r)} = {R(a),-I(a)} */ \ /* */ \ Eblock \ /* Definition generale de la conjugaison d'un vecteur bidimensionnel defini dans un */ \ /* corps tel que celui des Complexes ou celui des Quaternions... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N G E N E R A L E D E L A S O M M E D A N S L E S */ /* C O R P S C O N S T R U I T S A P A R T I R D E S N O M B R E S R E E L S : */ /* */ /*************************************************************************************************************************************/ #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FGsomme_difference(prefixe,corps,sous_corps,R,A1,A2,Preelle,Pimaginaire,somme) \ /* Definitions des arguments : */ \ /* */ \ /* prefixe : permet l'appel recursif de cette procedure, en prefixant le variables */ \ /* locales qui y sont definies (mais ATTENTION, 'prefixe' et 'corps' */ \ /* doivent etre places cote a cote pour garantir le bon fonctionnement */ \ /* de l'operateur '`' de concatenation...), */ \ /* corps : nom du corps dans lequel on definit la somme-difference (par exemple, le */ \ /* corps des Quaternions), */ \ /* sous_corps : nom du sous-corps grace auquel la somme-difference va etre definie (par */ \ /* exemple, le corps des Complexes), */ \ /* R : nom de l'element Resultat du produit (R = A1 + A2, ou R = A1 - A2), */ \ /* A1 : nom du premier Argument, */ \ /* A2 : nom du deuxieme Argument, */ \ /* Preelle : definition de la fonction d'acces a la partie reelle generalisee d'un */ \ /* element du corps (par exemple 'dHReelle(...)'), */ \ /* Pimaginaire : definition de la fonction d'acces a la partie imaginaire generalisee */ \ /* d'un element du corps (par exemple 'dHImaginaire(...)'), */ \ /* somme : definition de la fonction de somme-difference dans le sous-corps (par */ \ /* exemple 'Csomme(...)'). */ \ /* */ \ /* On notera qu'ici 'prefixe', 'corps' et 'sous_corps' sont inutiles dans cette procedure, */ \ /* mais conserves afin d'ameliorer la lisibilite, tout en garantissant la symetrie avec les */ \ /* procedures qui les utilisent... */ \ Bblock \ somme(Preelle(R),Preelle(A1),Preelle(A2)); \ somme(Pimaginaire(R),Pimaginaire(A1),Pimaginaire(A2)); \ /* Calcul de la somme par decomposition, puis recomposition : */ \ /* */ \ /* {R(r),I(r)} = {R(a1)+R(a2),I(a1)+I(a2)} */ \ /* */ \ /* {R(r),I(r)} = {R(a1)-R(a2),I(a1)-I(a2)} */ \ /* */ \ Eblock \ /* Definition generale de la somme de deux vecteurs bidimensionnels definis dans un corps */ \ /* tel que celui des Complexes ou celui des Quaternions... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N G E N E R A L E D E L ' I N T E R P O L A T I O N D A N S L E S */ /* C O R P S C O N S T R U I T S A P A R T I R D E S N O M B R E S R E E L S : */ /* */ /*************************************************************************************************************************************/ #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FGinterpolation(prefixe,corps,sous_corps,R,alpha,A1,beta,A2,Preelle,Pimaginaire,interpolation) \ /* Definitions des arguments : */ \ /* */ \ /* prefixe : permet l'appel recursif de cette procedure, en prefixant le variables */ \ /* locales qui y sont definies (mais ATTENTION, 'prefixe' et 'corps' */ \ /* doivent etre places cote a cote pour garantir le bon fonctionnement */ \ /* de l'operateur '`' de concatenation...), */ \ /* corps : nom du corps dans lequel on definit l'interpolation (par exemple, le */ \ /* corps des Quaternions), */ \ /* sous_corps : nom du sous-corps grace auquel l'interpolation va etre definie (par */ \ /* exemple, le corps des Complexes), */ \ /* R : nom de l'element Resultat de l'interpolation (R = alpha.A1 + beta.A2), */ \ /* alpha : nom du premier coefficient, */ \ /* A1 : nom du premier Argument, */ \ /* beta : nom du deuxieme coefficient, */ \ /* A2 : nom du deuxieme Argument, */ \ /* Preelle : definition de la fonction d'acces a la partie reelle generalisee d'un */ \ /* element du corps (par exemple 'dHReelle(...)'), */ \ /* Pimaginaire : definition de la fonction d'acces a la partie imaginaire generalisee */ \ /* d'un element du corps (par exemple 'dHImaginaire(...)'), */ \ /* interpolation : definition de la fonction d'interpolation dans le sous-corps (par */ \ /* exemple 'Cinterpolation(...)'). */ \ /* */ \ /* On notera qu'ici 'prefixe', 'corps' et 'sous_corps' sont inutiles dans cette procedure, */ \ /* mais conserves afin d'ameliorer la lisibilite, tout en garantissant la symetrie avec les */ \ /* procedures qui les utilisent... */ \ Bblock \ interpolation(Preelle(R),alpha,Preelle(A1),beta,Preelle(A2)); \ interpolation(Pimaginaire(R),alpha,Pimaginaire(A1),beta,Pimaginaire(A2)); \ /* Calcul de l'interpolation par decomposition, puis recomposition : */ \ /* */ \ /* {R(r),I(r)} = {[A.R(a1)]+[B.R(a2)],[A.I(a1)]+[B.I(a2)]} */ \ /* */ \ Eblock \ /* Definition generale de l'interpolation de deux vecteurs bidimensionnels definis dans un */ \ /* corps tel que celui des Complexes ou celui des Quaternions... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N G E N E R A L E D U P R O D U I T D A N S L E S */ /* C O R P S C O N S T R U I T S A P A R T I R D E S N O M B R E S R E E L S : */ /* */ /*************************************************************************************************************************************/ #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FGproduit(prefixe,corps,sous_corps,R,A1,A2,Preelle,Pimaginaire,egal,conjugaison,somme,difference,produit) \ /* Definitions des arguments : */ \ /* */ \ /* prefixe : permet l'appel recursif de cette procedure, en prefixant le variables */ \ /* locales qui y sont definies (mais ATTENTION, 'prefixe' et 'corps' */ \ /* doivent etre places cote a cote pour garantir le bon fonctionnement */ \ /* de l'operateur '`' de concatenation...), */ \ /* corps : nom du corps dans lequel on definit la multiplication (par exemple, le */ \ /* corps des Quaternions), */ \ /* sous_corps : nom du sous-corps grace auquel la multiplication va etre definie (par */ \ /* exemple, le corps des Complexes), */ \ /* R : nom de l'element Resultat du produit (R = A1.A2), */ \ /* A1 : nom du premier Argument, */ \ /* A2 : nom du deuxieme Argument, */ \ /* Preelle : definition de la fonction d'acces a la partie reelle generalisee d'un */ \ /* element du corps (par exemple 'dHReelle(...)'), */ \ /* Pimaginaire : definition de la fonction d'acces a la partie imaginaire generalisee */ \ /* d'un element du corps (par exemple 'dHImaginaire(...)'), */ \ /* egal : definition de la fonction d'affectation dans le sous-corps (par exemple */ \ /* 'Cegal(...)'), */ \ /* conjugaison : definition de la fonction de conjugaison d'un element du sous-corps */ \ /* (par exemple 'Cconjugaison(...)'), */ \ /* somme : definition de la fonction de somme dans le sous-corps (par exemple */ \ /* 'Csomme(...)'), */ \ /* difference : definition de la fonction de difference dans le sous-corps (par exemple */ \ /* 'Cdifference(...)'), */ \ /* produit : definition de la fonction de produit dans le sous-corps (par exemple */ \ /* 'Cproduit(...)'). */ \ /* */ \ Bblock \ DEFV(sous_corps,prefixe`reel_A1); \ DEFV(sous_corps,prefixe`imaginaire_A1); \ /* Parties reelle et imaginaire generalisees de l'Argument 'A1'. */ \ DEFV(sous_corps,prefixe`reel_A2); \ DEFV(sous_corps,prefixe`imaginaire_A2); \ /* Parties reelle et imaginaire generalisees de l'Argument 'A2'. */ \ \ DEFV(sous_corps,prefixe`reel_A2_barre); \ DEFV(sous_corps,prefixe`imaginaire_A2_barre); \ /* Conjugues de 'reel_A2' et de 'imaginaire_A2'. */ \ \ DEFV(sous_corps,prefixe`produit_1); \ DEFV(sous_corps,prefixe`produit_2); \ DEFV(sous_corps,prefixe`produit_3); \ DEFV(sous_corps,prefixe`produit_4); \ /* Definition de quatre produits intermediaires. */ \ \ DEFV(sous_corps,prefixe`somme_1); \ DEFV(sous_corps,prefixe`somme_2); \ /* Definition de deux sommes intermediaires. */ \ \ DEFV(corps,prefixe`R_intermediaire); \ /* Definition du Resultat final, mais temporaire au cas ou 'A1' et/ou 'A2' serait */ \ /* "confondu(s)" avec 'R' (introduit le 20181201164339...). */ \ /* */ \ /* Ceci a donc ete introduit tres tardivement et ce suite a des problemes rencontres avec */ \ /* 'v $xrc/Cfract_4D.11$K' (mais qui venaient d'ailleurs semble-t-il ; voir les commentaires */ \ /* du 20181203111509 ci-dessous)... */ \ /* */ \ /* En fait, je note le 20181203111509 que cette precaution est tres certainement inutile */ \ /* car, en effet, 'FGproduit(...)' lorsqu'il sera reference pour definir : */ \ /* */ \ /* FgHCproduit_theorique(...) */ \ /* FgHHCproduit_theorique(...) */ \ /* */ \ /* fera appel in fine a : */ \ /* */ \ /* FgCproduit(...) */ \ /* */ \ /* qui utilise une structure 'z_intermediaire'... */ \ \ egal(prefixe`reel_A1,Preelle(A1)); \ egal(prefixe`imaginaire_A1,Pimaginaire(A1)); \ /* Decomposition de l'argument 'A1' en ses parties reelle et imaginaire generalisees : */ \ /* */ \ /* R(a1) */ \ /* */ \ /* I(a1) */ \ /* */ \ egal(prefixe`reel_A2,Preelle(A2)); \ egal(prefixe`imaginaire_A2,Pimaginaire(A2)); \ /* Decomposition de l'argument 'A2' en ses parties reelle et imaginaire generalisees : */ \ /* */ \ /* R(a2) */ \ /* */ \ /* I(a2) */ \ /* */ \ \ conjugaison(prefixe`reel_A2_barre,prefixe`reel_A2); \ conjugaison(prefixe`imaginaire_A2_barre,prefixe`imaginaire_A2); \ /* Conjugaison de 'reel_A2' et de 'imaginaire_A2' : */ \ /* */ \ /* ----- */ \ /* R(a2) */ \ /* */ \ /* ----- */ \ /* I(a2) */ \ /* */ \ \ produit(prefixe`produit_1,prefixe`reel_A1,prefixe`reel_A2); \ /* Calcul de : */ \ /* */ \ /* R(a1).R(a2) */ \ /* */ \ produit(prefixe`produit_2,prefixe`imaginaire_A2_barre,prefixe`imaginaire_A1); \ /* Calcul de : */ \ /* */ \ /* ----- */ \ /* I(a2).I(a1) */ \ /* */ \ produit(prefixe`produit_3,prefixe`imaginaire_A2,prefixe`reel_A1); \ /* Calcul de : */ \ /* */ \ /* I(a2).R(a1) */ \ /* */ \ produit(prefixe`produit_4,prefixe`imaginaire_A1,prefixe`reel_A2_barre); \ /* Calcul de : */ \ /* */ \ /* ----- */ \ /* I(a1).R(a2) */ \ /* */ \ \ difference(prefixe`somme_1,prefixe`produit_1,prefixe`produit_2); \ /* Calcul de : */ \ /* */ \ /* ----- */ \ /* [R(a1).R(a2)] - [I(a2).I(a1)] */ \ /* */ \ somme(prefixe`somme_2,prefixe`produit_3,prefixe`produit_4); \ /* Calcul de : */ \ /* */ \ /* ----- */ \ /* [I(a2).R(a1)] + [I(a1).R(a2)] */ \ /* */ \ \ egal(Preelle(prefixe`R_intermediaire),prefixe`somme_1); \ egal(Pimaginaire(prefixe`R_intermediaire),prefixe`somme_2); \ /* Et recomposition du resultat : */ \ /* */ \ /* ----- ----- */ \ /* {R(r),I(r)} = {[R(a1).R(a2)] - [I(a2).I(a1)],[I(a2).R(a1)] + [I(a1).R(a2)]} */ \ /* */ \ egal(Preelle(R),Preelle(prefixe`R_intermediaire)); \ egal(Pimaginaire(R),Pimaginaire(prefixe`R_intermediaire)); \ /* Et enfin : Resultat final (introduit le 20181201164339...). */ \ Eblock \ /* Definition generale du produit de deux vecteurs bidimensionnels definis dans un corps */ \ /* tel que celui des Complexes ou celui des Quaternions... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N G E N E R A L E D E L A N O R M E D A N S L E S */ /* C O R P S C O N S T R U I T S A P A R T I R D E S N O M B R E S R E E L S : */ /* */ /*************************************************************************************************************************************/ #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FGmodule2(prefixe,corps,sous_corps,A,Preelle,Pimaginaire,norme) \ /* Definitions des arguments : */ \ /* */ \ /* prefixe : permet l'appel recursif de cette procedure, en prefixant le variables */ \ /* locales qui y sont definies (mais ATTENTION, 'prefixe' et 'corps' */ \ /* doivent etre places cote a cote pour garantir le bon fonctionnement */ \ /* de l'operateur '`' de concatenation...), */ \ /* corps : nom du corps dans lequel on definit la norme (par exemple, le */ \ /* corps des Quaternions), */ \ /* sous_corps : nom du sous-corps grace auquel la norme va etre definie (par */ \ /* exemple, le corps des Complexes), */ \ /* A : nom de l'Argument, */ \ /* Preelle : definition de la fonction d'acces a la partie reelle generalisee d'un */ \ /* element du corps (par exemple 'dHReelle(...)'), */ \ /* Pimaginaire : definition de la fonction d'acces a la partie imaginaire generalisee */ \ /* d'un element du corps (par exemple 'dHImaginaire(...)'), */ \ /* norme : definition de la fonction de norme dans le sous-corps (par exemple */ \ /* 'Cmodule2(...)'). */ \ /* */ \ /* On notera qu'ici 'prefixe', 'corps' et 'sous_corps' sont inutiles dans cette procedure, */ \ /* mais conserves afin d'ameliorer la lisibilite, tout en garantissant la symetrie avec les */ \ /* procedures qui les utilisent... */ \ ADD2(norme(Preelle(A)),norme(Pimaginaire(A))) \ /* Calcul de la norme par decomposition, puis recomposition : */ \ /* */ \ /* 2 2 2 */ \ /* |a| = |R(a)| + |I(a)| */ \ /* */ \ \ /* Definition generale de la norme d'un vecteur bidimensionnel defini dans un corps */ \ /* tel que celui des Complexes ou celui des Quaternions... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N G E N E R A L E D E S C O S I N U S E T S I N U S */ /* D E S T R I G O N O M E T R I E C I R C U L A I R E E T H Y P E R B O L I Q U E : */ /* */ /*************************************************************************************************************************************/ #define GENERER_UN_COSINUS \ VRAI #define GENERER_UN_SINUS__ \ NOTL(GENERER_UN_COSINUS) /* Indicateur de choix entre 'cos(...)' et 'sin(...)' : */ /* */ /* VRAI ==> cos(...) */ /* FAUX ==> sin(...) */ /* */ /* (parametre 'Cosinus' ci-apres). */ #define TRIGONOMETRIE_CIRCULAIRE__ \ NEGA(FU) #define TRIGONOMETRIE_HYPERBOLIQUE \ NEUT(FU) /* Indicateur de choix entre la Trigonometrie Circulaire et la Trigonometrie Hyperbolique : */ /* */ /* -1 ==> Circulaire (le signe est en bascule positif/negatif) */ /* +1 ==> Hyperbolique (le signe reste positif) */ /* */ /* (parametre 'Trigonometrie' ci-apres). */ #define INDICE_MINIMAL_D_UNE_SERIE_TRIGONOMETRIQUE \ ZERO #define INDICE_MAXIMAL_D_UNE_SERIE_TRIGONOMETRIQUE \ CALCUL_TERME_COURANT_SERIE_TRIGONOMETRIQUE_____indice_maximal_d_une_serie_trigonometrique #define CALCUL_TERME_COURANT_SERIE_TRIGONOMETRIQUE(serie,il_faut_calculer_terme_courant,Trigonometrie,type,egal,axpb,add2,puix,expos) \ /* Introduit le 20210211113827 pour simplifier 'GENERATION_SERIE_TRIGONOMETRIQUE(...)'... */ \ /* */ \ /* Le 20210217162119 furent introduits les arguments 'puix' et 'expos' afin de pouvoir */ \ /* se "rapprocher" de 'v $ximcf/iterations$FON aHHCpuissance.point_manoeuvre.suite_point'... */ \ Bblock \ Test(il_faut_calculer_terme_courant) \ Bblock \ DEFV(type,terme_courant_de_la_serie); \ DEFV(type,puissance_du_numerateur); \ \ Test(IFET(IFEQ(expos,FU) \ ,EST_VRAI(CALCUL_TERME_COURANT_SERIE_TRIGONOMETRIQUE_____une_puissance_unite_est_neutre) \ ) \ ) \ Bblock \ egal(puissance_du_numerateur,numerateur); \ /* Lorsque l'exposant 'expos' est egal a 1, on ne peut pas utiliser 'puix(...)' a cause des */ \ /* cas ou c'est le "produit non theorique" qui est utilise, auquel cas l'elevation a la */ \ /* puissance unite ne serait plus la fonction neutre... */ \ Eblock \ ATes \ Bblock \ puix(puissance_du_numerateur,numerateur,expos); \ Eblock \ ETes \ \ axpb(terme_courant_de_la_serie,MUL2(signe,INVE(denominateur)),puissance_du_numerateur,FZERO); \ add2(serie,serie,terme_courant_de_la_serie); \ EGAL(signe,MUL2(Trigonometrie,signe)); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock #define GENERATION_SERIE_TRIGONOMETRIQUE(serie,angle,Cosinus,Trigonometrie,type,egal,axpb,add2,puix,expos,produit,zero,un) \ /* Introduit le 20210208142631... */ \ Bblock \ DEFV(Int,INIT(indice_de_la_serie,UNDEF)); \ DEFV(type,numerateur); \ DEFV(Float,INIT(denominateur,FU)); \ DEFV(Int,INIT(signe,UN)); \ \ egal(serie,zero); \ egal(numerateur,un); \ \ DoIn(indice_de_la_serie,INDICE_MINIMAL_D_UNE_SERIE_TRIGONOMETRIQUE,INDICE_MAXIMAL_D_UNE_SERIE_TRIGONOMETRIQUE,I) \ /* ATTENTION : la valeur minimale de l'indice doit etre nulle... */ \ Bblock \ Test(EST_IMPAIR(indice_de_la_serie)) \ /* On notera que 'sin(...)' n'a que des puissances (et donc des indices) impaires... */ \ Bblock \ CALCUL_TERME_COURANT_SERIE_TRIGONOMETRIQUE(serie \ ,EST_FAUX(Cosinus) \ ,Trigonometrie \ ,type \ ,egal \ ,axpb \ ,add2 \ ,puix \ ,expos \ ); \ /* Cas du 'sin(...)' : */ \ Eblock \ ATes \ /* On notera que 'cos(...)' n'a que des puissances (et donc des indices) paires... */ \ Bblock \ CALCUL_TERME_COURANT_SERIE_TRIGONOMETRIQUE(serie \ ,EST_VRAI(Cosinus) \ ,Trigonometrie \ ,type \ ,egal \ ,axpb \ ,add2 \ ,puix \ ,expos \ ); \ /* Cas du 'cos(...)' : */ \ Eblock \ ETes \ \ produit(numerateur,numerateur,angle); \ /* Calcul iteratif de toutes les premieres puissances de 'angle' sachant qu'evidemment une */ \ /* sur deux est utilisee (les paires pour 'cos(...)' et les impaires pour 'sin(...)'). */ \ EGAL(denominateur,MUL2(SUCC(indice_de_la_serie),denominateur)); \ /* Calcul iteratif des factorielles... */ \ Eblock \ EDoI \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 : */ /* */ /*************************************************************************************************************************************/ /* Ceci a ete introduit le 20070129115950... */ #ifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_COMPLEXES # define UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_C(faire_de_l_arithmetique_etendue,sequence) \ Bblock \ USs_GooF______CONDITIONNEL \ (IFET(IL_FAUT(faire_de_l_arithmetique_etendue) \ ,EST_VRAI(C_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base) \ ) \ ,sequence \ ); \ /* Execution de la sequence argument avec l'arithmetique etendue si elle est disponible... */ \ Eblock #Aifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_COMPLEXES # define UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_C(faire_de_l_arithmetique_etendue,sequence) \ Bblock \ BLOC(sequence); \ /* Execution de la sequence argument avec l'arithmetique de base... */ \ Eblock #Eifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_COMPLEXES #define FCsomme_____utiliser_l_arithmetique_etendue \ FCsomme_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base_dans_C #define FCdifference_____utiliser_l_arithmetique_etendue \ FCdifference_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base_dans_C #define FCproduit_____utiliser_l_arithmetique_etendue \ FCproduit_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base_dans_C #define FCquotient_____utiliser_l_arithmetique_etendue \ FCquotient_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base_dans_C /* Definitions introduites le 20070130100534 pour raccourcir certaines lignes suivantes... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E D I T I O N D ' U N N O M B R E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define PRINT_DANS_C(titre,z) \ Bblock \ CAL3(Prme3("%s={%+.^^^,%+.^^^}\n",titre,Reelle(z),Imaginaire(z))); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N Z = ( R E E L L E , I M A G I N A I R E ) D ' U N N O M B R E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Cinitialisation(z,partie_reelle,partie_imaginaire) \ Bblock \ FCinitialisation(z,partie_reelle,partie_imaginaire); \ Eblock #define FCinitialisation(z,partie_reelle,partie_imaginaire) \ Bblock \ FgCinitialisation(z,partie_reelle,partie_imaginaire); \ Eblock #define bFgCinitialisation(z,partie_reelle,partie_imaginaire) \ Bblock \ EGAL(Reelle(z) \ ,partie_reelle \ ); \ EGAL(Imaginaire(z) \ ,partie_imaginaire \ ); \ Eblock \ /* Introduit le 20121102215336 pour simplifier 'FgCinitialisation(...)'. */ #define FgCinitialisation(z,partie_reelle,partie_imaginaire) \ Bblock \ DEFV(complexe,z_intermediaire_initialisation); \ /* Au cas ou il y aurait une dependance entre les Arguments et le Resultat (introduit */ \ /* le 20121102172614)... */ \ \ bFgCinitialisation(z_intermediaire_initialisation \ ,partie_reelle \ ,partie_imaginaire \ ); \ \ bFgCinitialisation(z \ ,Reelle(z_intermediaire_initialisation) \ ,Imaginaire(z_intermediaire_initialisation) \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N Z = ( M O D U L E , A R G U M E N T ) D ' U N N O M B R E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Cinitialisation_polaire(z,module,argument) \ Bblock \ FCinitialisation_polaire(z,module,argument); \ Eblock #define FCinitialisation_polaire(z,module,argument) \ Bblock \ FgCinitialisation_polaire(z,module,argument); \ Eblock #define FgCinitialisation_polaire(z,module,argument) \ Bblock \ DEFV(complexe,z_module); \ DEFV(complexe,z_argument); \ DEFV(complexe,z_exponentielle); \ /* Nombres complexes de manoeuvre... */ \ \ FCinitialisation(z_module,module,I0_Complexe); \ /* Calcul de : */ \ /* */ \ /* zm = m + i.0 */ \ /* */ \ FCinitialisation(z_argument,R0_Complexe,argument); \ /* Calcul de : */ \ /* */ \ /* za = 0 + i.a */ \ /* */ \ FCexponentielle(z_exponentielle,EN,z_argument); \ /* Calcul de : */ \ /* */ \ /* i.a */ \ /* ze = e */ \ /* */ \ FCproduit(z,z_module,z_exponentielle); \ /* Calcul de : */ \ /* */ \ /* i.a */ \ /* z = m.e */ \ /* */ \ Eblock /* Introduit le 20040401095015 pour 'v $xrs/Mobius3D.11$I Cinitialisation_polaire'. */ #define Cinitialisation_trigonometrique(z,module,argument) \ Bblock \ FCinitialisation_trigonometrique(z,module,argument); \ Eblock #define FCinitialisation_trigonometrique(z,module,argument) \ Bblock \ FgCinitialisation_trigonometrique(z,module,argument); \ Eblock #define FgCinitialisation_trigonometrique(z,module,argument) \ Bblock \ FCinitialisation(z \ ,FCcomposanteR(module,argument) \ ,FCcomposanteI(module,argument) \ ); \ Eblock /* Introduit le 20111229161914. Evidemment cela devrait donner le meme resultat que */ /* 'FgCinitialisation_polaire(...)' et l'on peut donc se demander alors ce qui a justifie */ /* la definition de ce dernier operateur via 'FCexponentielle(...)'... */ #define Cdefinition_trigonometrique(z,module,argument) \ Bblock \ FCdefinition_trigonometrique(z,module,argument); \ Eblock #define FCdefinition_trigonometrique(z,module,argument) \ Bblock \ FgCdefinition_trigonometrique(z,module,argument); \ Eblock #define FgCdefinition_trigonometrique(z,module,argument) \ Bblock \ DEFV(Float,INIT(unitaire,Cmodule(C_____nombre_complexe__0_p1))); \ /* Inutile mais, par "symetrie" avec les hyper-complexes et les hyper-hyper-complexes... */ \ DEFV(Float,INIT(cosinus,NEUT(MUL2(module,COSX(argument))))); \ DEFV(Float,INIT(sinus__,FLOT__UNDEF)); \ \ EGAL(sinus__,DIVI(MUL2(module,SINX(argument)),unitaire)); \ \ FCinitialisation(z \ ,cosinus \ ,sinus__ \ ); \ Eblock /* Introduit le 20230320123152 afin de se debarasser de l'usage de l'exponentielle en */ /* particulier pour les hyper-complexes et les hyper-hyper-complexes... */ #define Cextension_directe(z_etendu,z) \ Bblock \ FCextension_directe(z_etendu,z); \ Eblock #define FCextension_directe(z_etendu,z) \ Bblock \ FgCextension_directe(z_etendu,z); \ Eblock #define FgCextension_directe(z_etendu,z) \ Bblock \ EGAL(CP_Rho(z_etendu),Cmodule(z)); \ EGAL(CP_Theta(z_etendu),Cargument_2PI(z)); \ Eblock /* Introduit le 20111230081620. */ #define Cextension_inverse(z,z_etendu) \ Bblock \ FCextension_inverse(z,z_etendu); \ Eblock #define FCextension_inverse(z,z_etendu) \ Bblock \ FgCextension_inverse(z,z_etendu); \ Eblock #define FgCextension_inverse(z,z_etendu) \ Bblock \ FCinitialisation_trigonometrique(z \ ,CP_Rho(z_etendu) \ ,CP_Theta(z_etendu) \ ); \ Eblock /* Introduit le 20111230081620. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E X T R A C T I O N D E S P A R T I E S R E E L L E E T I M A G I N A I R E */ /* D E 2 N O M B R E S C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define CpartieReelle(z,z1) \ Bblock \ FCpartieReelle(z,z1); \ Eblock #define FCpartieReelle(z,z1) \ Bblock \ FgCpartieReelle(z,z1); \ Eblock #define FgCpartieReelle(z,z1) \ Bblock \ DEFV(complexe,z1_conjugue); \ DEFV(complexe,z_somme); \ \ FCconjugaison(z1_conjugue,z1); \ FCsomme(z_somme,z1,z1_conjugue); \ FCforme_lineaire(z \ ,INVE(CONSTANTE_DE_MOYENNE) \ ,z_somme \ ,FZERO \ ); \ /* La partie reelle 'PR' est definie par : */ \ /* _ */ \ /* z + z */ \ /* PR(z) = ------- */ \ /* 2 */ \ /* */ \ Eblock \ /* Extraction de la partie reelle d'un nombre complexe sous la forme d'un autre nombre */ \ /* complexe (introduit le 20230204075556)... */ #define CpartieImaginaire(z,z1) \ Bblock \ FCpartieImaginaire(z,z1); \ Eblock #define FCpartieImaginaire(z,z1) \ Bblock \ FgCpartieImaginaire(z,z1); \ Eblock #define FgCpartieImaginaire(z,z1) \ Bblock \ DEFV(complexe,z1_conjugue); \ DEFV(complexe,z_difference); \ \ FCconjugaison(z1_conjugue,z1); \ FCdifference(z_difference,z1,z1_conjugue); \ FCforme_lineaire(z \ ,INVE(CONSTANTE_DE_MOYENNE) \ ,z_difference \ ,FZERO \ ); \ /* La partie imaginaire 'PI' est definie par : */ \ /* _ */ \ /* z - z */ \ /* PI(z) = ------- */ \ /* 2 */ \ /* */ \ Eblock \ /* Extraction de la partie imaginaire d'un nombre complexe sous la forme d'un autre nombre */ \ /* complexe (introduit le 20230204075556)... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E G A L I T E Z = Z1 D E 2 N O M B R E S C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define Cegal(z,z1) \ Bblock \ FCegal(z,z1); \ Eblock #define FCegal(z,z1) \ Bblock \ FgCegal(z,z1); \ Eblock #define FgCegal(z,z1) \ Bblock \ FCinitialisation(z \ ,Reelle(z1) \ ,Imaginaire(z1) \ ); \ Eblock \ /* ATTENTION, cette facon de proceder (qui est la seule ?) a un defaut comme cela s'est vu */ \ /* dans 'v $xtKg/zeta.11$K fFCzeta_sommation_Euler_MacLaurin' lorsque ce programme est */ \ /* execute avec l'option "editer=VRAI". En effet, l'edition est systematiquement faite en */ \ /* double, ce qui vient du fait que la fonction 'fFCzeta_sommation_Euler_MacLaurin(...)' est */ \ /* appelee deux fois de suite : d'abord pour 'Reelle(...)', puis pour Imaginaire(...)'. */ #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 /* ATTENTION, voir le commentaire ci-dessous... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /* ATTENTION, on notera que l'on ne definit pas : */ /* */ /* # define FCegal(z,z1) \ */ /* Bblock \ */ /* FGegal(VIDE \ */ /* ,complexe \ */ /* ,PRECISION_DES_NOMBRES_COMPLEXES \ */ /* ,z \ */ /* ,z1 \ */ /* ,dReelle,dImaginaire \ */ /* ,EGAL \ */ /* ); \ */ /* Eblock */ /* */ /* pour des raisons de performance, la version de 'FCegal(...)' figurant ci-dessus, */ /* etant optimale... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T E S T D E 2 N O M B R E S C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define CTestIFEQ(z1,z2) \ FCTestIFEQ(z1,z2) #define FCTestIFEQ(z1,z2) \ IFET(IFEQ(Reelle(z1),Reelle(z2)),IFEQ(Imaginaire(z1),Imaginaire(z2))) /* Test de l'egalite de 'z1' et 'z2'. */ #define CTestIFEQ_a_peu_pres_absolu(z1,z2,epsilon) \ FCTestIFEQ_a_peu_pres_absolu(z1,z2,epsilon) #define FCTestIFEQ_a_peu_pres_absolu(z1,z2,epsilon) \ IFET(IFEQ_a_peu_pres_absolu(Reelle(z1),Reelle(z2),epsilon) \ ,IFEQ_a_peu_pres_absolu(Imaginaire(z1),Imaginaire(z2),epsilon) \ ) /* Test de l'egalite de 'z1' et 'z2' a "epsilon pres absolu". */ #define CTestIFEQ_a_peu_pres_relatif(z1,z2,pourcentage) \ FCTestIFEQ_a_peu_pres_relatif(z1,z2,pourcentage) #define FCTestIFEQ_a_peu_pres_relatif(z1,z2,pourcentage) \ IFET(IFEQ_a_peu_pres_relatif(Reelle(z1),Reelle(z2),pourcentage) \ ,IFEQ_a_peu_pres_relatif(Imaginaire(z1),Imaginaire(z2),pourcentage) \ ) /* Test de l'egalite de 'z1' et 'z2' a "epsilon pres relatif". */ #define CTestIFNE(z1,z2) \ FCTestIFNE(z1,z2) #define FCTestIFNE(z1,z2) \ IFOU(IFNE(Reelle(z1),Reelle(z2)),IFNE(Imaginaire(z1),Imaginaire(z2))) /* Test de la non egalite de 'z1' et 'z2'. */ #define CTestIFNE_a_peu_pres_absolu(z1,z2,epsilon) \ FCTestIFNE_a_peu_pres_absolu(z1,z2,epsilon) #define FCTestIFNE_a_peu_pres_absolu(z1,z2,epsilon) \ IFOU(IFNE_a_peu_pres_absolu(Reelle(z1),Reelle(z2),epsilon) \ ,IFNE_a_peu_pres_absolu(Imaginaire(z1),Imaginaire(z2),epsilon) \ ) /* Test de la non egalite de 'z1' et 'z2' a "epsilon pres absolu". */ #define CTestIFNE_a_peu_pres_relatif(z1,z2,pourcentage) \ FCTestIFNE_a_peu_pres_relatif(z1,z2,pourcentage) #define FCTestIFNE_a_peu_pres_relatif(z1,z2,pourcentage) \ IFOU(IFNE_a_peu_pres_relatif(Reelle(z1),Reelle(z2),pourcentage) \ ,IFNE_a_peu_pres_relatif(Imaginaire(z1),Imaginaire(z2),pourcentage) \ ) /* Test de la non egalite de 'z1' et 'z2' a "epsilon pres relatif". */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N E G A T I O N Z = - Z1 D ' U N N O M B R E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Cnegation(z,z1) \ Bblock \ FCnegation(z,z1); \ Eblock #define FCnegation(z,z1) \ Bblock \ FgCnegation(z,z1); \ Eblock #define FgCnegation(z,z1) \ Bblock \ FCforme_lineaire(z \ ,NEGA(FU) \ ,z1 \ ,FZERO \ ); \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 /* ATTENTION, voir le commentaire ci-dessous... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /* ATTENTION, on notera que l'on ne definit pas : */ /* */ /* # define FCnegation(z,z1) \ */ /* Bblock \ */ /* FGnegation \ */ /* (VIDE \ */ /* ,complexe \ */ /* ,PRECISION_DES_NOMBRES_COMPLEXES \ */ /* ,z \ */ /* ,z1 \ */ /* ,dReelle,dImaginaire \ */ /* ,EGAL \ */ /* ,... \ */ /* ,... \ */ /* ); \ */ /* Eblock */ /* */ /* pour des raisons de performance, la version de 'FCegal(...)' figurant ci-dessus, */ /* etant optimale... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* -- */ /* C O N J U G A I S O N Z = Z1 D ' U N N O M B R E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Cconjugaison(z,z1) \ Bblock \ FCconjugaison(z,z1); \ Eblock #define FCconjugaison(z,z1) \ Bblock \ FgCconjugaison(z,z1); \ Eblock #define FgCconjugaison(z,z1) \ Bblock \ FCinitialisation(z \ ,CReelle(z1) \ ,CImaginaire(z1) \ ); \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 /* ATTENTION, voir le commentaire ci-dessous... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /* ATTENTION, on notera que l'on ne definit pas : */ /* */ /* # define FCconjugaison(z,z1) \ */ /* Bblock \ */ /* FGconjugaison \ */ /* (VIDE \ */ /* ,complexe \ */ /* ,PRECISION_DES_NOMBRES_COMPLEXES \ */ /* ,z \ */ /* ,z1 \ */ /* ,dReelle,dImaginaire \ */ /* ,EGAL \ */ /* ,... \ */ /* ,... \ */ /* ); \ */ /* Eblock */ /* */ /* pour des raisons de performance, la version de 'FCegal(...)' figurant ci-dessus, */ /* etant optimale... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L E U R M O D U L O D ' U N N O M B R E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Cmodulo(z,z1,Rorg,Rext,Iorg,Iext) \ Bblock \ FCmodulo(z,z1,Rorg,Rext,Iorg,Iext); \ Eblock #define FCmodulo(z,z1,Rorg,Rext,Iorg,Iext) \ Bblock \ FgCmodulo(z,z1,Rorg,Rext,Iorg,Iext); \ Eblock #define FgCmodulo(z,z1,Rorg,Rext,Iorg,Iext) \ Bblock \ FCinitialisation(z \ ,MODF(Reelle(z1),Rorg,Rext) \ ,MODF(Imaginaire(z1),Iorg,Iext) \ ); \ Eblock /* Procedures introduites le 20121102174217... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F O R M E L I N E A I R E Z = A*Z1 + B D ' U N N O M B R E C O M P L E X E */ /* L E S N O M B R E S { A , B } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define Cforme_lineaire(z,alpha,z1,beta) \ Bblock \ FCforme_lineaire(z,alpha,z1,beta); \ Eblock #define FCforme_lineaire(z,alpha,z1,beta) \ Bblock \ FgCforme_lineaire(z,alpha,z1,beta); \ Eblock #define FgCforme_lineaire(z,alpha,z1,beta) \ Bblock \ FCinitialisation(z \ ,LIN1(alpha,Reelle(z1),beta) \ ,LIZ1(alpha,Imaginaire(z1)) \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E Z = A*Z1 + B*Z2 */ /* D E 2 N O M B R E S C O M P L E X E S */ /* L E S N O M B R E S { A , B } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define Ccombinaison_lineaire_2(z,a,z1,b,z2) \ Bblock \ FCcombinaison_lineaire_2(z,a,z1,b,z2); \ Eblock #define FCcombinaison_lineaire_2(z,a,z1,b,z2) \ Bblock \ FgCcombinaison_lineaire_2(z,a,z1,b,z2); \ Eblock #define FgCcombinaison_lineaire_2(z,a,z1,b,z2) \ Bblock \ Test(IL_NE_FAUT_PAS(FgCsomme_FgCproduit_____autoriser_l_arithmetique_folklorique_dans_C)) \ /* Test introduit le 20181212120506 pour le plaisir des yeux... */ \ Bblock \ FCinitialisation(z \ ,LIZ2(a,Reelle(z1),b,Reelle(z2)) \ ,LIZ2(a,Imaginaire(z1),b,Imaginaire(z2)) \ ); \ /* On notera le 20181212115436 que ceci est identique a 'FgCinterpolation(...)'... */ \ Eblock \ ATes \ Bblock \ DEFV(complexe,z1_intermediaire); \ DEFV(complexe,z2_intermediaire); \ \ FCforme_lineaire(z1_intermediaire,a,z1,FZERO); \ FCforme_lineaire(z2_intermediaire,b,z2,FZERO); \ \ FCsomme(z,z1_intermediaire,z2_intermediaire); \ /* Ainsi, la combinaison lineaire est ramenee a une somme "simple"... */ \ Eblock \ ETes \ Eblock /* Introduit le 20040508121316 pour 'v $ximcf/iterations$FON 20040508115225'. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E Z = A*Z1 + B*Z2 + C*Z3 */ /* D E 3 N O M B R E S C O M P L E X E S */ /* L E S N O M B R E S { A , B , C } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define Ccombinaison_lineaire_3(z,a,z1,b,z2,c,z3) \ Bblock \ FCcombinaison_lineaire_3(z,a,z1,b,z2,c,z3); \ Eblock #define FCcombinaison_lineaire_3(z,a,z1,b,z2,c,z3) \ Bblock \ DEFV(complexe,tz3); \ FCcombinaison_lineaire_2(tz3,b,z2,c,z3); \ FCcombinaison_lineaire_2(z,a,z1,FU,tz3); \ Eblock /* Introduit le 20220608175938... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E Z = A*Z1 + B*Z2 + C*Z3 + D*Z4 */ /* D E 4 N O M B R E S C O M P L E X E S */ /* L E S N O M B R E S { A , B , C , D } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define Ccombinaison_lineaire_4(z,a,z1,b,z2,c,z3,d,z4) \ Bblock \ FCcombinaison_lineaire_4(z,a,z1,b,z2,c,z3,d,z4); \ Eblock #define FCcombinaison_lineaire_4(z,a,z1,b,z2,c,z3,d,z4) \ Bblock \ DEFV(complexe,tz4); \ FCcombinaison_lineaire_3(tz4,b,z2,c,z3,d,z4); \ FCcombinaison_lineaire_2(z,a,z1,FU,tz4); \ Eblock /* Introduit le 20220608175938... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E Z = A*Z1 + B*Z2 + C*Z3 + D*Z4 + E*Z5 */ /* D E 5 N O M B R E S C O M P L E X E S */ /* L E S N O M B R E S { A , B , C , D , E } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define Ccombinaison_lineaire_5(z,a,z1,b,z2,c,z3,d,z4,e,z5) \ Bblock \ FCcombinaison_lineaire_5(z,a,z1,b,z2,c,z3,d,z4,e,z5); \ Eblock #define FCcombinaison_lineaire_5(z,a,z1,b,z2,c,z3,d,z4,e,z5) \ Bblock \ DEFV(complexe,tz5); \ FCcombinaison_lineaire_4(tz5,b,z2,c,z3,d,z4,e,z5); \ FCcombinaison_lineaire_2(z,a,z1,FU,tz5); \ Eblock /* Introduit le 20220609083129... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E Z = A*Z1 + B*Z2 + C*Z3 + D*Z4 + E*Z5 + F*Z6 */ /* D E 6 N O M B R E S C O M P L E X E S */ /* L E S N O M B R E S { A , B , C , D , E , F } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define Ccombinaison_lineaire_6(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6) \ Bblock \ FCcombinaison_lineaire_6(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6); \ Eblock #define FCcombinaison_lineaire_6(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6) \ Bblock \ DEFV(complexe,tz6); \ FCcombinaison_lineaire_5(tz6,b,z2,c,z3,d,z4,e,z5,f,z6); \ FCcombinaison_lineaire_2(z,a,z1,FU,tz6); \ Eblock /* Introduit le 20220609083129... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E Z = A*Z1 + B*Z2 + C*Z3 + D*Z4 + E*Z5 + F*Z6 + G*Z7 */ /* D E 7 N O M B R E S C O M P L E X E S */ /* L E S N O M B R E S { A , B , C , D , E , F , G } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define Ccombinaison_lineaire_7(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7) \ Bblock \ FCcombinaison_lineaire_7(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7); \ Eblock #define FCcombinaison_lineaire_7(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7) \ Bblock \ DEFV(complexe,tz7); \ FCcombinaison_lineaire_6(tz7,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7); \ FCcombinaison_lineaire_2(z,a,z1,FU,tz7); \ Eblock /* Introduit le 20220609083129... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E Z = A*Z1 + B*Z2 + C*Z3 + D*Z4 + E*Z5 + F*Z6 + G*Z7 + H*Z8 */ /* D E 8 N O M B R E S C O M P L E X E S */ /* L E S N O M B R E S { A , B , C , D , E , F , G , H } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define Ccombinaison_lineaire_8(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7,h,z8) \ Bblock \ FCcombinaison_lineaire_8(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7,h,z8); \ Eblock #define FCcombinaison_lineaire_8(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7,h,z8) \ Bblock \ DEFV(complexe,tz8); \ FCcombinaison_lineaire_7(tz8,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7,h,z8); \ FCcombinaison_lineaire_2(z,a,z1,FU,tz8); \ Eblock /* Introduit le 20220609083129... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E Z = A*Z1 + B*Z2 + C*Z3 + D*Z4 + E*Z5 + F*Z6 + G*Z7 + H*Z8 + I*Z9 */ /* D E 9 N O M B R E S C O M P L E X E S */ /* L E S N O M B R E S { A , B , C , D , E , F , G , H , I } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define Ccombinaison_lineaire_9(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7,h,z8,i,z9) \ Bblock \ FCcombinaison_lineaire_9(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7,h,z8,i,z9); \ Eblock #define FCcombinaison_lineaire_9(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7,h,z8,i,z9) \ Bblock \ DEFV(complexe,tz9); \ FCcombinaison_lineaire_8(tz9,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7,h,z8,i,z9); \ FCcombinaison_lineaire_2(z,a,z1,FU,tz9); \ Eblock /* Introduit le 20220609083129... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* S O M M E Z = Z1 + Z2 D E 2 N O M B R E S C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define Csomme(z,z1,z2) \ Bblock \ FCsomme(z,z1,z2); \ Eblock #define FCsomme(z,z1,z2) \ Bblock \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_C(FCsomme_____utiliser_l_arithmetique_etendue \ ,BLOC(FgCsomme(z,z1,z2);) \ ); \ Eblock #define FgCsomme(z,z1,z2) \ Bblock \ Test(IL_NE_FAUT_PAS(FgCsomme_FgCproduit_____autoriser_l_arithmetique_folklorique_dans_C)) \ /* Test introduit le 20181210160907 pour le plaisir des yeux... */ \ Bblock \ FCinitialisation(z \ ,ADD2(Reelle(z1),Reelle(z2)) \ ,ADD2(Imaginaire(z1),Imaginaire(z2)) \ ); \ Eblock \ ATes \ Bblock \ FCinitialisation(z \ ,FgCsomme____Reelle______folklorique(Reelle(z1),Imaginaire(z1),Reelle(z2),Imaginaire(z2)) \ ,FgCsomme____Imaginaire__folklorique(Reelle(z1),Imaginaire(z1),Reelle(z2),Imaginaire(z2)) \ ); \ /* Jusqu'au 20220823135212, il y avait ci-dessus : */ \ /* */ \ /* (Reelle(z1),Reelle(z2),Imaginaire(z1),Imaginaire(z2)) */ \ /* */ \ /* or 'v $ximcf/outils$FON .R1.I1.R2.I2.' utilise un ordre plus logique. C'est cette erreur */ \ /* qui explique la presence de l'anomalie 'v $ximcf/common$DEF 20220822112834' (corrigee a */ \ /* cette date) puisqu'elle impliquait la permutation de 'R2' et 'I1'... */ \ Eblock \ ETes \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 /* ATTENTION, voir le commentaire ci-dessous... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /* ATTENTION, on notera que l'on ne peut pas definir : */ /* */ /* # define FCsomme(z,z1,z2) \ */ /* Bblock \ */ /* FGsomme(VIDE \ */ /* ,complexe \ */ /* ,PRECISION_DES_NOMBRES_COMPLEXES \ */ /* ,z \ */ /* ,z1,z2 \ */ /* ,dReelle,dImaginaire \ */ /* ,ADD2 \ */ /* ); \ */ /* Eblock */ /* */ /* car la fonction 'ADD2(...)' n'effectue pas l'affectation des valeurs... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D I F F E R E N C E Z = Z1 - Z2 D E 2 N O M B R E S C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define Cdifference(z,z1,z2) \ Bblock \ FCdifference(z,z1,z2); \ Eblock #define FCdifference(z,z1,z2) \ Bblock \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_C(FCdifference_____utiliser_l_arithmetique_etendue \ ,BLOC(FgCdifference(z,z1,z2);) \ ); \ Eblock #define FgCdifference(z,z1,z2) \ Bblock \ Test(IL_NE_FAUT_PAS(FgCsomme_FgCproduit_____autoriser_l_arithmetique_folklorique_dans_C)) \ /* Test introduit le 20181212120506 pour le plaisir des yeux... */ \ Bblock \ FCinitialisation(z \ ,SOUS(Reelle(z1),Reelle(z2)) \ ,SOUS(Imaginaire(z1),Imaginaire(z2)) \ ); \ Eblock \ ATes \ Bblock \ DEFV(complexe,z_intermediaire_difference); \ \ FCforme_lineaire(z_intermediaire_difference,NEGA(FU),z2,FZERO); \ \ FCsomme(z,z1,z_intermediaire_difference); \ /* Ainsi, la difference est ramenee a une somme... */ \ Eblock \ ETes \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 /* ATTENTION, voir le commentaire ci-dessous... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /* ATTENTION, on notera que l'on ne peut pas definir : */ /* */ /* # define FCdifference(z,z1,z2) \ */ /* Bblock \ */ /* FGdifference(VIDE \ */ /* ,complexe \ */ /* ,PRECISION_DES_NOMBRES_COMPLEXES \ */ /* ,z \ */ /* ,z1,z2 \ */ /* ,dReelle,dImaginaire \ */ /* ,SOUS \ */ /* ); \ */ /* Eblock */ /* */ /* car la fonction 'SOUS(...)' n'effectue pas l'affectation des valeurs... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R P O L A T I O N Z = A*Z1 + B*Z2 E N T R E 2 N O M B R E S C O M P L E X E S */ /* L E S N O M B R E S { A , B } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define Cinterpolation(z,alpha,z1,beta,z2) \ Bblock \ FCinterpolation(z,alpha,z1,beta,z2); \ Eblock #define FCinterpolation(z,alpha,z1,beta,z2) \ Bblock \ FgCinterpolation(z,alpha,z1,beta,z2); \ Eblock #define FgCinterpolation(z,alpha,z1,beta,z2) \ Bblock \ FCcombinaison_lineaire_2(z,alpha,z1,beta,z2); \ /* On notera le 20181212115436 que ceci est identique a 'FgCcombinaison_lineaire_2(...)', */ \ /* d'ou l'intrduction de l'usage de cette derniere le 20181212120117... */ \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 /* ATTENTION, voir le commentaire ci-dessous... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /* ATTENTION, on notera que l'on ne peut pas definir : */ /* */ /* # define FCinterpolation(z,alpha,z1,beta,z2) \ */ /* Bblock \ */ /* FGinterpolation \ */ /* (VIDE \ */ /* ,complexe \ */ /* ,PRECISION_DES_NOMBRES_COMPLEXES \ */ /* ,z \ */ /* ,z1,z2 \ */ /* ,dReelle,dImaginaire \ */ /* ,LIN2 \ */ /* ); \ */ /* Eblock */ /* */ /* car la fonction 'LIN2(...)' n'effectue pas l'affectation des valeurs... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H O I X D ' U N N O M B R E C O M P L E X E P A R M I D E U X : */ /* */ /*************************************************************************************************************************************/ #define CHOI1_C(z1,z2) \ z1 #define CHOI2_C(z1,z2) \ z2 /* Introduit le 20230323135750 par symetrie avec ce qui a ete defini pour les */ /* hyper-complexes et les hyper-hyper-complexes... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P R O D U I T Z = Z1 * Z2 D E 2 N O M B R E S C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define Cproduit(z,z1,z2) \ Bblock \ FCproduit(z,z1,z2); \ Eblock #define FCproduit(z,z1,z2) \ Bblock \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_C(FCproduit_____utiliser_l_arithmetique_etendue \ ,BLOC(FgCproduit(z,z1,z2);) \ ); \ Eblock #define FgCproduit(z,z1,z2) \ Bblock \ DEFV(complexe,z_intermediaire_produit); \ /* Ce nombre complexe intermediaire est destine a traiter les cas ou par malheur le nombre */ \ /* complexe resultat 'z' serait identique a l'un des deux arguments ('z1' ou 'z2')... */ \ \ Test(IL_NE_FAUT_PAS(FgCsomme_FgCproduit_____autoriser_l_arithmetique_folklorique_dans_C)) \ /* Test introduit le 20181210160907 pour le plaisir des yeux... */ \ Bblock \ FCinitialisation(z_intermediaire_produit \ ,SOUS(MUL2(Reelle(z1),Reelle(z2)) \ ,MUL2(Imaginaire(z1),Imaginaire(z2)) \ ) \ ,ADD2(MUL2(Reelle(z1),Imaginaire(z2)) \ ,MUL2(Imaginaire(z1),Reelle(z2)) \ ) \ ); \ /* Calcul du produit a destination du nombre complexe intermediaire... */ \ Eblock \ ATes \ Bblock \ FCinitialisation(z_intermediaire_produit \ ,FgCproduit__Reelle______folklorique(Reelle(z1),Imaginaire(z1),Reelle(z2),Imaginaire(z2)) \ ,FgCproduit__Imaginaire__folklorique(Reelle(z1),Imaginaire(z1),Reelle(z2),Imaginaire(z2)) \ ); \ /* Calcul du produit a destination du nombre complexe intermediaire... */ \ /* */ \ /* Jusqu'au 20220823135212, il y avait ci-dessus : */ \ /* */ \ /* (Reelle(z1),Reelle(z2),Imaginaire(z1),Imaginaire(z2)) */ \ /* */ \ /* or 'v $ximcf/outils$FON .R1.I1.R2.I2.' utilise un ordre plus logique. C'est cette erreur */ \ /* qui explique la presence de l'anomalie 'v $ximcf/common$DEF 20220822112834' (corrigee a */ \ /* cette date) puisqu'elle impliquait la permutation de 'R2' et 'I1'... */ \ Eblock \ ETes \ \ FCegal(z,z_intermediaire_produit); \ /* Mise a jour du nombre complexe resultat... */ \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 /* ATTENTION, voir le commentaire ci-dessous... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /* ATTENTION, on notera que l'on ne peut pas definir : */ /* */ /* # define FCproduit(z,z1,z2) \ */ /* Bblock \ */ /* FGproduit(VIDE \ */ /* ,complexe \ */ /* ,PRECISION_DES_NOMBRES_COMPLEXES \ */ /* ,z \ */ /* ,z1,z2 \ */ /* ,dReelle,dImaginaire \ */ /* ,EGAL \ */ /* ,NEUT \ */ /* ,ADD2 \ */ /* ,SOUS \ */ /* ,MUL2 \ */ /* ); \ */ /* Eblock */ /* */ /* car les fonctions 'ADD2(...)', 'SOUS(...)' et 'MUL2(...)' n'effectuent pas l'affectation */ /* des valeurs... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N */ /* P U I S S A N C E N - I E M E Z = Z1 ( P O S I T I V E O U N E G A T I V E ) */ /* D ' U N N O M B R E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Cpuissance(z,z1,exposant) \ Bblock \ FCpuissance(z,z1,exposant); \ Eblock #define FCpuissance(z,z1,exposant) \ Bblock \ FgCpuissance(z,z1,exposant); \ Eblock #define FgCpuissance(z,z1,exposant) \ /* Definition introduite le 20091118105839... */ \ Bblock \ Test(EST_ENTIER(exposant)) \ /* Test introduit le 20100608133537 pour plus de generalite... */ \ Bblock \ DEFV(complexe,z_cumul_multiplicatif); \ FCegal(z_cumul_multiplicatif,C_____nombre_complexe_p1__0); \ /* Nombre complexe intermediaire donnant le "cumul multiplicatif" courant. Il est */ \ /* initialise ici a {1,0} et c'est cette valeur qui est renvoyee en cas d'erreur... */ \ /* */ \ /* On notera le 20091223094639 qu'il n'est pas possible d'optimiser cette sequence en */ \ /* faisant une iteration de moins via l'initialisation : */ \ /* */ \ /* FCegal(z_cumul_multiplicatif,z1); */ \ /* */ \ /* puis : */ \ /* */ \ /* Repe(TRMU(exposant)) */ \ /* */ \ /* a cause du cas de l'exposant nul pour lequel le resultat est {1,0}... */ \ \ Test(IFGE(exposant,ZERO)) \ Bblock \ Repe(NEUT(exposant)) \ Bblock \ FCproduit(z_cumul_multiplicatif,z_cumul_multiplicatif,z1); \ Eblock \ ERep \ Eblock \ ATes \ Bblock \ Repe(NEGA(exposant)) \ Bblock \ FCquotient(z_cumul_multiplicatif,z_cumul_multiplicatif,z1); \ /* La possibilite de calculer des puissances negatives a ete introduite le 20100316171635. */ \ Eblock \ ERep \ Eblock \ ETes \ \ FCegal(z,z_cumul_multiplicatif); \ Eblock \ ATes \ Bblock \ DEFV(complexe,z_exposant); \ /* Exposant complexe. */ \ \ FCinitialisation(z_exposant \ ,exposant \ ,I0_Complexe \ ); \ /* Calcul de : */ \ /* */ \ /* exposant + i.0 */ \ /* */ \ FCexponentielle_complexe(z \ ,z1 \ ,z_exposant \ ); \ /* Calcul de : */ \ /* */ \ /* exposant + i.0 */ \ /* z1 */ \ /* */ \ /* (introduit le 20100608133537 pour plus de generalite qu'un exposant entier). */ \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A.Z1 + B */ /* F O R M E H O M O G R A P H I Q U E Z = ---------- D E 2 N O M B R E S C O M P L E X E S */ /* C.Z2 + D */ /* */ /* L E S N O M B R E S ' A ' , ' B ' , ' C ' E T ' D ' E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define Cforme_homographique(z,alpha,z1,beta,gamma,z2,delta) \ Bblock \ FCforme_homographique(z,alpha,z1,beta,gamma,z2,delta); \ Eblock #define FCforme_homographique(z,alpha,z1,beta,gamma,z2,delta) \ Bblock \ FgCforme_homographique(z,alpha,z1,beta,gamma,z2,delta); \ Eblock #define FgCforme_homographique(z,alpha,z1,beta,gamma,z2,delta) \ /* Definition introduite le 20091021150516... */ \ Bblock \ DEFV(complexe,z___numerateur); \ DEFV(complexe,z_denominateur); \ /* Numerateur et denominateur de la forme homographique. */ \ \ FCforme_lineaire(z___numerateur,alpha,z1,beta); \ /* Calcul de : */ \ /* */ \ /* A.z1 + B */ \ /* */ \ FCforme_lineaire(z_denominateur,gamma,z2,delta); \ /* Calcul de : */ \ /* */ \ /* C.z2 + D */ \ /* */ \ \ FCquotient(z,z___numerateur,z_denominateur); \ /* Mise a jour du nombre complexe resultat : */ \ /* */ \ /* A.z1 + B */ \ /* ---------- */ \ /* C.z2 + D */ \ /* */ \ /* en notant qu'en general les deux nombres 'z1' et 'z2' sont identiques... */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* -- */ /* Z1 Z1.Z2 */ /* Q U O T I E N T Z = ---- = ------- D E 2 N O M B R E S C O M P L E X E S : */ /* Z2 2 */ /* |Z2| */ /* */ /*************************************************************************************************************************************/ #define Cquotient(z,z1,z2) \ Bblock \ FCquotient(z,z1,z2); \ Eblock #define FCquotient(z,z1,z2) \ Bblock \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_C(FCquotient_____utiliser_l_arithmetique_etendue \ ,BLOC(FgCquotient(z,z1,z2);) \ ); \ Eblock #define FgCquotient(z,z1,z2) \ /* ATTENTION, pendant longtemps j'ai ecrit : */ \ /* */ \ /* Bblock */ \ /* DEFV(complexe,z_intermediaire); */ \ /* FCinitialisation(z_intermediaire */ \ /* ,DIVZ(SOUS(MUL2(Reelle(z1),CReelle(z2)) */ \ /* ,MUL2(Imaginaire(z1),CImaginaire(z2)) */ \ /* ) */ \ /* ,FCmodule2(z2) */ \ /* ) */ \ /* ,DIVZ(ADD2(MUL2(Reelle(z1),CImaginaire(z2)) */ \ /* ,MUL2(Imaginaire(z1),CReelle(z2)) */ \ /* ) */ \ /* ,FCmodule2(z2) */ \ /* ) */ \ /* ); */ \ /* FCegal(z,z_intermediaire); */ \ /* Eblock */ \ /* */ \ /* mais cela n'etait pas tres elegant... */ \ Bblock \ DEFV(complexe,z2_barre); \ /* Ce nombre complexe est le conjugue du nombre complexe argument 'z2'. */ \ DEFV(complexe,z_intermediaire_quotient_1); \ DEFV(complexe,z_intermediaire_quotient_2); \ /* Ces deux nombres complexes intermediaires sont destines a traiter les cas ou par malheur */ \ /* le nombre complexe resultat 'z' serait identique a l'un des deux arguments 'z1' ou 'z2'. */ \ \ FCconjugaison(z2_barre,z2); \ /* Calcul de : */ \ /* */ \ /* -- */ \ /* z2 */ \ /* */ \ FCproduit(z_intermediaire_quotient_1,z1,z2_barre); \ /* Calcul de : */ \ /* */ \ /* -- */ \ /* z1.z2 */ \ /* */ \ FCforme_lineaire(z_intermediaire_quotient_2,fINVZ(FCmodule2(z2)),z_intermediaire_quotient_1,FZERO); \ /* Calcul de : */ \ /* */ \ /* -- */ \ /* z1.z2 */ \ /* ------- */ \ /* 2 */ \ /* |z2| */ \ /* */ \ /* Le 20071201105511 'INVZ(...)' fut remplace tardivement par 'fINVZ(...)'... */ \ FCegal(z,z_intermediaire_quotient_2); \ /* Mise a jour du nombre complexe resultat... */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 1 */ /* I N V E R S E Z = ---- D ' U N N O M B R E C O M P L E X E : */ /* Z1 */ /* */ /*************************************************************************************************************************************/ #define Cinverse(z,z1) \ Bblock \ FCinverse(z,z1); \ Eblock #define FCinverse(z,z1) \ Bblock \ FgCinverse(z,z1); \ Eblock #define FgCinverse(z,z1) \ /* Ces definitions furent introduites le 20060425154232... */ \ Bblock \ FCquotient(z,C_____nombre_complexe_p1__0,z1); \ /* Calcul de : */ \ /* */ \ /* 1 */ \ /* ---- */ \ /* z1 */ \ /* */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 2 */ /* N O R M E O U M O D U L E A U C A R R E | Z | D ' U N N O M B R E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Cmodule2(z) \ FCmodule2(z) #define FCmodule2(z) \ CRho_2D(Reelle(z),Imaginaire(z)) /* ATTENTION, on notera que l'on ne peut pas definir la norme par : */ /* */ /* - */ /* N(z) = z.z */ /* */ /* car en effet le produit 'FCproduit(...)' fait intervenir des variables intermediaires */ /* qui sont incompatibles avec l'utilisation de 'FCmodule2(...)' en tant que scalaire */ /* dans des expressions... */ #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 /* ATTENTION, voir le commentaire ci-dessous... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /* ATTENTION, on notera que l'on ne definit pas : */ /* */ /* # define FCmodule2(z) \ */ /* Bblock \ */ /* FGproduit(VIDE \ */ /* ,complexe \ */ /* ,PRECISION_DES_NOMBRES_COMPLEXES \ */ /* ,z \ */ /* ,dReelle,dImaginaire \ */ /* ,EXP2 \ */ /* ); \ */ /* Eblock */ /* */ /* pour des raisons de performance, la version de 'FCmodule2(...)' figurant ci-dessus, */ /* etant optimale... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M O D U L E | Z | D ' U N N O M B R E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define C_MODULE_UNITAIRE \ FU #define Cmodule(z) \ FCmodule(z) #define FCmodule(z) \ RACX(FCmodule2(z)) #define LogCmodule(z) \ LOGX(Cmodule(z)) \ /* Introduit le 20180927085818 pour son utilite en geometrie "tropicale" (anciennement */ \ /* appelee "MAX-PLUS"...). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* " R E D U C T I O N " D E S C O M P O S A N T E S D ' U N N O M B R E C O M P L E X E : */ /* */ /* */ /* Definition : */ /* */ /* On appelera "reduction" des composantes */ /* d'un nombre complexe 'z', le nombre */ /* reel suivant : */ /* */ /* cR.R(z)+cI.I(z) */ /* */ /* ou 'R(z)', par exemple, designe la partie Reelle */ /* de 'z'. */ /* */ /* */ /*************************************************************************************************************************************/ #define Creduction(z,coefficientR,coefficientI) \ FCreduction(z,coefficientR,coefficientI) #define FCreduction(z,coefficientR,coefficientI) \ LIZ2(coefficientR,Reelle(z) \ ,coefficientI,Imaginaire(z) \ ) /* ATTENTION, il n'est pas utile de definir quelque chose du type : */ /* */ /* # define FGreduction(prefixe,corps,sous_corps,...) \ */ /* (...) */ /* */ /* puique la definition qui suit n'utilise que des fonctions du type 'FC...(...)' qui sont */ /* de haut niveau et ne font aucunes hypotheses sur les structures de base... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* -- */ /* T R A C E Z = Z1 + Z1 D ' U N N O M B R E C O M P L E X E : */ /* */ /* */ /* Rappel : */ /* */ /* Si N(z) et T(z) designent respectivement */ /* la norme et la trace du nombre complexe 'z', */ /* on a : */ /* */ /* 2 */ /* z - T(z).z + N(z) = 0 */ /* */ /* */ /*************************************************************************************************************************************/ #define Ctrace(z,z1) \ Bblock \ FCtrace(z,z1); \ Eblock #define FCtrace(z,z1) \ Bblock \ FgCtrace(z,z1); \ Eblock #define FgCtrace(z,z1) \ Bblock \ DEFV(complexe,z1_barre); \ /* Ce nombre complexe est le conjugue du nombre complexe argument 'z1'. */ \ \ FCconjugaison(z1_barre,z1); \ /* Calcul de : */ \ /* */ \ /* -- */ \ /* z1 */ \ /* */ \ FCsomme(z,z1,z1_barre); \ /* Calcul de : */ \ /* */ \ /* -- */ \ /* z1 + z1 */ \ /* */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R O T A T I O N E T H O M O T H E T I E D ' U N N O M B R E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Crotation_et_homothetie(z,z1,rapport,angle) \ Bblock \ FCrotation_et_homothetie(z,z1,rapport,angle); \ Eblock #define FCrotation_et_homothetie(z,z1,rapport,angle) \ Bblock \ FgCrotation_et_homothetie(z,z1,rapport,angle); \ Eblock #define FgCrotation_et_homothetie(z,z1,rapport,angle) \ Bblock \ DEFV(complexe,z_definition_de_la_rotation_et_homothetie); \ /* Ce nombre complexe contient la definition de la rotation et de l'homothetie. */ \ \ FCinitialisation(z_definition_de_la_rotation_et_homothetie \ ,Xcartesienne_2D(rapport,angle) \ ,Ycartesienne_2D(rapport,angle) \ ); \ /* Definition de la rotation et de l'homothetie. */ \ FCproduit(z,z1,z_definition_de_la_rotation_et_homothetie); \ /* Calcul de : */ \ /* */ \ /* i.angle */ \ /* z1.rapport.e */ \ /* */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R O T A T I O N D ' U N N O M B R E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Crotation(z,z1,angle) \ Bblock \ FCrotation(z,z1,angle); \ Eblock #define FCrotation(z,z1,angle) \ Bblock \ FgCrotation(z,z1,angle); \ Eblock #define FgCrotation(z,z1,angle) \ Bblock \ FCrotation_et_homothetie(z,z1,FU,angle); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* H O M O T H E T I E D ' U N N O M B R E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Chomothetie(z,z1,rapport) \ Bblock \ FChomothetie(z,z1,rapport); \ Eblock #define FChomothetie(z,z1,rapport) \ Bblock \ FgChomothetie(z,z1,rapport); \ Eblock #define FgChomothetie(z,z1,rapport) \ Bblock \ FCrotation_et_homothetie(z,z1,rapport,FZERO); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A R G U M E N T D E Z D A N S [ - P I , + P I ] D ' U N N O M B R E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Cargument_PI(z) \ FCargument_PI(z) #define FCargument_PI(z) \ gTheta_2D(ARTG \ ,R0_Complexe,I0_Complexe \ ,Reelle(z),Imaginaire(z) \ ) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A R G U M E N T D E Z D A N S [ 0 , 2 . P I ] D ' U N N O M B R E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Cargument_2PI(z) \ FCargument_2PI(z) #define FCargument_2PI(z) \ gTheta_2D(ATAN \ ,R0_Complexe,I0_Complexe \ ,Reelle(z),Imaginaire(z) \ ) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M P O S A N T E S C A R T E S I E N N E S D ' U N N O M B R E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ /* Les procedures suivantes furent introduites le 20061209094527... */ #define CcomposanteR(rho,theta) \ FCcomposanteR(rho,theta) #define FCcomposanteR(rho,theta) \ Xcartesienne_2D(rho,theta) #define CcomposanteI(rho,theta) \ FCcomposanteI(rho,theta) #define FCcomposanteI(rho,theta) \ Ycartesienne_2D(rho,theta) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E F O N C T I O N S C O M P L E X E S U S U E L L E S : */ /* */ /* */ /* Nota : */ /* */ /* On retrouvera toutes ces definitions dans */ /* le livre "L'Outil Mathematique" de Roger */ /* Petit (couverture rouge), publie chez Masson, */ /* a partir de la page 176. */ /* */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E X P O N E N T I A T I O N C O M P L E X E A B A S E R E E L L E : */ /* */ /*************************************************************************************************************************************/ #define Cexponentielle(z,base,z1) \ Bblock \ FCexponentielle(z,base,z1); \ Eblock #define FCexponentielle(z,base,z1) \ Bblock \ FgCexponentielle(z,base,z1); \ Eblock #define FgCexponentielle(z,base,z1) \ Bblock \ DEFV(complexe,zA); \ DEFV(complexe,zB); \ /* Nombres complexes de manoeuvre... */ \ \ FCforme_lineaire(zA \ ,LOGX(base) \ ,z1 \ ,FZERO \ ); \ /* Calcul de : */ \ /* */ \ /* z = (x1 + i.y1).Log(base) */ \ /* A */ \ /* */ \ /* ou {x1,y1} designe respectivement {Reelle(z1),Imaginaire(z1)}. */ \ FCinitialisation(zB \ ,FCcomposanteR(Rho1_Complexe,Imaginaire(zA)) \ ,FCcomposanteI(Rho1_Complexe,Imaginaire(zA)) \ ); \ /* Calcul de : */ \ /* */ \ /* z = cos(y1.Log(base)) + i.sin(y1.Log(base)) */ \ /* B */ \ /* */ \ FCforme_lineaire(z \ ,EXPB(Reelle(zA)) \ ,zB \ ,FZERO \ ); \ /* Calcul de : */ \ /* */ \ /* x1.Log(base) */ \ /* z = e .[cos(y1.Log(base)) + i.sin(y1.Log(base))] */ \ /* */ \ /* On notera que l'on utilise 'EXPB(...)' et non pas 'EXPX(...)' a cause du bug */ \ /* 'BUG_SYSTEME_SG_C_exp'... */ \ /* */ \ /* Ce calcul repose sur les relations suivantes : */ \ /* */ \ /* z1 x1 + i.y1 */ \ /* base = base */ \ /* */ \ /* x1 i.y1 */ \ /* = base .base */ \ /* */ \ /* x1.log(base) i.[y1.log(base)] */ \ /* = e .e */ \ /* */ \ /* x1.log(base) */ \ /* = e .{cos[y1.log(base)] + i.sin[y1.log(base)]} */ \ /* */ \ /* */ \ /* evidemment... */ \ /* */ \ /* ATTENTION, jusqu'au 20240626111544 il y avait ici par erreur : */ \ /* */ \ /* EXba(base,Reelle(zA)) */ \ /* */ \ /* ce qui s'est vu lors de la mise au point de l'image 'v $xiirc/ZETA.21$m.IdM'... */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E X P O N E N T I A T I O N C O M P L E X E A B A S E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Cexponentielle_complexe(z,base,z1) \ Bblock \ FCexponentielle_complexe(z,base,z1); \ Eblock #define FCexponentielle_complexe(z,base,z1) \ Bblock \ FgCexponentielle_complexe(z,base,z1); \ Eblock #define FgCexponentielle_complexe(z,base,z1) \ Bblock \ Test(FCTestIFEQ(base,C_____nombre_complexe__0__0)) \ Bblock \ FCegal(z,C_____nombre_complexe__0__0); \ /* Valeur arbitraire introduite le 20210218120647... */ \ Eblock \ ATes \ Bblock \ DEFV(complexe,logarithme_base); \ DEFV(complexe,z_produit); \ /* Nombres complexes de manoeuvre... */ \ \ FClogarithme(logarithme_base,base); \ /* Calcul de : */ \ /* */ \ /* log(base) */ \ /* */ \ FCproduit(z_produit,z1,logarithme_base); \ /* Calcul de : */ \ /* */ \ /* z1.log(base) */ \ /* */ \ FCexponentielle(z,EN,z_produit); \ /* Calcul de : */ \ /* */ \ /* z1.log(base) */ \ /* e */ \ /* */ \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* L O G A R I T H M E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Clogarithme(z,z1) \ Bblock \ FClogarithme(z,z1); \ Eblock #define FClogarithme(z,z1) \ Bblock \ FgClogarithme(z,z1); \ Eblock #define FgClogarithme(z,z1) \ Bblock \ DEFV(Float,INIT(module_z1,FCmodule(z1))); \ DEFV(Float,INIT(argument_z1,FCargument_PI(z1))); \ /* Module et argument du nombre 'z1'. ATTENTION, jusqu'au 19990623142749, j'utilisai */ \ /* ici 'FCargument_2PI(...)'. Mais l'utilisation de 'FClogarithme(...)' dans la fonction */ \ /* 'v $ximcf/fonction$FON fFCfamma_sommation_Euler_MacLaurin' a montre qu'il fallait */ \ /* utiliser 'FCargument_PI(...)' afin d'eviter une discontinuite sur l'axe reel... */ \ \ FCinitialisation(z \ ,COND(IZEQ_a_peu_pres(module_z1,GRAND_EPSILON),F_MOINS_LE_PETIT_INFINI,LOGX(module_z1)) \ ,argument_z1 \ ); \ /* Calcul de : */ \ /* */ \ /* z = log(module(z1)) + i.argument(z1) */ \ /* */ \ /* On notera qu'en toute generalite, c'est la nullite "parfaite" du module qui devrait */ \ /* etre testee, mais en faisant ainsi, on risquerait des debordements ulterieurs, d'ou */ \ /* ce dispositif "a epsilon pres" introduit le 19990701124949. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* L I G N E S T R I G O N O M E T R I Q U E S C O M P L E X E S */ /* C I R C U L A I R E S E T H Y P E R B O L I Q U E S D E T Y P E 2 : */ /* */ /*************************************************************************************************************************************/ #define FCcosinus_sinus_circulaires_et_hyperboliques__type_2(z,z1,f11,f12,signe,f21,f22) \ /* Procedure introduite le 20230206170001... */ \ Bblock \ DEFV(complexe,z1_partieReelle); \ DEFV(Float,INIT(module_de_z1_partieReelle,FLOT__UNDEF)); \ \ DEFV(complexe,z1_partieImaginaire); \ DEFV(Float,INIT(module_de_z1_partieImaginaire,FLOT__UNDEF)); \ \ DEFV(Float,INIT(f11_de_module_de_z1_partieReelle,FLOT__UNDEF)); \ DEFV(Float,INIT(f12_de_module_de_z1_partieImaginaire,FLOT__UNDEF)); \ DEFV(Float,INIT(f21_de_module_de_z1_partieReelle,FLOT__UNDEF)); \ DEFV(Float,INIT(f22_de_module_de_z1_partieImaginaire,FLOT__UNDEF)); \ \ FCpartieReelle(z1_partieReelle,z1); \ FCpartieImaginaire(z1_partieImaginaire,z1); \ \ EGAL(module_de_z1_partieReelle,FCmodule(z1_partieReelle)); \ EGAL(module_de_z1_partieImaginaire,FCmodule(z1_partieImaginaire)); \ \ EGAL(f11_de_module_de_z1_partieReelle,f11(module_de_z1_partieReelle)); \ EGAL(f21_de_module_de_z1_partieReelle,f21(module_de_z1_partieReelle)); \ \ EGAL(f12_de_module_de_z1_partieImaginaire,f12(module_de_z1_partieImaginaire)); \ EGAL(f22_de_module_de_z1_partieImaginaire,f22(module_de_z1_partieImaginaire)); \ \ FCinitialisation(z \ ,MUL2(f11_de_module_de_z1_partieReelle \ ,f12_de_module_de_z1_partieImaginaire \ ) \ ,MUL4(FLOT(signe) \ ,f21_de_module_de_z1_partieReelle \ ,f22_de_module_de_z1_partieImaginaire \ ,Imaginaire(z1_partieImaginaire) \ ) \ ); \ Eblock \ /* Le 20230206110454, il semblerait que la bonne definition des lignes trigonometriques */ \ /* circulaires et hyperboliques d'un nombre complexe soit : */ \ /* */ \ /* :Debut_listMN_DEFINITION_LIGNES_TRIGONOMETRIQUES_NOMBRES_COMPLEXES: */ \ /* */ \ /* cos(z) = [cos(R(z)).ch(|I(z)|)] - [sin(R(z)).shc(|I(z)|).I(z)] */ \ /* sin(z) = [sin(R(z)).ch(|I(z)|)] + [cos(R(z)).shc(|I(z)|).I(z)] */ \ /* */ \ /* ch(z) = [ch(R(z)).cos(|I(z)|)] + [sh(R(z)).sinc(|I(z)|).I(z)] */ \ /* sh(z) = [sh(R(z)).cos(|I(z)|)] + [ch(R(z)).sinc(|I(z)|).I(z)] */ \ /* */ \ /* en faisant les hypotheses audacieuses suivantes : */ \ /* */ \ /* z = R(z) + I(z) */ \ /* z = a + b.i */ \ /* */ \ /* I = b.i [I = I(z)] */ \ /* [m = |I|] */ \ /* */ \ /* z = a + I */ \ /* */ \ /* f11 f12 f21 f22 */ \ /* */ \ /* cos(z) = cos(a+I) = [cos(a).cos(I) - sin(a).sin(I)] */ \ /* sin(z) = cos(a+I) = [sin(a).cos(I) + cos(a).sin(I)] */ \ /* */ \ /* ch(z) = ch(a+I) = [ch(a).ch(I) + sh(a).sh(I)] */ \ /* sh(z) = sh(a+I) = [sh(a).ch(I) + ch(a).sh(I)] */ \ /* */ \ /* En effet, par des developpements en series tel celui de 'FgHCexponentielle(...)', on */ \ /* montre facilement que : */ \ /* */ \ /* cos(I) = ch(m) */ \ /* */ \ /* sh(m) */ \ /* sin(I) = -------.I = shc(m).I */ \ /* m */ \ /* */ \ /* */ \ /* ch(I) = cos(m) */ \ /* */ \ /* sin(m) */ \ /* sh(I) = --------.I = sinc(m).I */ \ /* m */ \ /* */ \ /* d'ou : */ \ /* */ \ /* f11 f12 f21 f22 */ \ /* */ \ /* cos(z) = cos(a+I) = [cos(a).ch(m) - sin(a).shc(m).I] */ \ /* sin(z) = cos(a+I) = [sin(a).ch(m) + cos(a).shc(m).I] */ \ /* */ \ /* ch(z) = ch(a+I) = [ch(a).cos(m) + sh(a).sinc(m).I] */ \ /* sh(z) = sh(a+I) = [sh(a).cos(m) + ch(a).sinc(m).I] */ \ /* */ \ /* */ \ /* On verifie aisement que : */ \ /* */ \ /* 2 2 2 2 2 */ \ /* cos (z) + sin (z) = ch (m) + shc (m).I */ \ /* */ \ /* 2 */ \ /* 2 sh (m) 2 2 2 */ \ /* = ch (m) + --------.I [I = -(m )] */ \ /* 2 */ \ /* m */ \ /* */ \ /* 2 2 */ \ /* = ch (m) - sh (m) */ \ /* ['m' etant un Reel...] */ \ /* = 1 */ \ /* */ \ /* et de meme : */ \ /* */ \ /* 2 2 */ \ /* ch (z) - sh (z) = 1 */ \ /* */ \ /* :Fin_listMN_DEFINITION_LIGNES_TRIGONOMETRIQUES_NOMBRES_COMPLEXES: */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* L I G N E S T R I G O N O M E T R I Q U E S C O M P L E X E S */ /* C I R C U L A I R E S E T H Y P E R B O L I Q U E S D E T Y P E 1 : */ /* */ /*************************************************************************************************************************************/ #define FCcosinus_sinus_circulaires_et_hyperboliques__type_1(z,z1,facteur_des_exposants,FCplus_ou_moins,diviseur) \ Bblock \ DEFV(complexe,plus_z1); \ DEFV(complexe,moins_z1); \ DEFV(complexe,zF1); \ DEFV(complexe,zF2); \ DEFV(complexe,zE1); \ DEFV(complexe,zE2); \ DEFV(complexe,zN); \ /* Nombres complexes de manoeuvre... */ \ \ FCegal(plus_z1,z1); \ FCnegation(moins_z1,z1); \ \ FCproduit(zF1,facteur_des_exposants,plus_z1); \ FCproduit(zF2,facteur_des_exposants,moins_z1); \ /* Definition des nombres '+f.z1' et '-f.z1'. */ \ \ FCexponentielle(zE1,EN,zF1); \ FCexponentielle(zE2,EN,zF2); \ \ FCplus_ou_moins(zN,zE1,zE2); \ \ FCquotient(z,zN,diviseur); \ /* Calcul de : */ \ /* */ \ /* +f.z1 -f.z1 */ \ /* e & e */ \ /* z = ----------------- */ \ /* d */ \ /* */ \ /* ou '&' et 'd' valent {+,-} et {2,2i} pour le cosinus et le sinus respectivement, et */ \ /* ou 'f' vaut {i,1} pour les lignes circulaires et hyperboliques respectivement. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* L I G N E S T R I G O N O M E T R I Q U E S C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define FCcosinus_sinus(z,z1,FCplus_ou_moins,diviseur) \ Bblock \ FCcosinus_sinus_circulaires_et_hyperboliques__type_1(z \ ,z1 \ ,C_____nombre_complexe__0_p1 \ ,FCplus_ou_moins \ ,diviseur \ ); \ /* Calcul de : */ \ /* */ \ /* +i.z1 -i.z1 */ \ /* e & e */ \ /* z = ----------------- */ \ /* d */ \ /* */ \ /* ou '&' et 'd' valent {+,-} et {2,2.i} pour le cosinus et le sinus respectivement. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O S I N U S C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Cserie_cosinus(z,z1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FCserie_cosinus(z,z1); \ Eblock #define FCserie_cosinus(z,z1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FgCserie_cosinus(z,z1); \ Eblock #define FgCserie_cosinus(z,z1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ GENERATION_SERIE_TRIGONOMETRIQUE(z,z1 \ ,GENERER_UN_COSINUS,TRIGONOMETRIE_CIRCULAIRE__ \ ,complexe \ ,FCegal \ ,FCforme_lineaire \ ,FCsomme \ ,aCpuissance \ ,FgCserie_cosinus_____C_____exposant \ ,FCproduit \ ,FgCserie_cosinus_____C_____nombre_complexe__0__0 \ ,C_____nombre_complexe_p1__0 \ ); \ Eblock #define Ccosinus(z,z1) \ Bblock \ FCcosinus(z,z1); \ Eblock #define FCcosinus(z,z1) \ Bblock \ FgCcosinus(z,z1); \ Eblock #define FgCcosinus(z,z1) \ Bblock \ Test(IL_FAUT(FCcosinus_____compatibilite_20230206)) \ /* Test introduit le 20230206170001... */ \ Bblock \ FCcosinus_sinus(z,z1,FCsomme,C_____nombre_complexe_p2__0); \ /* Calcul de : */ \ /* */ \ /* +i.z1 -i.z1 */ \ /* e + e */ \ /* z = ----------------- */ \ /* 2 */ \ /* */ \ Eblock \ ATes \ Bblock \ Test(IL_FAUT(FCcosinus_____compatibilite_20230321)) \ /* Test introduit le 20230321184556... */ \ Bblock \ FCcosinus_sinus_circulaires_et_hyperboliques__type_2(z,z1,COSX,COHX,SIGNE_MOINS,SINX,SIHC); \ /* Introduit le 20230206170001... */ \ Eblock \ ATes \ Bblock \ DEFV(complexe,exponentielle_z1); \ \ FCexponentielle(exponentielle_z1,EN,z1); \ FCpartieReelle(z,exponentielle_z1); \ /* Mis sous cette forme le 20230321184556... */ \ Eblock \ ETes \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* S I N U S C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Cserie_sinus(z,z1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FCserie_sinus(z,z1); \ Eblock #define FCserie_sinus(z,z1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FgCserie_sinus(z,z1); \ Eblock #define FgCserie_sinus(z,z1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ GENERATION_SERIE_TRIGONOMETRIQUE(z,z1 \ ,GENERER_UN_SINUS__,TRIGONOMETRIE_CIRCULAIRE__ \ ,complexe \ ,FCegal \ ,FCforme_lineaire \ ,FCsomme \ ,aCpuissance \ ,FgCserie_sinus_____C_____exposant \ ,FCproduit \ ,FgCserie_sinus_____C_____nombre_complexe__0__0 \ ,C_____nombre_complexe_p1__0 \ ); \ Eblock #define Csinus(z,z1) \ Bblock \ FCsinus(z,z1); \ Eblock #define FCsinus(z,z1) \ Bblock \ FgCsinus(z,z1); \ Eblock #define FgCsinus(z,z1) \ Bblock \ Test(IL_FAUT(FCsinus_____compatibilite_20230206)) \ /* Test introduit le 20230206170001... */ \ Bblock \ FCcosinus_sinus(z,z1,FCdifference,C_____nombre_complexe__0_p2); \ /* Calcul de : */ \ /* */ \ /* +i.z1 -i.z1 */ \ /* e - e */ \ /* z = ----------------- */ \ /* 2.i */ \ /* */ \ Eblock \ ATes \ Bblock \ Test(IL_FAUT(FCsinus_____compatibilite_20230321)) \ /* Test introduit le 20230321184556... */ \ Bblock \ FCcosinus_sinus_circulaires_et_hyperboliques__type_2(z,z1,SINX,COHX,SIGNE_PLUS,COSX,SIHC); \ /* Procedure introduite le 20230206170001... */ \ Eblock \ ATes \ Bblock \ DEFV(complexe,exponentielle_z1); \ \ FCexponentielle(exponentielle_z1,EN,z1); \ FCpartieImaginaire(z,exponentielle_z1); \ /* Mis sous cette forme le 20230321184556... */ \ Eblock \ ETes \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T A N G E N T E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define FgCtangente_quotient(z,z1,fonction_cosinus,fonction_sinus__) \ /* Procedure introduite le 20210209103456... */ \ Bblock \ DEFV(complexe,cosinus_z1); \ DEFV(complexe,sinus_z1); \ /* Nombres complexes de manoeuvre... */ \ \ fonction_cosinus(cosinus_z1,z1); \ fonction_sinus__(sinus_z1,z1); \ /* Calcul du sinus et du cosinus de 'z1'. */ \ \ Test(IZNE(FCmodule(cosinus_z1))) \ Bblock \ FCquotient(z,sinus_z1,cosinus_z1); \ /* Calcul de : */ \ /* */ \ /* */ \ /* sinus(z1) */ \ /* z = ------------- */ \ /* cosinus(z1) */ \ /* */ \ Eblock \ ATes \ Bblock \ FCinitialisation(z \ ,MEME_SIGNE_QUE(Reelle(sinus_z1),F_INFINI) \ ,MEME_SIGNE_QUE(Imaginaire(sinus_z1),F_INFINI) \ ); \ /* Lorsque le module du cosinus est nul, la valeur de la tangente est fixee de facon tout */ \ /* a fait arbitraire... */ \ Eblock \ ETes \ Eblock #define Cserie_tangente(z,z1) \ /* Procedure introduite le 20210209103456... */ \ Bblock \ FCserie_tangente(z,z1); \ Eblock #define FCserie_tangente(z,z1) \ /* Procedure introduite le 20210209103456... */ \ Bblock \ FgCserie_tangente(z,z1); \ Eblock #define FgCserie_tangente(z,z1) \ /* Procedure introduite le 20210209103456... */ \ Bblock \ FgCtangente_quotient(z,z1,FCserie_cosinus,FCserie_sinus); \ Eblock #define Ctangente(z,z1) \ Bblock \ FCtangente(z,z1); \ Eblock #define FCtangente(z,z1) \ Bblock \ FgCtangente(z,z1); \ Eblock #define FgCtangente(z,z1) \ Bblock \ FgCtangente_quotient(z,z1,FCcosinus,FCsinus); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* L I G N E S H Y P E R B O L I Q U E S C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define FCcosinus_sinus_hyperbolique(z,z1,FCplus_ou_moins) \ Bblock \ FCcosinus_sinus_circulaires_et_hyperboliques__type_1(z \ ,z1 \ ,C_____nombre_complexe_p1__0 \ ,FCplus_ou_moins \ ,C_____nombre_complexe_p2__0 \ ); \ /* Calcul de : */ \ /* */ \ /* +z1 -z1 */ \ /* e & e */ \ /* z = ------------- */ \ /* 2 */ \ /* */ \ /* ou '&' vaut {+,-} pour le cosinus et le sinus respectivement. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O S I N U S H Y P E R B O L I Q U E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Cserie_cosinus_hyperbolique(z,z1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FCserie_cosinus_hyperbolique(z,z1); \ Eblock #define FCserie_cosinus_hyperbolique(z,z1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FgCserie_cosinus_hyperbolique(z,z1); \ Eblock #define FgCserie_cosinus_hyperbolique(z,z1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ GENERATION_SERIE_TRIGONOMETRIQUE(z,z1 \ ,GENERER_UN_COSINUS,TRIGONOMETRIE_HYPERBOLIQUE \ ,complexe \ ,FCegal \ ,FCforme_lineaire \ ,FCsomme \ ,aCpuissance \ ,FgCserie_cosinus_hyperbolique_____C_____exposant \ ,FCproduit \ ,FgCserie_cosinus_hyperbolique_____C_____nombre_complexe__0__0 \ ,C_____nombre_complexe_p1__0 \ ); \ Eblock #define Ccosinus_hyperbolique(z,z1) \ Bblock \ FCcosinus_hyperbolique(z,z1); \ Eblock #define FCcosinus_hyperbolique(z,z1) \ Bblock \ FgCcosinus_hyperbolique(z,z1); \ Eblock #define FgCcosinus_hyperbolique(z,z1) \ Bblock \ Test(IL_FAUT(FCcosinus_hyperbolique_____compatibilite_20230206)) \ /* Test introduit le 20230206170001... */ \ Bblock \ FCcosinus_sinus_hyperbolique(z,z1,FCsomme); \ /* Calcul de : */ \ /* */ \ /* +z1 -z1 */ \ /* e + e */ \ /* z = ------------- */ \ /* 2 */ \ /* */ \ Eblock \ ATes \ Bblock \ FCcosinus_sinus_circulaires_et_hyperboliques__type_2(z,z1,COHX,COSX,SIGNE_PLUS,SIHX,SINC); \ /* Procedure introduite le 20230206170001... */ \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* S I N U S H Y P E R B O L I Q U E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define Cserie_sinus_hyperbolique(z,z1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FCserie_sinus_hyperbolique(z,z1); \ Eblock #define FCserie_sinus_hyperbolique(z,z1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FgCserie_sinus_hyperbolique(z,z1); \ Eblock #define FgCserie_sinus_hyperbolique(z,z1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ GENERATION_SERIE_TRIGONOMETRIQUE(z,z1 \ ,GENERER_UN_SINUS__,TRIGONOMETRIE_HYPERBOLIQUE \ ,complexe \ ,FCegal \ ,FCforme_lineaire \ ,FCsomme \ ,aCpuissance \ ,FgCserie_sinus_hyperbolique_____C_____exposant \ ,FCproduit \ ,FgCserie_sinus_hyperbolique_____C_____nombre_complexe__0__0 \ ,C_____nombre_complexe_p1__0 \ ); \ Eblock #define Csinus_hyperbolique(z,z1) \ Bblock \ FCsinus_hyperbolique(z,z1); \ Eblock #define FCsinus_hyperbolique(z,z1) \ Bblock \ FgCsinus_hyperbolique(z,z1); \ Eblock #define FgCsinus_hyperbolique(z,z1) \ Bblock \ Test(IL_FAUT(FCsinus_hyperbolique_____compatibilite_20230206)) \ /* Test introduit le 20230206170001... */ \ Bblock \ FCcosinus_sinus_hyperbolique(z,z1,FCdifference); \ /* Calcul de : */ \ /* */ \ /* +z1 -z1 */ \ /* e - e */ \ /* z = ------------- */ \ /* 2 */ \ /* */ \ Eblock \ ATes \ Bblock \ FCcosinus_sinus_circulaires_et_hyperboliques__type_2(z,z1,SIHX,COSX,SIGNE_PLUS,COHX,SINC); \ /* Procedure introduite le 20230206170001... */ \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T A N G E N T E H Y P E R B O L I Q U E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define FgCtangente_hyperbolique_quotient(z,z1,fonction_cosinus_hyperbolique,fonction_sinus___hyperbolique) \ Bblock \ DEFV(complexe,cosinus_hyperbolique_z1); \ DEFV(complexe,sinus_hyperbolique_z1); \ /* Nombres complexes de manoeuvre... */ \ \ fonction_cosinus_hyperbolique(cosinus_hyperbolique_z1,z1); \ fonction_sinus___hyperbolique(sinus_hyperbolique_z1,z1); \ /* Calcul du sinus et du cosinus de 'z1'. */ \ \ Test(IZNE(FCmodule(cosinus_hyperbolique_z1))) \ Bblock \ FCquotient(z,sinus_hyperbolique_z1,cosinus_hyperbolique_z1); \ /* Calcul de : */ \ /* */ \ /* */ \ /* sinus_hyperbolique(z1) */ \ /* z = -------------------------- */ \ /* cosinus_hyperbolique(z1) */ \ /* */ \ Eblock \ ATes \ Bblock \ FCinitialisation(z \ ,MEME_SIGNE_QUE(Reelle(sinus_hyperbolique_z1),F_INFINI) \ ,MEME_SIGNE_QUE(Imaginaire(sinus_hyperbolique_z1),F_INFINI) \ ); \ /* Lorsque le module du cosinus est nul, la valeur de la tangente est fixee de facon tout */ \ /* a fait arbitraire... */ \ Eblock \ ETes \ Eblock #define Cserie_tangente_hyperbolique(z,z1) \ Bblock \ FCserie_tangente_hyperbolique(z,z1); \ Eblock #define FCserie_tangente_hyperbolique(z,z1) \ Bblock \ FgCserie_tangente_hyperbolique(z,z1); \ Eblock #define FgCserie_tangente_hyperbolique(z,z1) \ Bblock \ FgCtangente_hyperbolique_quotient(z,z1,FCserie_cosinus_hyperbolique,FCserie_sinus_hyperbolique); \ Eblock #define Ctangente_hyperbolique(z,z1) \ Bblock \ FCtangente_hyperbolique(z,z1); \ Eblock #define FCtangente_hyperbolique(z,z1) \ Bblock \ FgCtangente_hyperbolique(z,z1); \ Eblock #define FgCtangente_hyperbolique(z,z1) \ Bblock \ FgCtangente_hyperbolique_quotient(z,z1,FCcosinus_hyperbolique,FCsinus_hyperbolique); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R " S Y M E T R I E " A V E C C E Q U I E S T F A I T P O U R L E S E S P A C E S */ /* H Y P E R - C O M P L E X E E T H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ /* Introduit le 20121103091821 par "symetrie", mais sans implementer d'Accelerateur car */ /* cela ne se justifie pas... */ #ifdef NE_PAS_ACCELERER_LA_COMPILATION_DES_NOMBRES_COMPLEXES # define aCconjugaison(z,z1) \ Bblock \ Cconjugaison(z,z1); \ Eblock # define aCmodulo(z,z1,Rorg,Rext,Iorg,Iext) \ Bblock \ Cmodulo(z,z1,Rorg,Rext,Iorg,Iext); \ Eblock # define aCproduit(z,z1,z2) \ Bblock \ Cproduit(z,z1,z2); \ Eblock # define aCpuissance(z,z1,exposant) \ Bblock \ Cpuissance(z,z1,exposant); \ Eblock # define aCquotient(z,z1,z2) \ Bblock \ Cquotient(z,z1,z2); \ Eblock # define aCsomme(z,z1,z2) \ Bblock \ Csomme(z,z1,z2); \ Eblock # define aCdifference(z,z1,z2) \ Bblock \ Cdifference(z,z1,z2); \ Eblock # define aCforme_lineaire(z,alpha,z1,beta) \ Bblock \ Cforme_lineaire(z,alpha,z1,beta); \ Eblock # define aCcombinaison_lineaire_2(z,a,z1,b,z2) \ Bblock \ Ccombinaison_lineaire_2(z,a,z1,b,z2); \ Eblock # define aCcombinaison_lineaire_3(z,a,z1,b,z2,c,z3) \ Bblock \ Ccombinaison_lineaire_3(z,a,z1,b,z2,c,z3); \ Eblock # define aCcombinaison_lineaire_4(z,a,z1,b,z2,c,z3,d,z4) \ Bblock \ Ccombinaison_lineaire_4(z,a,z1,b,z2,c,z3,d,z4); \ Eblock # define aCcombinaison_lineaire_5(z,a,z1,b,z2,c,z3,d,z4,e,z5) \ Bblock \ Ccombinaison_lineaire_5(z,a,z1,b,z2,c,z3,d,z4,e,z5); \ Eblock # define aCcombinaison_lineaire_6(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6) \ Bblock \ Ccombinaison_lineaire_6(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6); \ Eblock # define aCcombinaison_lineaire_7(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7) \ Bblock \ Ccombinaison_lineaire_7(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7); \ Eblock # define aCcombinaison_lineaire_8(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7,h,z8) \ Bblock \ Ccombinaison_lineaire_8(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7,h,z8); \ Eblock # define aCcombinaison_lineaire_9(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7,h,z8,i,z9) \ Bblock \ Ccombinaison_lineaire_9(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7,h,z8,i,z9); \ Eblock # define aCexponentielle(z,base,z1) \ Bblock \ Cexponentielle(z,base,z1); \ Eblock # nodefine aClogarithme(z,z1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ Clogarithme(z,z1); \ Eblock # nodefine aCcosinus(z,z1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ Ccosinus(z,z1); \ Eblock # nodefine aCsinus(z,z1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ Csinus(z,z1); \ Eblock # nodefine aCtangente(z,z1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ Ctangente(z,z1); \ Eblock # nodefine aCcosinus_hyperbolique(z,z1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ Ccosinus_hyperbolique(z,z1); \ Eblock # nodefine aCsinus_hyperbolique(z,z1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ Csinus_hyperbolique(z,z1); \ Eblock # nodefine aCtangente_hyperbolique(z,z1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ Ctangente_hyperbolique(z,z1); \ Eblock #Aifdef NE_PAS_ACCELERER_LA_COMPILATION_DES_NOMBRES_COMPLEXES # define aCconjugaison(z,z1) \ Bblock \ EGAL(z,fFCconjugaison(z1)); \ Eblock # define aCmodulo(z,z1,Rorg,Rext,Iorg,Iext) \ Bblock \ EGAL(z,fFCmodulo(z1,Rorg,Rext,Iorg,Iext)); \ Eblock # define aCproduit(z,z1,z2) \ Bblock \ EGAL(z,fFCproduit(z1,z2)); \ Eblock # define aCpuissance(z,z1,exposant) \ Bblock \ EGAL(z,fFCpuissance(z1,exposant)); \ Eblock # define aCquotient(z,z1,z2) \ Bblock \ EGAL(z,fFCquotient(z1,z2)); \ Eblock # define aCsomme(z,z1,z2) \ Bblock \ EGAL(z,fFCsomme(z1,z2)); \ Eblock # define aCdifference(z,z1,z2) \ Bblock \ EGAL(z,fFCdifference(z1,z2)); \ Eblock # define aCforme_lineaire(z,alpha,z1,beta) \ Bblock \ EGAL(z,fFCforme_lineaire(alpha,z1,beta)); \ Eblock # define aCcombinaison_lineaire_2(z,a,z1,b,z2) \ Bblock \ EGAL(z,fFCcombinaison_lineaire_2(a,z1,b,z2)); \ Eblock # define aCcombinaison_lineaire_3(z,a,z1,b,z2,c,z3) \ Bblock \ EGAL(z,fFCcombinaison_lineaire_3(a,z1,b,z2,c,z3)); \ Eblock # define aCcombinaison_lineaire_4(z,a,z1,b,z2,c,z3,d,z4) \ Bblock \ EGAL(z,fFCcombinaison_lineaire_4(a,z1,b,z2,c,z3,d,z4)); \ Eblock # define aCcombinaison_lineaire_5(z,a,z1,b,z2,c,z3,d,z4,e,z5) \ Bblock \ EGAL(z,fFCcombinaison_lineaire_5(z,a,z1,b,z2,c,z3,d,z4,e,z5)); \ Eblock # define aCcombinaison_lineaire_6(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6) \ Bblock \ EGAL(z,fFCcombinaison_lineaire_6(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6)); \ Eblock # define aCcombinaison_lineaire_7(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7) \ Bblock \ EGAL(z,fFCcombinaison_lineaire_7(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7)); \ Eblock # define aCcombinaison_lineaire_8(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7,h,z8) \ Bblock \ EGAL(z,fFCcombinaison_lineaire_8(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7,h,z8)); \ Eblock # define aCcombinaison_lineaire_9(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7,h,z8,i,z9) \ Bblock \ EGAL(z,fFCcombinaison_lineaire_9(z,a,z1,b,z2,c,z3,d,z4,e,z5,f,z6,g,z7,h,z8,i,z9)); \ Eblock # define aCexponentielle(z,base,z1) \ Bblock \ EGAL(z,fFCexponentielle(base,z1)); \ Eblock # nodefine aClogarithme(z,z1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(z,faFClogarithme(z1)); \ /* On notera le 'faFC...' a cause de 'v $ximcf/fonction$FON fFClogarithme'... */ \ Eblock # nodefine aCcosinus(z,z1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(z,fFCcosinus(z1)); \ Eblock # nodefine aCsinus(z,z1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(z,fFCsinus(z1)); \ Eblock # nodefine aCtangente(z,z1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(z,fFCtangente(z1)); \ Eblock # nodefine aCcosinus_hyperbolique(z,z1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(z,faFCcosinus_hyperbolique(z1)); \ /* On notera le 'faFC...' a cause de 'v $ximcf/fonction$FON fFCcosinus_hyperbolique'... */ \ Eblock # nodefine aCsinus_hyperbolique(z,z1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(z,faFCsinus_hyperbolique(z1)); \ /* On notera le 'faFC...' a cause de 'v $ximcf/fonction$FON fFCsinus_hyperbolique'... */ \ Eblock # nodefine aCtangente_hyperbolique(z,z1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(z,faFCtangente_hyperbolique(z1)); \ /* On notera le 'faFC...' a cause de 'v $ximcf/fonction$FON fFCtangente_hyperbolique'... */ \ Eblock #Eifdef NE_PAS_ACCELERER_LA_COMPILATION_DES_NOMBRES_COMPLEXES /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 : */ /* */ /*************************************************************************************************************************************/ /* Ceci a ete introduit le 20070129115950... */ #ifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_COMPLEXES # define UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HC(faire_de_l_arithmetique_etendue,sequence) \ Bblock \ USs_GooF______CONDITIONNEL \ (IFET(IL_FAUT(faire_de_l_arithmetique_etendue) \ ,EST_VRAI(HC_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base) \ ) \ ,sequence \ ); \ /* Execution de la sequence argument avec l'arithmetique etendue si elle est disponible... */ \ Eblock #Aifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_COMPLEXES # define UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HC(faire_de_l_arithmetique_etendue,sequence) \ Bblock \ BLOC(sequence); \ /* Execution de la sequence argument avec l'arithmetique de base... */ \ Eblock #Eifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_COMPLEXES #define FHCinitialisation_____utiliser_l_arithmetique_etendue \ FHCinitialisation_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base_dans_HC #define FHCsomme_____utiliser_l_arithmetique_etendue \ FHCsomme_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base_dans_HC #define FHCdifference_____utiliser_l_arithmetique_etendue \ FHCdifference_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base_dans_HC #define FHCproduit_____utiliser_l_arithmetique_etendue \ FHCproduit_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base_dans_HC #define FHCproduit_____utiliser_l_arithmetique_etendue_dans_CxC \ FHCproduit_____si_GooF_activable_et_si_arithmetique_etendue_aller_dans_CxC_au_lieu_de_HC #define FHCquotient_____utiliser_l_arithmetique_etendue \ FHCquotient_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base_dans_HC /* Definitions introduites le 20070130100534 pour raccourcir certaines lignes suivantes... */ /* */ /* Ces definitions furent completees le 20120918142202 pour ce qui concerne CxC... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E D I T I O N D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define PRINT_DANS_HC(titre,q) \ Bblock \ CAL3(Prme5("%s={%+.^^^,%+.^^^,%+.^^^,%+.^^^}\n",titre,HReelle(q),HImaginaire(q),HJmaginaire(q),HKmaginaire(q))); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N Q = ( R E E L L E , I M A G I N A I R E , J M A G I N A I R E , K M A G I N A I R E ) */ /* D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HCinitialisation(q,partie_reelle,partie_imaginaire,partie_jmaginaire,partie_kmaginaire) \ Bblock \ FHCinitialisation(q,partie_reelle,partie_imaginaire,partie_jmaginaire,partie_kmaginaire); \ Eblock #define FHCinitialisation(q,partie_reelle,partie_imaginaire,partie_jmaginaire,partie_kmaginaire) \ Bblock \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HC(FHCinitialisation_____utiliser_l_arithmetique_etendue \ ,BLOC(FgHCinitialisation(q \ ,partie_reelle \ ,partie_imaginaire \ ,partie_jmaginaire \ ,partie_kmaginaire \ ); \ ) \ ); \ Eblock \ /* Le 20100521140238, 'UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HC(...)' fut */ \ /* introduit pour 'v $ximcf/iterations$FON F_ITERATION_DANS_HC_____transformer__suite_point' */ \ /* en particulier... */ #define bFgHCinitialisation(q,partie_reelle,partie_imaginaire,partie_jmaginaire,partie_kmaginaire) \ Bblock \ EGAL(HReelle(q) \ ,partie_reelle \ ); \ EGAL(HImaginaire(q) \ ,partie_imaginaire \ ); \ EGAL(HJmaginaire(q) \ ,partie_jmaginaire \ ); \ EGAL(HKmaginaire(q) \ ,partie_kmaginaire \ ); \ Eblock \ /* Introduit le 20121102215336 pour simplifier 'FgHCinitialisation(...)'. */ #define FgHCinitialisation(q,partie_reelle,partie_imaginaire,partie_jmaginaire,partie_kmaginaire) \ /* ATTENTION, on ne peut utiliser ici une definition du type : */ \ /* */ \ /* # define FGinitialisation(prefixe,corps,sous_corps,...) \ */ \ /* (...) */ \ /* */ \ /* car en effet, les Arguments sont des nombres Reels, et non pas des elements du sous-corps */ \ /* ce qui fait que le nombre d'arguments de la procedure n'est pas independant de la */ \ /* dimension du corps... */ \ Bblock \ DEFV(hyper_complexe,q_intermediaire_initialisation); \ /* Au cas ou il y aurait une dependance entre les Arguments et le Resultat (introduit */ \ /* le 20121102172614)... */ \ \ bFgHCinitialisation(q_intermediaire_initialisation \ ,partie_reelle \ ,partie_imaginaire \ ,partie_jmaginaire \ ,partie_kmaginaire \ ); \ \ bFgHCinitialisation(q \ ,HReelle(q_intermediaire_initialisation) \ ,HImaginaire(q_intermediaire_initialisation) \ ,HJmaginaire(q_intermediaire_initialisation) \ ,HKmaginaire(q_intermediaire_initialisation) \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N Q = ( R H O , T E T A , P H I , A L P H A ) */ /* D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HCinitialisation_trigonometrique(q,rho,theta,phi,alpha) \ Bblock \ FHCinitialisation_trigonometrique(q,rho,theta,phi,alpha); \ Eblock #define FHCinitialisation_trigonometrique(q,rho,theta,phi,alpha) \ Bblock \ FgHCinitialisation_trigonometrique(q,rho,theta,phi,alpha); \ Eblock #define FgHCinitialisation_trigonometrique(q,rho,theta,phi,alpha) \ Bblock \ FHCinitialisation(q \ ,FHCcomposanteR(rho,theta,phi,alpha) \ ,FHCcomposanteI(rho,theta,phi,alpha) \ ,FHCcomposanteJ(rho,theta,phi,alpha) \ ,FHCcomposanteK(rho,theta,phi,alpha) \ ); \ Eblock /* Introduit le 20111229161914. */ #define HCdefinition_trigonometrique(q,module,argument) \ Bblock \ FHCdefinition_trigonometrique(q,module,argument); \ Eblock #define FHCdefinition_trigonometrique(q,module,argument) \ Bblock \ FgHCdefinition_trigonometrique(q,module,argument); \ Eblock #define FgHCdefinition_trigonometrique(q,module,argument) \ Bblock \ DEFV(Float,INIT(unitaire \ ,HCmodule(COND(IL_FAUT(FHCdefinition_trigonometrique_____compatibilite_20230320) \ ,HC_____quaternion__0_p1__0__0 \ ,HC_____quaternion__0_p1_p1_p1 \ ) \ ) \ ) \ ); \ /* Inutile mais, par "symetrie" avec les hyper-complexes et les hyper-hyper-complexes... */ \ DEFV(Float,INIT(cosinus,NEUT(MUL2(module,COSX(argument))))); \ DEFV(Float,INIT(sinus,FLOT__UNDEF)); \ DEFV(Float,INIT(sinus_de_compatibilite,FLOT__UNDEF)); \ \ EGAL(sinus,DIVI(MUL2(module,SINX(argument)),unitaire)); \ EGAL(sinus_de_compatibilite,COND(IL_FAUT(FHCdefinition_trigonometrique_____compatibilite_20230320),FZERO,sinus)); \ \ FHCinitialisation(q \ ,cosinus \ ,sinus \ ,sinus_de_compatibilite \ ,sinus_de_compatibilite \ ); \ Eblock /* Introduit le 20230320123152 afin de se debarasser de l'usage de l'exponentielle en */ /* particulier pour les hyper-complexes et les hyper-hyper-complexes... */ #define HCextension_directe(q_etendu,q) \ Bblock \ FHCextension_directe(q_etendu,q); \ Eblock #define FHCextension_directe(q_etendu,q) \ Bblock \ FgHCextension_directe(q_etendu,q); \ Eblock #define FgHCextension_directe(q_etendu,q) \ Bblock \ EGAL(HCHS_Rho(q_etendu),HCmodule(q)); \ EGAL(HCHS_Theta(q_etendu),HCargumentT_2PI(q)); \ EGAL(HCHS_Phi(q_etendu),HCargumentP_2PI(q)); \ EGAL(HCHS_Alpha(q_etendu),HCargumentA_2PI(q)); \ Eblock /* Introduit le 20111230081620. */ #define HCextension_inverse(q,q_etendu) \ Bblock \ FHCextension_inverse(q,q_etendu); \ Eblock #define FHCextension_inverse(q,q_etendu) \ Bblock \ FgHCextension_inverse(q,q_etendu); \ Eblock #define FgHCextension_inverse(q,q_etendu) \ Bblock \ FHCinitialisation_trigonometrique(q \ ,HCHS_Rho(q_etendu) \ ,HCHS_Theta(q_etendu) \ ,HCHS_Phi(q_etendu) \ ,HCHS_Alpha(q_etendu) \ ); \ Eblock /* Introduit le 20111230081620. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E X T R A C T I O N D E S P A R T I E S R E E L L E E T I M A G I N A I R E */ /* D E 2 N O M B R E S H Y P E R - C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define HCpartieReelle(q,q1) \ Bblock \ FHCpartieReelle(q,q1); \ Eblock #define FHCpartieReelle(q,q1) \ Bblock \ FgHCpartieReelle(q,q1); \ Eblock #define FgHCpartieReelle(q,q1) \ Bblock \ DEFV(hyper_complexe,q1_conjugue); \ DEFV(hyper_complexe,q_somme); \ \ FHCconjugaison(q1_conjugue,q1); \ FHCsomme(q_somme,q1,q1_conjugue); \ FHCforme_lineaire(q \ ,INVE(CONSTANTE_DE_MOYENNE) \ ,q_somme \ ,FZERO \ ); \ /* La partie reelle 'PR' est definie par : */ \ /* _ */ \ /* q + q */ \ /* PR(q) = ------- */ \ /* 2 */ \ /* */ \ Eblock \ /* Extraction de la partie reelle d'un nombre hyper-complexe sous la forme d'un autre */ \ /* nombre hyper-complexe (introduit le 20230204075556)... */ #define HCpartieIJKmaginaire(q,q1) \ Bblock \ FHCpartieIJKmaginaire(q,q1); \ Eblock #define FHCpartieIJKmaginaire(q,q1) \ Bblock \ FgHCpartieIJKmaginaire(q,q1); \ Eblock #define FgHCpartieIJKmaginaire(q,q1) \ Bblock \ DEFV(hyper_complexe,q1_conjugue); \ DEFV(hyper_complexe,q_difference); \ \ FHCconjugaison(q1_conjugue,q1); \ FHCdifference(q_difference,q1,q1_conjugue); \ FHCforme_lineaire(q \ ,INVE(CONSTANTE_DE_MOYENNE) \ ,q_difference \ ,FZERO \ ); \ /* La partie imaginaire 'PI' est definie par : */ \ /* _ */ \ /* q - q */ \ /* PI(q) = ------- */ \ /* 2 */ \ /* */ \ Eblock \ /* Extraction de la partie imaginaire d'un nombre hyper-complexe sous la forme d'un autre */ \ /* nombre hyper-complexe (introduit le 20230204075556)... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E G A L I T E Q = Q1 D E 2 N O M B R E S H Y P E R - C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define HCegal(q,q1) \ Bblock \ FHCegal(q,q1); \ Eblock #define FHCegal(q,q1) \ Bblock \ FgHCegal(q,q1); \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 # define FgHCegal(q,q1) \ Bblock \ FHCinitialisation(q \ ,HReelle(q1) \ ,HImaginaire(q1) \ ,HJmaginaire(q1) \ ,HKmaginaire(q1) \ ); \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FgHCegal(q,q1) \ Bblock \ FGegal(H,hyper_complexe,complexe \ ,q \ ,q1 \ ,dHReelle,dHImaginaire \ ,FgCegal \ ); \ /* ATTENTION, 'H' et 'hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T E S T D E 2 N O M B R E S H Y P E R - C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ /* Les definitions suivantes ont ete introduites le 20210218101725... */ #define HCTestIFEQ(q1,q2) \ FHCTestIFEQ(q1,q2) #define FHCTestIFEQ(q1,q2) \ I4ET(IFEQ(HReelle(q1),HReelle(q2)) \ ,IFEQ(HImaginaire(q1),HImaginaire(q2)) \ ,IFEQ(HJmaginaire(q1),HJmaginaire(q2)) \ ,IFEQ(HKmaginaire(q1),HKmaginaire(q2)) \ ) /* Test de l'egalite de 'q1' et 'q2'. */ #define HCTestIFEQ_a_peu_pres_absolu(q1,q2,epsilon) \ FHCTestIFEQ_a_peu_pres_absolu(q1,q2,epsilon) #define FHCTestIFEQ_a_peu_pres_absolu(q1,q2,epsilon) \ I4ET(IFEQ_a_peu_pres_absolu(HReelle(q1),HReelle(q2),epsilon) \ ,IFEQ_a_peu_pres_absolu(HImaginaire(q1),HImaginaire(q2),epsilon) \ ,IFEQ_a_peu_pres_absolu(HJmaginaire(q1),HJmaginaire(q2),epsilon) \ ,IFEQ_a_peu_pres_absolu(HKmaginaire(q1),HKmaginaire(q2),epsilon) \ ) /* Test de l'egalite de 'q1' et 'q2' a "epsilon pres absolu". */ #define HCTestIFEQ_a_peu_pres_relatif(q1,q2,pourcentage) \ FHCTestIFEQ_a_peu_pres_relatif(q1,q2,pourcentage) #define FHCTestIFEQ_a_peu_pres_relatif(q1,q2,pourcentage) \ I4ET(IFEQ_a_peu_pres_relatif(HReelle(q1),HReelle(q2),pourcentage) \ ,IFEQ_a_peu_pres_relatif(HImaginaire(q1),HImaginaire(q2),pourcentage) \ ,IFEQ_a_peu_pres_relatif(HJmaginaire(q1),HJmaginaire(q2),pourcentage) \ ,IFEQ_a_peu_pres_relatif(HKmaginaire(q1),HKmaginaire(q2),pourcentage) \ ) /* Test de l'egalite de 'q1' et 'q2' a "epsilon pres relatif". */ #define HCTestIFNE(q1,q2) \ FHCTestIFNE(q1,q2) #define FHCTestIFNE(q1,q2) \ I4OU(IFNE(HReelle(q1),HReelle(q2)) \ ,IFNE(HImaginaire(q1),HImaginaire(q2)) \ ,IFNE(HJmaginaire(q1),HJmaginaire(q2)) \ ,IFNE(HKmaginaire(q1),HKmaginaire(q2)) \ ) /* Test de la non egalite de 'q1' et 'q2'. */ #define HCTestIFNE_a_peu_pres_absolu(q1,q2,epsilon) \ FHCTestIFNE_a_peu_pres_absolu(q1,q2,epsilon) #define FHCTestIFNE_a_peu_pres_absolu(q1,q2,epsilon) \ I4OU(IFNE_a_peu_pres_absolu(HReelle(q1),HReelle(q2),epsilon) \ ,IFNE_a_peu_pres_absolu(HImaginaire(q1),HImaginaire(q2),epsilon) \ ,IFNE_a_peu_pres_absolu(HJmaginaire(q1),HJmaginaire(q2),epsilon) \ ,IFNE_a_peu_pres_absolu(HKmaginaire(q1),HKmaginaire(q2),epsilon) \ ) /* Test de la non egalite de 'q1' et 'q2' a "epsilon pres absolu". */ #define HCTestIFNE_a_peu_pres_relatif(q1,q2,pourcentage) \ FHCTestIFNE_a_peu_pres_relatif(q1,q2,pourcentage) #define FHCTestIFNE_a_peu_pres_relatif(q1,q2,pourcentage) \ I4OU(IFNE_a_peu_pres_relatif(HReelle(q1),HReelle(q2),pourcentage) \ ,IFNE_a_peu_pres_relatif(HImaginaire(q1),HImaginaire(q2),pourcentage) \ ,IFNE_a_peu_pres_relatif(HJmaginaire(q1),HJmaginaire(q2),pourcentage) \ ,IFNE_a_peu_pres_relatif(HKmaginaire(q1),HKmaginaire(q2),pourcentage) \ ) /* Test de la non egalite de 'q1' et 'q2' a "epsilon pres relatif". */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N E G A T I O N Q = - Q1 D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HCnegation(q,q1) \ Bblock \ FHCnegation(q,q1); \ Eblock #define FHCnegation(q,q1) \ Bblock \ FgHCnegation(q,q1); \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 # define FgHCnegation(q,q1) \ Bblock \ FHCforme_lineaire(q \ ,NEGA(FU) \ ,q1 \ ,FZERO \ ); \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FgHCnegation(q,q1) \ Bblock \ FGnegation(H,hyper_complexe,complexe \ ,q \ ,q1 \ ,dHReelle,dHImaginaire \ ,FgCegal \ ,FgCnegation \ ); \ /* ATTENTION, 'H' et 'hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* -- */ /* C O N J U G A I S O N Q = Q1 D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HCconjugaison(q,q1) \ Bblock \ FHCconjugaison(q,q1); \ Eblock #define FHCconjugaison(q,q1) \ Bblock \ FgHCconjugaison(q,q1); \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 # define FgHCconjugaison(q,q1) \ Bblock \ FHCinitialisation(q \ ,CHReelle(q1) \ ,CHImaginaire(q1) \ ,CHJmaginaire(q1) \ ,CHKmaginaire(q1) \ ); \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FgHCconjugaison(q,q1) \ Bblock \ FGconjugaison(H,hyper_complexe,complexe \ ,q \ ,q1 \ ,dHReelle,dHImaginaire \ ,FgCegal \ ,FgCconjugaison \ ,FgCnegation \ ); \ /* ATTENTION, 'H' et 'hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L E U R M O D U L O D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HCmodulo(q,q1,Rorg,Rext,Iorg,Iext,Jorg,Jext,Korg,Kext) \ Bblock \ FHCmodulo(q,q1,Rorg,Rext,Iorg,Iext,Jorg,Jext,Korg,Kext); \ Eblock #define FHCmodulo(q,q1,Rorg,Rext,Iorg,Iext,Jorg,Jext,Korg,Kext) \ Bblock \ FgHCmodulo(q,q1,Rorg,Rext,Iorg,Iext,Jorg,Jext,Korg,Kext); \ Eblock #define FgHCmodulo(q,q1,Rorg,Rext,Iorg,Iext,Jorg,Jext,Korg,Kext) \ /* ATTENTION, on ne peut utiliser ici une definition du type : */ \ /* */ \ /* # define FGmodulo(prefixe,corps,sous_corps,...) \ */ \ /* (...) */ \ /* */ \ /* a cause de la fonction 'MODF(...)' et de ses arguments... */ \ Bblock \ FHCinitialisation(q \ ,MODF(HReelle(q1),Rorg,Rext) \ ,MODF(HImaginaire(q1),Iorg,Iext) \ ,MODF(HJmaginaire(q1),Jorg,Jext) \ ,MODF(HKmaginaire(q1),Korg,Kext) \ ); \ Eblock /* Procedures introduites le 20121102174217... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F O R M E L I N E A I R E Q = A*Q1 + B D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HCforme_lineaire(q,alpha,q1,beta) \ Bblock \ FHCforme_lineaire(q,alpha,q1,beta); \ Eblock #define FHCforme_lineaire(q,alpha,q1,beta) \ Bblock \ FgHCforme_lineaire(q,alpha,q1,beta); \ Eblock #define FgHCforme_lineaire(q,alpha,q1,beta) \ /* ATTENTION, on ne peut utiliser ici une definition du type : */ \ /* */ \ /* # define FGforme_lineaire(prefixe,corps,sous_corps,...) \ */ \ /* (...) */ \ /* */ \ /* car en effet, la decomposition recursive appliquee ailleurs ne fonctionne pas ici, */ \ /* le premier nombre Reel jouant un role tres different des autres, puisqu'il est le seul */ \ /* a etre translate de 'beta'... */ \ Bblock \ FHCinitialisation(q \ ,LIN1(alpha,HReelle(q1),beta) \ ,LIZ1(alpha,HImaginaire(q1)) \ ,LIZ1(alpha,HJmaginaire(q1)) \ ,LIZ1(alpha,HKmaginaire(q1)) \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E Q = A*Q1 + B*Q2 */ /* D E 2 N O M B R E S H Y P E R - C O M P L E X E S */ /* L E S N O M B R E S { A , B } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HCcombinaison_lineaire_2(q,a,q1,b,q2) \ Bblock \ FHCcombinaison_lineaire_2(q,a,q1,b,q2); \ Eblock #define FHCcombinaison_lineaire_2(q,a,q1,b,q2) \ Bblock \ FgHCcombinaison_lineaire_2(q,a,q1,b,q2); \ Eblock #define FgHCcombinaison_lineaire_2(q,a,q1,b,q2) \ Bblock \ FHCinitialisation(q \ ,LIZ2(a,HReelle(q1),b,HReelle(q2)) \ ,LIZ2(a,HImaginaire(q1),b,HImaginaire(q2)) \ ,LIZ2(a,HJmaginaire(q1),b,HJmaginaire(q2)) \ ,LIZ2(a,HKmaginaire(q1),b,HKmaginaire(q2)) \ ); \ Eblock /* Introduit le 20040508121316... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E Q = A*Q1 + B*Q2 + C*Q3 */ /* D E 3 N O M B R E S H Y P E R - C O M P L E X E S */ /* L E S N O M B R E S { A , B , C } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HCcombinaison_lineaire_3(q,a,q1,b,q2,c,q3) \ Bblock \ FHCcombinaison_lineaire_3(q,a,q1,b,q2,c,q3); \ Eblock #define FHCcombinaison_lineaire_3(q,a,q1,b,q2,c,q3) \ Bblock \ DEFV(hyper_complexe,tq3); \ FHCcombinaison_lineaire_2(tq3,b,q2,c,q3); \ FHCcombinaison_lineaire_2(q,a,q1,FU,tq3); \ Eblock /* Introduit le 20220608142417... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E Q = A*Q1 + B*Q2 + C*Q3 + D*Q4 */ /* D E 4 N O M B R E S H Y P E R - C O M P L E X E S */ /* L E S N O M B R E S { A , B , C , D } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HCcombinaison_lineaire_4(q,a,q1,b,q2,c,q3,d,q4) \ Bblock \ FHCcombinaison_lineaire_4(q,a,q1,b,q2,c,q3,d,q4); \ Eblock #define FHCcombinaison_lineaire_4(q,a,q1,b,q2,c,q3,d,q4) \ Bblock \ DEFV(hyper_complexe,tq4); \ FHCcombinaison_lineaire_3(tq4,b,q2,c,q3,d,q4); \ FHCcombinaison_lineaire_2(q,a,q1,FU,tq4); \ Eblock /* Introduit le 20220608142417... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E Q = A*Q1 + B*Q2 + C*Q3 + D*Q4 + E*Q5 */ /* D E 5 N O M B R E S H Y P E R - C O M P L E X E S */ /* L E S N O M B R E S { A , B , C , D , E } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HCcombinaison_lineaire_5(q,a,q1,b,q2,c,q3,d,q4,e,q5) \ Bblock \ FHCcombinaison_lineaire_5(q,a,q1,b,q2,c,q3,d,q4,e,q5); \ Eblock #define FHCcombinaison_lineaire_5(q,a,q1,b,q2,c,q3,d,q4,e,q5) \ Bblock \ DEFV(hyper_complexe,tq5); \ FHCcombinaison_lineaire_4(tq5,b,q2,c,q3,d,q4,e,q5); \ FHCcombinaison_lineaire_2(q,a,q1,FU,tq5); \ Eblock /* Introduit le 20220609083129... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E Q = A*Q1 + B*Q2 + C*Q3 + D*Q4 + E*Q5 + F*Q6 */ /* D E 6 N O M B R E S H Y P E R - C O M P L E X E S */ /* L E S N O M B R E S { A , B , C , D , E , F } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HCcombinaison_lineaire_6(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6) \ Bblock \ FHCcombinaison_lineaire_6(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6); \ Eblock #define FHCcombinaison_lineaire_6(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6) \ Bblock \ DEFV(hyper_complexe,tq6); \ FHCcombinaison_lineaire_5(tq6,b,q2,c,q3,d,q4,e,q5,f,q6); \ FHCcombinaison_lineaire_2(q,a,q1,FU,tq6); \ Eblock /* Introduit le 20220609083129... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E Q = A*Q1 + B*Q2 + C*Q3 + D*Q4 + E*Q5 + F*Q6 + G*Q7 */ /* D E 7 N O M B R E S H Y P E R - C O M P L E X E S */ /* L E S N O M B R E S { A , B , C , D , E , F , G } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HCcombinaison_lineaire_7(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7) \ Bblock \ FHCcombinaison_lineaire_7(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7); \ Eblock #define FHCcombinaison_lineaire_7(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7) \ Bblock \ DEFV(hyper_complexe,tq7); \ FHCcombinaison_lineaire_6(tq7,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7); \ FHCcombinaison_lineaire_2(q,a,q1,FU,tq7); \ Eblock /* Introduit le 20220609083129... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E Q = A*Q1 + B*Q2 + C*Q3 + D*Q4 + E*Q5 + F*Q6 + G*Q7 + H*Q8 */ /* D E 8 N O M B R E S H Y P E R - C O M P L E X E S */ /* L E S N O M B R E S { A , B , C , D , E , F , G , H } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HCcombinaison_lineaire_8(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7,h,q8) \ Bblock \ FHCcombinaison_lineaire_8(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7,h,q8); \ Eblock #define FHCcombinaison_lineaire_8(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7,h,q8) \ Bblock \ DEFV(hyper_complexe,tq8); \ FHCcombinaison_lineaire_7(tq8,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7,h,q8); \ FHCcombinaison_lineaire_2(q,a,q1,FU,tq8); \ Eblock /* Introduit le 20220609083129... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E Q = A*Q1 + B*Q2 + C*Q3 + D*Q4 + E*Q5 + F*Q6 + G*Q7 + H*Q8 + I*Q9 */ /* D E 9 N O M B R E S H Y P E R - C O M P L E X E S */ /* L E S N O M B R E S { A , B , C , D , E , F , G , H , I } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HCcombinaison_lineaire_9(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7,h,q8,i,q9) \ Bblock \ FHCcombinaison_lineaire_9(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7,h,q8,i,q9); \ Eblock #define FHCcombinaison_lineaire_9(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7,h,q8,i,q9) \ Bblock \ DEFV(hyper_complexe,tq9); \ FHCcombinaison_lineaire_8(tq9,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7,h,q8,i,q9); \ FHCcombinaison_lineaire_2(q,a,q1,FU,tq9); \ Eblock /* Introduit le 20220609083129... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* S O M M E Q = Q1 + Q2 D E 2 N O M B R E S H Y P E R - C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define HCsomme(q,q1,q2) \ Bblock \ FHCsomme(q,q1,q2); \ Eblock #define FHCsomme(q,q1,q2) \ Bblock \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HC(FHCsomme_____utiliser_l_arithmetique_etendue \ ,BLOC(FgHCsomme(q,q1,q2);) \ ); \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 # define FgHCsomme(q,q1,q2) \ Bblock \ FHCinitialisation(q \ ,ADD2(HReelle(q1),HReelle(q2)) \ ,ADD2(HImaginaire(q1),HImaginaire(q2)) \ ,ADD2(HJmaginaire(q1),HJmaginaire(q2)) \ ,ADD2(HKmaginaire(q1),HKmaginaire(q2)) \ ); \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FgHCsomme(q,q1,q2) \ Bblock \ FGsomme_difference(H,hyper_complexe,complexe \ ,q \ ,q1,q2 \ ,dHReelle,dHImaginaire \ ,FgCsomme \ ); \ /* ATTENTION, 'H' et 'hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D I F F E R E N C E Q = Q1 - Q2 D E 2 N O M B R E S H Y P E R - C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define HCdifference(q,q1,q2) \ Bblock \ FHCdifference(q,q1,q2); \ Eblock #define FHCdifference(q,q1,q2) \ Bblock \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HC(FHCdifference_____utiliser_l_arithmetique_etendue \ ,BLOC(FgHCdifference(q,q1,q2);) \ ); \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 # define FgHCdifference(q,q1,q2) \ Bblock \ FHCinitialisation(q \ ,SOUS(HReelle(q1),HReelle(q2)) \ ,SOUS(HImaginaire(q1),HImaginaire(q2)) \ ,SOUS(HJmaginaire(q1),HJmaginaire(q2)) \ ,SOUS(HKmaginaire(q1),HKmaginaire(q2)) \ ); \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FgHCdifference(q,q1,q2) \ Bblock \ FGsomme_difference(H,hyper_complexe,complexe \ ,q \ ,q1,q2 \ ,dHReelle,dHImaginaire \ ,FgCdifference \ ); \ /* ATTENTION, 'H' et 'hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R P O L A T I O N Q = A*Q1 + B*Q2 E N T R E 2 N O M B R E S H Y P E R - C O M P L E X E S */ /* L E S N O M B R E S { A , B } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HCinterpolation(q,alpha,q1,beta,q2) \ Bblock \ FHCinterpolation(q,alpha,q1,beta,q2); \ Eblock #define FHCinterpolation(q,alpha,q1,beta,q2) \ Bblock \ FgHCinterpolation(q,alpha,q1,beta,q2); \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 # define FgHCinterpolation(q,alpha,q1,beta,q2) \ Bblock \ FHCinitialisation(q \ ,LIZ2(alpha,HReelle(q1),beta,HReelle(q2)) \ ,LIZ2(alpha,HImaginaire(q1),beta,HImaginaire(q2)) \ ,LIZ2(alpha,HJmaginaire(q1),beta,HJmaginaire(q2)) \ ,LIZ2(alpha,HKmaginaire(q1),beta,HKmaginaire(q2)) \ ); \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FgHCinterpolation(q,alpha,q1,beta,q2) \ Bblock \ FGinterpolation(H,hyper_complexe,complexe \ ,q \ ,alpha,q1,beta,q2 \ ,dHReelle,dHImaginaire \ ,FgCinterpolation \ ); \ /* ATTENTION, 'H' et 'hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P R O D U I T Q = Q1 * Q2 D E 2 N O M B R E S H Y P E R - C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define CHOI1_HC(q1,q2) \ q1 #define CHOI2_HC(q1,q2) \ q2 /* Introduit le 20230323135750 lors de la mise au point de 'v $xiirs/CAYA.W4' image correcte */ /* alors que 'v $xrs/CalabiYau.31.1$I valider_la_qualite_du_calcul_de_q1_et_de_q2' donnait */ /* une erreur peut-etre liee au fait que la multiplication n'est pas commutative dans */ /* les hyper-complexes... */ #define HCproduit(q,q1,q2) \ /* ATTENTION, il convient de ne pas oublier que : */ \ /* */ \ /* q1.q2 # q2.q1 */ \ /* */ \ /* c'est-a-dire que le produit des quaternions n'est pas commutatif... */ \ Bblock \ FHCproduit(q,q1,q2); \ Eblock #define FHCproduit(q,q1,q2) \ Bblock \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HC(FHCproduit_____utiliser_l_arithmetique_etendue \ ,BLOC(FgHCproduit(q,q1,q2);) \ ); \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 # define FgHCproduit(q,q1,q2) \ /* ATTENTION, il convient de ne pas oublier que : */ \ /* */ \ /* q1.q2 # q2.q1 */ \ /* */ \ /* c'est-a-dire que le produit des quaternions n'est pas commutatif... */ \ Bblock \ DEFV(hyper_complexe,q_intermediaire_produit); \ /* Ce nombre hyper-complexe intermediaire est destine a traiter les cas ou par malheur le */ \ /* nombre hyper-complexe resultat 'q' serait identique a l'un des deux arguments ('q' ou */ \ /* 'q2')... */ \ \ FHCinitialisation(q_intermediaire_produit \ ,SOUS(DET2(NEUT(HReelle(q1)),NEUT(HImaginaire(q1)) \ ,NEUT(HImaginaire(q2)),NEUT(HReelle(q2)) \ ) \ ,DET2(NEUT(HJmaginaire(q1)),NEGA(HKmaginaire(q1)) \ ,NEUT(HKmaginaire(q2)),NEUT(HJmaginaire(q2)) \ ) \ ) \ ,ADD2(DET2(NEUT(HReelle(q1)),NEGA(HImaginaire(q1)) \ ,NEUT(HReelle(q2)),NEUT(HImaginaire(q2)) \ ) \ ,DET2(NEUT(HJmaginaire(q1)),NEUT(HKmaginaire(q1)) \ ,NEUT(HJmaginaire(q2)),NEUT(HKmaginaire(q2)) \ ) \ ) \ ,ADD2(DET2(NEUT(HReelle(q1)),NEGA(HJmaginaire(q1)) \ ,NEUT(HReelle(q2)),NEUT(HJmaginaire(q2)) \ ) \ ,DET2(NEUT(HKmaginaire(q1)),NEUT(HImaginaire(q1)) \ ,NEUT(HKmaginaire(q2)),NEUT(HImaginaire(q2)) \ ) \ ) \ ,ADD2(DET2(NEUT(HReelle(q1)),NEGA(HKmaginaire(q1)) \ ,NEUT(HReelle(q2)),NEUT(HKmaginaire(q2)) \ ) \ ,DET2(NEUT(HImaginaire(q1)),NEUT(HJmaginaire(q1)) \ ,NEUT(HImaginaire(q2)),NEUT(HJmaginaire(q2)) \ ) \ ) \ ); \ /* Calcul du produit a destination du nombre hyper-complexe intermediaire. Rappelons que */ \ /* celui-ci n'est pas commutatif... */ \ FHCegal(q,q_intermediaire_produit); \ /* Mise a jour du nombre hyper-complexe resultat... */ \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define HCproduit_theorique(q,q1,q2) \ /* Introduit le 20100329123733... */ \ Bblock \ FHCproduit_theorique(q,q1,q2); \ Eblock # define FHCproduit_theorique(q,q1,q2) \ /* Introduit le 20100329123733... */ \ Bblock \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HC(FHCproduit_____utiliser_l_arithmetique_etendue \ ,BLOC(FgHCproduit_theorique(q,q1,q2);) \ ); \ Eblock # define FgHCproduit_theorique(q,q1,q2) \ /* Introduit le 20100329123733 pour resoudre le probleme de 'v $xtKg/octonions$K' qui */ \ /* provoquait la sortie du message : */ \ /* */ \ /* internal compiler error: in add_stack_var_conflict, at cfgexpand.c:264 */ \ /* */ \ /* sur '$LACT18' du tres certainement au code correspondant au produit non theorique, ce */ \ /* qui devait donner un code "monstrueux"... */ \ /* */ \ /* ATTENTION, il convient de ne pas oublier que : */ \ /* */ \ /* q1.q2 # q2.q1 */ \ /* */ \ /* c'est-a-dire que le produit des quaternions n'est pas commutatif... */ \ Bblock \ begin_nouveau_block \ /* Ceci afin de conserver la tabulation anterieure au 20100329123733 et ainsi valider plus */ \ /* facilement l'introduction de cette procedure... */ \ Bblock \ FGproduit(H,hyper_complexe,complexe \ ,q \ ,q1,q2 \ ,dHReelle,dHImaginaire \ ,FgCegal \ ,FgCconjugaison \ ,FgCsomme \ ,FgCdifference \ ,FgCproduit \ ); \ /* ATTENTION, 'H' et 'hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ \ Eblock \ end_nouveau_block \ Eblock # define FgHCproduit(q,q1,q2) \ Bblock \ Test(IL_FAUT(FHCproduit_____utiliser_la_definition_theorique_du_produit)) \ /* Test introduit le 20091119084209... */ \ Bblock \ FHCproduit_theorique(q,q1,q2); \ /* ATTENTION, 'H' et 'hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ \ Eblock \ ATes \ Bblock \ /* Sequence introduite le 20091119084209... */ \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HC \ (FHCproduit_____utiliser_l_arithmetique_etendue \ /* L'arithmetique etendue a ete introduite pour le "faux" produit le 20091127072846... */ \ ,BLOC( \ Bblock \ Test(IL_FAUT(FHCproduit_____utiliser_l_arithmetique_etendue_dans_CxC)) \ /* Test introduit le 20120918142202... */ \ Bblock \ FCproduit(dHReelle(q) \ ,dHReelle(q1) \ ,dHReelle(q2) \ ); \ FCproduit(dHImaginaire(q) \ ,dHImaginaire(q1) \ ,dHImaginaire(q2) \ ); \ /* Produit dans CxC... */ \ /* */ \ /* Mais le 20120918163456 je note que ce n'est certainement pas comme cela que l'on fait le */ \ /* produit dans CxC car il y a independance entre les deux plans C et donc lors de calculs */ \ /* de fractales on retombera sur des choses tres classiques (l'ensemble de Mandelbrot dans */ \ /* C par exemple...). */ \ Eblock \ ATes \ Bblock \ DEFV(hyper_complexe_etendu,q1_etendu); \ DEFV(hyper_complexe_etendu,q2_etendu); \ /* Nombres hyper-complexes arguments du "faux" produit introduits le 20091130103950 dans */ \ /* l'idee d'introduire des combinaisons plus compliquees et par exemple des polynomes. */ \ /* L'introduction de 'HORNER_2_02(...)' a eu lieu le 20091130111700... */ \ DEFV(hyper_complexe_etendu,q_etendu_1); \ DEFV(hyper_complexe_etendu,q_etendu_2); \ /* Nombre hyper-complexe resultat du "faux" produit avant (1) et apres (2) combinaisons */ \ /* lineaires (introduites le 20091127081738)... */ \ \ FHCextension_directe(q1_etendu,q1); \ FHCextension_directe(q2_etendu,q2); \ /* Introduit sous cette forme le 20111230092602... */ \ \ /* On notera le 20111007122014 que lors du calcul de produits du type : */ \ /* */ \ /* 1*q */ \ /* */ \ /* ('v $xiirc/POLY.B2.2$R16'), les monomes de 'HORNER_2_02(...)' qui referencent les deux */ \ /* angles (soit {22,21,12,11}) sont nuls a cause donc du quaternion "1" (dont les trois */ \ /* arguments -angles- sont nuls) dans le produit "1*q". Seuls sont donc alors interessants */ \ /* les monomes {20,10,02,01,00}... */ \ \ EGAL(HCHS_Rho(q_etendu_1) \ ,HORNER_2_02(HCHS_Rho(q1_etendu) \ ,HCHS_Rho(q2_etendu) \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_R2R2 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_R2R1 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_R2R0 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_R1R2 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_R1R1 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_R1R0 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_R0R2 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_R0R1 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_R0R0 \ ) \ ); \ EGAL(HCHS_Theta(q_etendu_1) \ ,HORNER_2_02(HCHS_Theta(q1_etendu) \ ,HCHS_Theta(q2_etendu) \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_T2T2 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_T2T1 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_T2T0 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_T1T2 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_T1T1 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_T1T0 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_T0T2 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_T0T1 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_T0T0 \ ) \ ); \ EGAL(HCHS_Phi(q_etendu_1) \ ,HORNER_2_02(HCHS_Phi(q1_etendu) \ ,HCHS_Phi(q2_etendu) \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_P2P2 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_P2P1 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_P2P0 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_P1P2 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_P1P1 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_P1P0 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_P0P2 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_P0P1 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_P0P0 \ ) \ ); \ EGAL(HCHS_Alpha(q_etendu_1) \ ,HORNER_2_02(HCHS_Alpha(q1_etendu) \ ,HCHS_Alpha(q2_etendu) \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_A2A2 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_A2A1 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_A2A0 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_A1A2 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_A1A1 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_A1A0 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_A0A2 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_A0A1 \ ,FHCproduit_____avec_le_produit_non_theorique__Horner_A0A0 \ ) \ ); \ /* Calcul des quatre composantes etendues de 'q'... */ \ /* */ \ /* Evidemment ce calcul est faux mathematiquement parlant, mais il s'agit d'une analogie */ \ /* et d'une extension avec ce qu'il se passe dans les complexes. En effet, soit alors deux */ \ /* complexes definis en coordonnees polaires {rho1,theta1} et {rho2,theta2}. Leur produit */ \ /* est defini par : */ \ /* */ \ /* {rho1,theta1}.{rho2,theta2} = {rho1.rho2,theta1+theta2} */ \ /* */ \ /* c'est-a-dire que les modules sont multiplies et les arguments additionnes. Il va donc */ \ /* en etre de meme avec les hyper-complexes : les modules seront multiplies et les trois */ \ /* angles differents (soit {theta,phi,alpha}) seront additionnes... */ \ /* */ \ /* Cette methode fut introduite le 20091119084209... */ \ /* */ \ /* Les {ponderation,translation} ont ete introduites le 20091120112630... */ \ \ EGAL(HCHS_Rho(q_etendu_2) \ ,PUIX(AXPB(FHCproduit_____avec_le_produit_non_theorique__ponder1_Rho__ \ ,HCHS_Rho(q_etendu_1) \ ,FHCproduit_____avec_le_produit_non_theorique__transl1_Rho__ \ ) \ ,FHCproduit_____avec_le_produit_non_theorique__exposa1_Rho__ \ ) \ ); \ /* Le 20100112154849 fut introduit 'exposa1_Rho__'. L'idee etant de pouvoir simuler une */ \ /* exponentiation dans 'FgHCpuissance(...)' meme avec 'exposant=1'. Ainsi, dans le plan */ \ /* Complexe (pour simplifier), on fera : */ \ /* */ \ /* exposant = 1 */ \ /* exposa1_Rho__ = 2 */ \ /* ponder1_Theta_ = 2 */ \ /* */ \ /* et ainsi, on calculera le carre du module et le double de l'argument. En particulier en */ \ /* utilisant alors le polynome : */ \ /* */ \ /* 1*q + constante */ \ /* */ \ /* on pourra calculer un ensemble du type Mandelbrot (ou Julia)... */ \ /* */ \ /* On notera au passage la "symetrie" entre le calcul de 'Rho' a partir de 'exposa1_Rho__' */ \ /* et de {Theta,Phi,Alpha} a partir de {ponder1_Theta_,ponder1_Phi__,ponder1_Alpha} le */ \ /* premier etant multiplicatif via 'PUIX(...)' : */ \ /* */ \ /* PUIX(Rho,N) = Rho * Rho * ... * Rho (N fois) */ \ /* */ \ /* et le second additif via 'AXPB(...)' : */ \ /* */ \ /* AXPB(N,Angle,0) = Angle + Angle + ... + Angle (N fois) */ \ /* */ \ \ EGAL(HCHS_Theta(q_etendu_2) \ ,OPC1(IL_FAUT(FHCproduit_____avec_le_produit_non_theorique__modulo_Theta_) \ ,CERC \ ,NEUT \ ,AXPB(FHCproduit_____avec_le_produit_non_theorique__ponder1_Theta_ \ ,LIN3(FHCproduit_____avec_le_produit_non_theorique__ponder2_Theta_Theta_ \ ,HCHS_Theta(q_etendu_1) \ ,FHCproduit_____avec_le_produit_non_theorique__ponder2_Theta_Phi__ \ ,HCHS_Phi(q_etendu_1) \ ,FHCproduit_____avec_le_produit_non_theorique__ponder2_Theta_Alpha \ ,HCHS_Alpha(q_etendu_1) \ ,FHCproduit_____avec_le_produit_non_theorique__transl2_Theta_ \ ) \ ,FHCproduit_____avec_le_produit_non_theorique__transl1_Theta_ \ ) \ ) \ ); \ EGAL(HCHS_Phi(q_etendu_2) \ ,OPC1(IL_FAUT(FHCproduit_____avec_le_produit_non_theorique__modulo_Theta_) \ ,CERC \ ,NEUT \ ,AXPB(FHCproduit_____avec_le_produit_non_theorique__ponder1_Phi__ \ ,LIN3(FHCproduit_____avec_le_produit_non_theorique__ponder2_Phi__Theta_ \ ,HCHS_Theta(q_etendu_1) \ ,FHCproduit_____avec_le_produit_non_theorique__ponder2_Phi__Phi__ \ ,HCHS_Phi(q_etendu_1) \ ,FHCproduit_____avec_le_produit_non_theorique__ponder2_Phi__Alpha \ ,HCHS_Alpha(q_etendu_1) \ ,FHCproduit_____avec_le_produit_non_theorique__transl2_Phi__ \ ) \ ,FHCproduit_____avec_le_produit_non_theorique__transl1_Phi__ \ ) \ ) \ ); \ EGAL(HCHS_Alpha(q_etendu_2) \ ,OPC1(IL_FAUT(FHCproduit_____avec_le_produit_non_theorique__modulo_Theta_) \ ,CERC \ ,NEUT \ ,AXPB(FHCproduit_____avec_le_produit_non_theorique__ponder1_Alpha \ ,LIN3(FHCproduit_____avec_le_produit_non_theorique__ponder2_AlphaTheta_ \ ,HCHS_Theta(q_etendu_1) \ ,FHCproduit_____avec_le_produit_non_theorique__ponder2_AlphaPhi__ \ ,HCHS_Phi(q_etendu_1) \ ,FHCproduit_____avec_le_produit_non_theorique__ponder2_AlphaAlpha \ ,HCHS_Alpha(q_etendu_1) \ ,FHCproduit_____avec_le_produit_non_theorique__transl2_Alpha \ ) \ ,FHCproduit_____avec_le_produit_non_theorique__transl1_Alpha \ ) \ ) \ ); \ /* Le 20100210170625 fut introduit la possibilite de gerer modulo 2.pi {Theta_,Phi__,Alpha}, */ \ /* ceci etant inhibe par defaut pour des raisons de compatibilite anterieure. Au passage, le */ \ /* je ne suis pas sur que l'utilisation de cette option change quelque chose. */ \ /* */ \ /* Le 20100210182653, je note que l'utilisation de ponderations non entieres pour les */ \ /* angles conduit a des discontinuites. Ainsi, par exemple, une ponderation non entiere */ \ /* de 'Theta' donne une discontinuite au passage de l'axe reel positif. Cela se voit, par */ \ /* exemple avec : */ \ /* */ \ /* $xrc/mandel.41$X images=1 \ */ \ /* iterations=10 \ */ \ /* produit_non_theorique=VRAI \ */ \ /* exposant=1 eRHo=2 pTheta=2 \ */ \ /* (...) */ \ /* */ \ /* qui donne l'ensemble de Mandelbrot. Changer 2 en 1.7 (valeur arbitraire non entiere) */ \ /* en ce qui concerne "pTheta=" fait apparaitre violemment cette discontinuite... */ \ \ FHCextension_inverse(q,q_etendu_2); \ /* Afin de comprendre 'v http://www.skytopia.com/project/fractal/mandelbulb.html', le */ \ /* 20091127073622, j'ai explicite les calculs effectivement effectues. Les deux quaternions */ \ /* Arguments {q1,q2} sont convertits en coordonnees hyper-spheriques suivant : */ \ /* */ \ /* __________________ */ \ /* / 2 2 2 2 */ \ /* rho = \/ x + y + z + t */ \ /* */ \ /* */ \ /* y */ \ /* theta = ArcTg(---) */ \ /* x */ \ /* */ \ /* ________ */ \ /* / 2 2 */ \ /* \/ x + y pi */ \ /* phi = ArcTg(-------------) - ---- */ \ /* z 2 */ \ /* */ \ /* _____________ */ \ /* / 2 2 2 */ \ /* \/ x + y + z pi */ \ /* alpha = ArcTg(------------------) - ---- */ \ /* t 2 */ \ /* */ \ /* puis : */ \ /* */ \ /* pi pi */ \ /* X = rho*cos(theta)*sin(phi+----)*sin(alpha+----) */ \ /* 2 2 */ \ /* */ \ /* pi pi */ \ /* Y = rho*sin(theta)*sin(phi+----)*sin(alpha+----) */ \ /* 2 2 */ \ /* */ \ /* pi pi */ \ /* Z = rho*cos(phi+----)*sin(alpha+----) */ \ /* 2 2 */ \ /* */ \ /* pi */ \ /* T = rho*cos(alpha+----) */ \ /* 2 */ \ /* */ \ /* (en notant donc bien que les -pi/2 et +pi/2 se compensent et peuvent donc etre ignores) */ \ /* alors que sur 'v http://www.skytopia.com/project/fractal/mandelbulb.html', les */ \ /* definitions sont les suivantes : */ \ /* */ \ /* __________________ */ \ /* / 2 2 2 2 */ \ /* rho = \/ x + y + z + t */ \ /* */ \ /* */ \ /* y */ \ /* PHI = ArcTg(---) */ \ /* x */ \ /* */ \ /* ________ */ \ /* / 2 2 */ \ /* \/ x + y */ \ /* THETA = ArcTg(-------------) */ \ /* z */ \ /* */ \ /* d'apres le source original '$c' suivant : */ \ /* */ \ /* r = sqrt(x*x + y*y + z*z); */ \ /* theta = atan2(sqrt(x*x + y*y),z); */ \ /* phi = atan2(y,x); */ \ /* */ \ /* newx = r^n * cos(phi*n) * sin(theta*n); */ \ /* newy = r^n * sin(phi*n) * sin(theta*n); */ \ /* newz = r^n * cos(theta*n); */ \ /* */ \ /* puis : */ \ /* */ \ /* X = rho*cos(PHI)*sin(THETA) */ \ /* */ \ /* Y = rho*sin(PHI)*sin(THETA) */ \ /* */ \ /* Z = rho*cos(THETA) */ \ /* */ \ /* d'ou les correspondances : */ \ /* */ \ /* theta <--> PHI */ \ /* */ \ /* phi <--> THETA */ \ /* */ \ /* alpha <--> 0 */ \ /* */ \ /* d'ou les combinaisons lineaires introduites le 20091127081738... */ \ /* */ \ /* Introduit sous cette forme le 20111230092602... */ \ Eblock \ ETes \ Eblock \ ) \ ); \ Eblock \ ETes \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N */ /* P U I S S A N C E N - I E M E Q = Q1 ( P O S I T I V E O U N E G A T I V E ) */ /* D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HCpuissance(q,q1,exposant) \ Bblock \ FHCpuissance(q,q1,exposant); \ Eblock #define FHCpuissance(q,q1,exposant) \ Bblock \ FgHCpuissance(q,q1,exposant); \ Eblock #define FgHCpuissance(q,q1,exposant) \ /* Definition introduite le 20091118105839... */ \ Bblock \ Test(EST_ENTIER(exposant)) \ /* Test introduit le 20100608133537 pour plus de generalite... */ \ Bblock \ DEFV(hyper_complexe,q_cumul_multiplicatif); \ FHCegal(q_cumul_multiplicatif,HC_____quaternion_p1__0__0__0); \ /* Nombre complexe intermediaire donnant le "cumul multiplicatif" courant. Il est */ \ /* initialise ici a {1,0,0,0} et c'est cette valeur qui est renvoyee en cas d'erreur... */ \ /* */ \ /* On notera le 20091223094639 qu'il n'est pas possible d'optimiser cette sequence en */ \ /* faisant une iteration de moins via l'initialisation : */ \ /* */ \ /* FHCegal(q_cumul_multiplicatif,q1); */ \ /* */ \ /* puis : */ \ /* */ \ /* Repe(TRMU(exposant)) */ \ /* */ \ /* a cause du cas de l'exposant nul pour lequel le resultat est {1,0,0,0}. D'autre part */ \ /* dans le cas 'IL_NE_FAUT_PAS(FHCproduit_____utiliser_la_definition_theorique_du_produit)' */ \ /* les deux methodes ne donneraient pas le meme resultat sauf cas particuliers... */ \ /* */ \ /* Dans le cas 'IL_NE_FAUT_PAS(FHCproduit_____utiliser_la_definition_theorique_du_produit)' */ \ /* je note le 20100104120855 qu'en baptisant 'E' la fonction 'FHCpuissance(...)' (pour */ \ /* "Exponentielle") et 'P' la fonction 'FHCproduit(...)' (pour "Produit"), on a par */ \ /* definition : */ \ /* */ \ /* P(x,y) = a*(x+y) + b */ \ /* */ \ /* E(t,n) = P(E(t,n-1),t) */ \ /* */ \ /* puis ("I" etant qualifie par ailleurs de "Element Neutre") : */ \ /* */ \ /* E(t,0) = I */ \ /* */ \ /* E(t,1) = P(E(t,0),t) */ \ /* = a*(E(t,0) + t) + b */ \ /* = a*E(t,0) + a*t + b */ \ /* = a*I + a*t + b */ \ /* */ \ /* E(t,2) = P(E(t,1),t) */ \ /* = a*(E(t,1) + t) + b */ \ /* = a*E(t,1) + a*t + b */ \ /* = a*(a*I + a*t + b) + a*t + b */ \ /* = a*a*I + a*a*t + a*b + a*t + b */ \ /* = a*a*I + a*a*t + a*t + a*b + b */ \ /* = a*a*I + a*(a*t + t) + a*b + b */ \ /* = a*a*I + a*(a + 1)*t + (a + 1)*b */ \ /* ===== ===== */ \ /* */ \ /* E(t,3) = P(E(t,2),t) */ \ /* = a*(E(t,2) + t) + b */ \ /* = a*E(t,2) + a*t + b */ \ /* = a*(a*a*I + a*a*t + a*t + a*b + b) + a*t + b */ \ /* = a*a*a*I + a*a*a*t + a*a*t + a*a*b + a*b + a*t + b */ \ /* = a*a*a*I + a*a*a*t + a*a*t + a*t + a*a*b + a*b + b */ \ /* = a*a*a*I + a*(a*a*t + a*t + t) + a*a*b + a*b + b */ \ /* = a*a*a*I + a*(a*a + a + 1)*t + (a*a + a + 1)*b */ \ /* =========== =========== */ \ /* */ \ /* d'ou en posant : */ \ /* */ \ /* n */ \ /* n-1 n-2 2 1 0 a - 1 */ \ /* S(a,n) = a + a + ... + a + a + a = -------- */ \ /* a-1 */ \ /* */ \ /* la formule generale : */ \ /* */ \ /* n */ \ /* E(t,n) = a*S(a,n)*t + S(a,n)*b + a *I */ \ /* */ \ /* E(t,n) = A*n*t + B */ \ /* */ \ /* avec : */ \ /* */ \ /* 1 */ \ /* A = ---*a*S(a,n) */ \ /* n */ \ /* */ \ /* n */ \ /* B = S(a,n)*b + a *I */ \ /* */ \ /* d'ou l'on pourra esperer calculer les valeurs de 'a' et de 'b' pour 'A' et 'B' donnes */ \ /* ('v $xcg/EquaPnThQ.01$K')... */ \ /* */ \ /* Mais ATTENTION : je note le 20100109100459 que cela ne marche pas tres bien car, en */ \ /* effet, dans le cas ou 'a' est un angle, il est "modulo" dans [0,2.pi] ce que ne prennent */ \ /* pas en compte les formules precedentes ! */ \ \ Test(IFGE(exposant,ZERO)) \ Bblock \ Repe(NEUT(exposant)) \ Bblock \ FHCproduit(q_cumul_multiplicatif,q_cumul_multiplicatif,q1); \ /* On notera le 20230324100530 la question problematique suivante. En effet, pour les */ \ /* hyper-hyper-complexes, la multiplication n'est pas commutative : */ \ /* */ \ /* q1.q2 # q2.q1 (en general...) */ \ /* */ \ /* En ce qui concerne la puissance, on a par exemple pour un exposant egal a 3 : */ \ /* */ \ /* q1^3 = q1.q1.q1 */ \ /* */ \ /* Or lors du calcul iteratif precedent, l'ordre entre 'q_cumul_multiplicatif' et 'q1' est */ \ /* en fait arbitraire. Doit-on utiliser : */ \ /* */ \ /* q1.q1.q1 = q1.(q1.q1) */ \ /* */ \ /* ou bien : */ \ /* */ \ /* q1.q1.q1 = (q1.q1).q1 */ \ /* */ \ /* Or, en toute generalite, on a cause de la non commutativite : */ \ /* */ \ /* q1.(q1.q1) # (q1.q1).q1 */ \ /* \___/ \___/ */ \ /* q2 q2 */ \ /* */ \ /* Alors que faire ? Au passage, cette interrogation peut etre etendue a toutes les */ \ /* fonctions et a tous les operateurs un peu "compliques" definis par ailleurs comme, */ \ /* par exemple, les lignes trigonometriques, l'exponentielle, le logarithme,... */ \ Eblock \ ERep \ Eblock \ ATes \ Bblock \ Repe(NEGA(exposant)) \ Bblock \ FHCquotient(q_cumul_multiplicatif,q_cumul_multiplicatif,q1); \ /* La possibilite de calculer des puissances negatives a ete introduite le 20100316171635. */ \ Eblock \ ERep \ Eblock \ ETes \ \ FHCegal(q,q_cumul_multiplicatif); \ Eblock \ ATes \ Bblock \ DEFV(hyper_complexe,q_exposant); \ /* Exposant hyper-complexe. */ \ \ FHCinitialisation(q_exposant \ ,exposant \ ,I0_Quaternion \ ,J0_Quaternion \ ,K0_Quaternion \ ); \ /* Calcul de : */ \ /* */ \ /* exposant + i.0 + j.0 + k.0 */ \ /* */ \ FHCexponentielle_quaternionique(q \ ,q1 \ ,q_exposant \ ); \ /* Calcul de : */ \ /* */ \ /* exposant + i.0 + j.0 + k.0 */ \ /* q1 */ \ /* */ \ /* (introduit le 20100608133537 pour plus de generalite qu'un exposant entier). */ \ Eblock \ ETes \ \ Test(IL_FAUT(FHCpuissance_____editer_Argument_et_resultat)) \ Bblock \ CAL3(Prme8("{%+.^^^,%+.^^^,%+.^^^,%+.^^^}={%+.^^^,%+.^^^,%+.^^^,%+.^^^}" \ ,HReelle(q1),HImaginaire(q1),HJmaginaire(q1),HKmaginaire(q1) \ ,HCmodule(q1),HCargumentT_2PI(q1),HCargumentP_2PI(q1),HCargumentA_2PI(q1) \ ) \ ); \ CAL3(Prme2("%s%+.^^^","^",exposant)); \ /* Introduit le 20230321150810 pour "expertiser" 'v $xrs/$xrs/CalabiYau.42$K' lors de */ \ /* la generation de 'v $xiirs/CAYA.W4'... */ \ /* */ \ /* On notera que l'on ne peut ecrire : */ \ /* */ \ /* CAL3(Prme1("^%+.^^^",exposant)); */ \ /* */ \ /* qui edite un "0" a la place du premier "^"... */ \ CALS(FPrme0(" --> ")); \ CAL3(Prme8("{%+.^^^,%+.^^^,%+.^^^,%+.^^^}={%+.^^^,%+.^^^,%+.^^^,%+.^^^}" \ ,HReelle(q),HImaginaire(q),HJmaginaire(q),HKmaginaire(q) \ ,HCmodule(q),HCargumentT_2PI(q),HCargumentP_2PI(q),HCargumentA_2PI(q) \ ) \ ); \ CALS(Fsauts_de_lignes(UN)); \ /* Introduit le 20100108213922 afin de pouvoir "expertiser" 'v $xcg/EquaPnThQ.01$K'... */ \ /* */ \ /* Le 20100111152430, je note une petite difficulte. Supposons que 'exposant' ait la */ \ /* valeur 1 (donc une seule iteration de 'FHCproduit(...)' ci-dessus) ; supposons de */ \ /* plus que toutes les 'FHCproduit_____avec_le_produit_non_theorique__ponder2' */ \ /* soient nulles sauf : */ \ /* */ \ /* ponder2_Theta_Theta_ = 8 */ \ /* ponder2_Phi__Phi__ = 8 */ \ /* ponder2_AlphaAlpha = 8 */ \ /* */ \ /* (8 etant une valeur arbitraire superieure a 1). On pouvait donc s'attendre a trouver */ \ /* ci-dessus : */ \ /* */ \ /* HCargumentT_2PI(q) = 8*HCargumentT_2PI(q1) */ \ /* HCargumentP_2PI(q) = 8*HCargumentP_2PI(q1) */ \ /* HCargumentA_2PI(q) = 8*HCargumentA_2PI(q1) */ \ /* */ \ /* or, dans le cas general, il n'en est rien. Cela vient du fait que les quaternions */ \ /* sont ecrits en coordonnees cartesiennes ; le passage en coordonnees hyper-spheriques */ \ /* est temporaire. Et donc la relation de proportionnalite (a 8) ci-dessus n'est verifiee */ \ /* que tant que l'on est et que l'on reste en coordonnees hyper-spheriques, c'est-a-dire a */ \ /* l'interieur de la procedure 'FgHCproduit(...)', lors du calcul du faux produit et avant */ \ /* le retour aux coordonnees cartesiennes. Apres celui-ci, il est trop tard et c'est le cas */ \ /* ci-dessus lors de l'utilisation de 'HCargumentT_2PI(...)', 'HCargumentP_2PI(...)' et */ \ /* 'HCargumentA_2PI(...)' ou les trois angles {Theta,Phi,Alpha} ont ete remis dans [0,2.pi]. */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A.Q1 + B */ /* F O R M E H O M O G R A P H I Q U E Q = ---------- D E 2 N O M B R E S H Y P E R - C O M P L E X E S */ /* C.Q2 + D */ /* */ /* L E S N O M B R E S ' A ' , ' B ' , ' C ' E T ' D ' E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HCforme_homographique(q,alpha,q1,beta,gamma,q2,delta) \ Bblock \ FHCforme_homographique(q,alpha,q1,beta,gamma,q2,delta); \ Eblock #define FHCforme_homographique(q,alpha,q1,beta,gamma,q2,delta) \ Bblock \ FgHCforme_homographique(q,alpha,q1,beta,gamma,q2,delta); \ Eblock #define FgHCforme_homographique(q,alpha,q1,beta,gamma,q2,delta) \ /* Definition introduite le 20091021150516... */ \ Bblock \ DEFV(hyper_complexe,q___numerateur); \ DEFV(hyper_complexe,q_denominateur); \ /* Numerateur et denominateur de la forme homographique. */ \ \ FHCforme_lineaire(q___numerateur,alpha,q1,beta); \ /* Calcul de : */ \ /* */ \ /* A.q1 + B */ \ /* */ \ FHCforme_lineaire(q_denominateur,gamma,q2,delta); \ /* Calcul de : */ \ /* */ \ /* C.q2 + D */ \ /* */ \ \ FHCquotient(q,q___numerateur,q_denominateur); \ /* Mise a jour du nombre complexe resultat : */ \ /* */ \ /* A.q1 + B */ \ /* ---------- */ \ /* C.q2 + D */ \ /* */ \ /* en notant qu'en general les deux nombres 'q1' et 'q2' sont identiques... */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* -- */ /* Q1 Q1.Q2 */ /* Q U O T I E N T Q = ---- = ------- D E 2 N O M B R E S H Y P E R - C O M P L E X E S : */ /* Q2 2 */ /* |Q2| */ /* */ /*************************************************************************************************************************************/ #define HCquotient(q,q1,q2) \ Bblock \ FHCquotient(q,q1,q2); \ Eblock #define FHCquotient(q,q1,q2) \ Bblock \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HC(FHCquotient_____utiliser_l_arithmetique_etendue \ ,BLOC(FgHCquotient(q,q1,q2);) \ ); \ Eblock #define FgHCquotient(q,q1,q2) \ /* ATTENTION, pendant longtemps j'ai ecrit : */ \ /* */ \ /* Bblock */ \ /* DEFV(hyper_complexe,q_intermediaire); */ \ /* FHCinitialisation(q_intermediaire */ \ /* ,DIVZ(SOUS(DET2(NEUT(HReelle(q1)),NEUT(HImaginaire(q1)) */ \ /* ,NEUT(CHImaginaire(q2)),NEUT(CHReelle(q2)) */ \ /* ) */ \ /* ,DET2(NEUT(HJmaginaire(q1)),NEGA(HKmaginaire(q1)) */ \ /* ,NEUT(CHKmaginaire(q2)),NEUT(CHJmaginaire(q2)) */ \ /* ) */ \ /* ) */ \ /* ,HCmodule2(q2) */ \ /* ) */ \ /* ,DIVZ(ADD2(DET2(NEUT(HReelle(q1)),NEGA(HImaginaire(q1)) */ \ /* ,NEUT(CHReelle(q2)),NEUT(CHImaginaire(q2)) */ \ /* ) */ \ /* ,DET2(NEUT(HJmaginaire(q1)),NEUT(HKmaginaire(q1)) */ \ /* ,NEUT(CHJmaginaire(q2)),NEUT(CHKmaginaire(q2)) */ \ /* ) */ \ /* ) */ \ /* ,HCmodule2(q2) */ \ /* ) */ \ /* ,DIVZ(ADD2(DET2(NEUT(HReelle(q1)),NEGA(HJmaginaire(q1)) */ \ /* ,NEUT(CHReelle(q2)),NEUT(CHJmaginaire(q2)) */ \ /* ) */ \ /* ,DET2(NEUT(HKmaginaire(q1)),NEUT(HImaginaire(q1)) */ \ /* ,NEUT(CHKmaginaire(q2)),NEUT(CHImaginaire(q2)) */ \ /* ) */ \ /* ) */ \ /* ,HCmodule2(q2) */ \ /* ) */ \ /* ,DIVZ(ADD2(DET2(NEUT(HReelle(q1)),NEGA(HKmaginaire(q1)) */ \ /* ,NEUT(CHReelle(q2)),NEUT(CHKmaginaire(q2)) */ \ /* ) */ \ /* ,DET2(NEUT(HImaginaire(q1)),NEUT(HJmaginaire(q1)) */ \ /* ,NEUT(CHImaginaire(q2)),NEUT(CHJmaginaire(q2)) */ \ /* ) */ \ /* ) */ \ /* ,HCmodule2(q2) */ \ /* ) */ \ /* ); */ \ /* FHCegal(q,q_intermediaire); */ \ /* Eblock */ \ /* */ \ /* mais cela n'etait pas tres elegant... */ \ /* */ \ /* ATTENTION, il n'est pas utile de definir quelque chose du type : */ \ /* */ \ /* # define FGquotient(prefixe,corps,sous_corps,...) \ */ \ /* (...) */ \ /* */ \ /* puique la definition qui suit n'utilise que des fonctions du type 'FHC...(...)' qui sont */ \ /* de haut niveau et ne font aucunes hypotheses sur les structures de base... */ \ Bblock \ DEFV(hyper_complexe,q2_barre); \ /* Ce nombre hyper-complexe est le conjugue du nombre hyper-complexe argument 'q2'. */ \ DEFV(hyper_complexe,q_intermediaire_quotient_1); \ DEFV(hyper_complexe,q_intermediaire_quotient_2); \ /* Ces deux nombres hyper-complexes intermediaires sont destines a traiter les cas ou par */ \ /* malheur le nombre hyper-complexe resultat 'q' serait identique a l'un des deux arguments */ \ /* 'q1' ou 'q2'. */ \ \ FHCconjugaison(q2_barre,q2); \ /* Calcul de : */ \ /* */ \ /* -- */ \ /* q2 */ \ /* */ \ FHCproduit(q_intermediaire_quotient_1,q1,q2_barre); \ /* Calcul de : */ \ /* */ \ /* -- */ \ /* q1.q2 */ \ /* */ \ FHCforme_lineaire(q_intermediaire_quotient_2,fINVZ(FHCmodule2(q2)),q_intermediaire_quotient_1,FZERO); \ /* Calcul de : */ \ /* */ \ /* -- */ \ /* q1.q2 */ \ /* ------- */ \ /* 2 */ \ /* |q2| */ \ /* */ \ /* Le 20071201105511 'INVZ(...)' fut remplace tardivement par 'fINVZ(...)'... */ \ FHCegal(q,q_intermediaire_quotient_2); \ /* Mise a jour du nombre hyper-complexe resultat... */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 1 */ /* I N V E R S E Q = ---- D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* Q1 */ /* */ /*************************************************************************************************************************************/ #define HCinverse(q,q1) \ Bblock \ FHCinverse(q,q1); \ Eblock #define FHCinverse(q,q1) \ Bblock \ FgHCinverse(q,q1); \ Eblock #define FgHCinverse(q,q1) \ /* Ces definitions furent introduites le 20060425154232... */ \ Bblock \ FHCquotient(q,HC_____quaternion_p1__0__0__0,q1); \ /* Calcul de : */ \ /* */ \ /* 1 */ \ /* ---- */ \ /* q1 */ \ /* */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 2 */ /* N O R M E O U M O D U L E A U C A R R E | Q | D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HCmodule2(q) \ FHCmodule2(q) #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 # define FHCmodule2(q) \ CRho_4D(HReelle(q),HImaginaire(q),HJmaginaire(q),HKmaginaire(q)) /* ATTENTION, on notera que l'on ne peut pas definir la norme par : */ /* */ /* - */ /* N(q) = q.q */ /* */ /* car en effet le produit 'FHCproduit(...)' fait intervenir des variables intermediaires */ /* qui sont incompatibles avec l'utilisation de 'FHCmodule2(...)' en tant que scalaire */ /* dans des expressions... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FHCmodule2(q) \ FGmodule2(H,hyper_complexe,complexe \ ,q \ ,dHReelle,dHImaginaire \ ,Cmodule2 \ ) \ /* ATTENTION, 'H' et 'hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M O D U L E | Q | D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HC_MODULE_UNITAIRE \ FU #define HCmodule(q) \ FHCmodule(q) #define FHCmodule(q) \ RACX(FHCmodule2(q)) /* ATTENTION, il n'est pas utile de definir quelque chose du type : */ /* */ /* # define FGmodule(prefixe,corps,sous_corps,...) \ */ /* (...) */ /* */ /* puique la definition qui suit n'utilise que des fonctions du type 'FHC...(...)' qui sont */ /* de haut niveau et ne font aucunes hypotheses sur les structures de base... */ #define LogHCmodule(z) \ LOGX(HCmodule(z)) \ /* Introduit le 20180927085818 pour son utilite en geometrie "tropicale" (anciennement */ \ /* appelee "MAX-PLUS"...). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* " R E D U C T I O N " D E S C O M P O S A N T E S D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /* */ /* Definition : */ /* */ /* On appelera "reduction" des composantes */ /* d'un nombre hyper-complexe 'q', le nombre */ /* reel suivant : */ /* */ /* cR.R(q)+cI.I(q)+cJ.J(q)+cK.K(q) */ /* */ /* ou 'R(q)', par exemple, designe la partie Reelle */ /* de 'q'. */ /* */ /* */ /*************************************************************************************************************************************/ #define HCreduction(q,coefficientR,coefficientI,coefficientJ,coefficientK) \ FHCreduction(q,coefficientR,coefficientI,coefficientJ,coefficientK) #define FHCreduction(q,coefficientR,coefficientI,coefficientJ,coefficientK) \ /* ATTENTION, il n'est pas utile de definir quelque chose du type : */ \ /* */ \ /* # define FGreduction(prefixe,corps,sous_corps,...) \ */ \ /* (...) */ \ /* */ \ /* puique la definition qui suit n'utilise que des fonctions du type 'FHC...(...)' qui sont */ \ /* de haut niveau et ne font aucunes hypotheses sur les structures de base... */ \ LIZ4(coefficientR,HReelle(q) \ ,coefficientI,HImaginaire(q) \ ,coefficientJ,HJmaginaire(q) \ ,coefficientK,HKmaginaire(q) \ ) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* -- */ /* T R A C E Q = Q1 + Q1 D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /* */ /* Rappel : */ /* */ /* Si N(q) et T(q) designent respectivement */ /* la norme et la trace du nombre hyper-complexe 'q', */ /* on a : */ /* */ /* 2 */ /* q - T(q).q + N(q) = 0 */ /* */ /* */ /*************************************************************************************************************************************/ #define HCtrace(q,q1) \ Bblock \ FHCtrace(q,q1); \ Eblock #define FHCtrace(q,q1) \ Bblock \ FgHCtrace(q,q1); \ Eblock #define FgHCtrace(q,q1) \ /* ATTENTION, il n'est pas utile de definir quelque chose du type : */ \ /* */ \ /* # define FGtrace(prefixe,corps,sous_corps,...) \ */ \ /* (...) */ \ /* */ \ /* puique la definition qui suit n'utilise que des fonctions du type 'FHC...(...)' qui sont */ \ /* de haut niveau et ne font aucunes hypotheses sur les structures de base... */ \ Bblock \ DEFV(hyper_complexe,q1_barre); \ /* Ce nombre hyper-complexe est le conjugue du nombre hyper-complexe argument 'q1'. */ \ \ FHCconjugaison(q1_barre,q1); \ /* Calcul de : */ \ /* */ \ /* -- */ \ /* q1 */ \ /* */ \ FHCsomme(q,q1,q1_barre); \ /* Calcul de : */ \ /* */ \ /* -- */ \ /* q1 + q1 */ \ /* */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R O T A T I O N E T H O M O T H E T I E D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HCrotation_et_homothetie(q,q1,rapport,alpha,phi,theta) \ Bblock \ FHCrotation_et_homothetie(q,q1,rapport,alpha,phi,theta); \ Eblock #define FHCrotation_et_homothetie(q,q1,rapport,alpha,phi,theta) \ Bblock \ FgHCrotation_et_homothetie(q,q1,rapport,alpha,phi,theta); \ Eblock #define FgHCrotation_et_homothetie(q,q1,rapport,alpha,phi,theta) \ Bblock \ DEFV(hyper_complexe,q_definition_de_la_rotation_et_homothetie); \ /* Ce nombre hyper-complexe contient la definition de la rotation et de l'homothetie. */ \ \ FHCinitialisation(q_definition_de_la_rotation_et_homothetie \ ,Xcartesienne_4D(rapport,alpha,phi,theta) \ ,Ycartesienne_4D(rapport,alpha,phi,theta) \ ,Zcartesienne_4D(rapport,alpha,phi,theta) \ ,Tcartesienne_4D(rapport,alpha,phi,theta) \ ); \ /* Definition de la rotation et de l'homothetie. */ \ /* */ \ /* ATTENTION, jusqu'au 20061206172714, on trouvait ci-dessus : */ \ /* */ \ /* Xcartesienne_4D(...) */ \ /* Ycartesienne_4D(...) */ \ /* Tcartesienne_4D(...) */ \ /* Zcartesienne_4D(...) */ \ /* */ \ /* dans cet ordre, ce qui semble incorrect et a donc ete corrige a cette date... */ \ FHCproduit(q,q1,q_definition_de_la_rotation_et_homothetie); \ /* Calcul de : */ \ /* */ \ /* i.angle */ \ /* q1.rapport.e */ \ /* */ \ /* (notation tres symbolique...). */ \ /* */ \ /* ATTENTION, le quaternion 'q_definition_de_la_rotation_et_homothetie' vient de l'article */ \ /* "Visualizing Quaternion Rotation" dans 'ACM Transactions on Graphics' (volume 13, */ \ /* numero 3, du 08/1994) ; dans celui-ci on trouve la chose suivante (avec rho=1) : */ \ /* */ \ /* HReelle(q) = cos(alpha) */ \ /* HImaginaire(q) = sin(alpha)sin(phi)cos(theta) */ \ /* HJmaginaire(q) = sin(alpha)sin(phi)sin(theta) */ \ /* HKmaginaire(q) = sin(alpha)cos(phi) */ \ /* */ \ /* ce qui me parait peu symetrique. J'ai donc choisi : */ \ /* */ \ /* HReelle(q) = cos(alpha) */ \ /* HImaginaire(q) = sin(alpha)cos(phi) */ \ /* HJmaginaire(q) = sin(alpha)sin(phi)cos(theta) */ \ /* HKmaginaire(q) = sin(alpha)sin(phi)sin(theta) */ \ /* */ \ /* ou l'on notera qu'en tete (au-dessus) de chaque colonne de fonctions trigonometriques */ \ /* on trouve la fonction 'cos(...)', et en-dessous, uniquement la fonction 'sin(...)'. */ \ /* */ \ /* Enfin, si l'on choisit : */ \ /* */ \ /* FHCrotation_et_homothetie(q,q1,rapport,alpha,0,0) */ \ /* */ \ /* on trouve une rotation d'angle 'alpha' dans le plan complexe, ce qui conforte le choix */ \ /* fait... */ \ /* */ \ /* ATTENTION, tout cela fut remis en cause le 19970226152601 lors de l'introduction des */ \ /* fonctions 'FHCargumentT_PI(...)' et 'FHCargumentT_2PI(...)' qui malheureusement ne */ \ /* donnaient pas les bons resultats lorsque l'on etait dans le plan complexe. Cela s'est */ \ /* vu avec les programmes '$xrc/julia.01$K' et '$xrc/julia.41$K' en donnant a ce dernier */ \ /* des parametres 'K' et 'J' nuls afin d'etre dans le plan complexe, et en demandant a ces */ \ /* programmes de visualiser les arguments de sortie ('T' pour '$xrc/julia.41$K'). Il a donc */ \ /* fallu prendre les definitions suivantes : */ \ /* */ \ /* HJmaginaire(q) = sin(alpha)cos(phi) */ \ /* HKmaginaire(q) = cos(alpha) */ \ /* HReelle(q) = sin(alpha)sin(phi)cos(theta) */ \ /* HImaginaire(q) = sin(alpha)sin(phi)sin(theta) */ \ /* */ \ /* soit dans l'ordre naturel des composantes de 'q' : */ \ /* */ \ /* HReelle(q) = sin(alpha)sin(phi)cos(theta) */ \ /* HImaginaire(q) = sin(alpha)sin(phi)sin(theta) */ \ /* HJmaginaire(q) = sin(alpha)cos(phi) */ \ /* HKmaginaire(q) = cos(alpha) */ \ /* */ \ /* faisant ainsi les associations (le 20061205161300) : */ \ /* */ \ /* theta --> HImaginaire(q) */ \ /* phi --> HJmaginaire(q) */ \ /* alpha --> HKmaginaire(q) */ \ /* */ \ /* 'q' designant un quaternion quelconque... */ \ /* */ \ /* Enfin, si l'on choisit maintenant : */ \ /* */ \ /* FHCrotation_et_homothetie(q,q1,rapport,pi/2,pi/2,theta) */ \ /* */ \ /* on trouve une rotation d'angle 'theta' dans le plan complexe, ce qui est plus logique, */ \ /* puisqu'on se place orthogonalement aux axes 'J' et 'K'... */ \ /* */ \ /* Le 20181201104452, on verra a ce propos : 'v $xtKg/rotations_C_HC.01$K'... */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R O T A T I O N D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HCrotation(q,q1,alpha,phi,theta) \ Bblock \ FHCrotation(q,q1,alpha,phi,theta); \ Eblock #define FHCrotation(q,q1,alpha,phi,theta) \ Bblock \ FgHCrotation(q,q1,alpha,phi,theta); \ Eblock #define FgHCrotation(q,q1,alpha,phi,theta) \ Bblock \ FHCrotation_et_homothetie(q,q1,FU,alpha,phi,theta); \ /* On notera le 20181202131728 que la rotation neutre est donc definie par : */ \ /* */ \ /* sin(alpha)sin(phi)cos(theta) = 1 ==> sin(alpha) = sin(phi) = cos(theta) = 1 */ \ /* sin(alpha)sin(phi)sin(theta) = 0 */ \ /* sin(alpha)cos(phi) = 0 */ \ /* cos(alpha) = 0 */ \ /* */ \ /* d'ou : */ \ /* */ \ /* alpha = pi/2 */ \ /* phi = pi/2 */ \ /* theta = 0 */ \ /* */ \ /* qui verifient bien : */ \ /* */ \ /* sin(alpha)sin(phi)sin(theta) = sin(alpha)cos(phi) = cos(alpha) = 0 */ \ /* */ \ /* ('v $xtKg/rotations_C_HC.01$K' et surtout 'v $xtKg/rotations_HC.02$K'). */ \ /* */ \ /* Au passage, le programme 'v $xtKg/rotations_HC.01$K' semble montrer qu'il est impossible */ \ /* de trouver une rotation dans le plan 'C' de 'HC' (de par exemple pi/2) qui laisse le */ \ /* "reste" inchange. Cela parait finalement assez logique car on tourne autour d'un axe */ \ /* qui seul est invariant dans cette rotation... */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* H O M O T H E T I E D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HChomothetie(q,q1,rapport) \ Bblock \ FHChomothetie(q,q1,rapport); \ Eblock #define FHChomothetie(q,q1,rapport) \ Bblock \ FgHChomothetie(q,q1,rapport); \ Eblock #define FgHChomothetie(q,q1,rapport) \ Bblock \ FHCrotation_et_homothetie(q,q1,rapport,PI_SUR_2,PI_SUR_2,FZERO); \ /* Jusqu'au 20181201121241, il y avait ici : */ \ /* */ \ /* FHCrotation_et_homothetie(q,q1,rapport,FZERO,FZERO,FZERO); */ \ /* */ \ /* mais en fait, voir le commentaire du 20181201104452 ci-dessus et surtout ceux qui le */ \ /* precede... */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A R G U M E N T S D E Q D A N S [ - P I , + P I ] D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HCargumentT_PI(q) \ FHCargumentT_PI(q) #define FHCargumentT_PI(q) \ gTheta_4D(ARTG \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,HReelle(q),HImaginaire(q),HJmaginaire(q),HKmaginaire(q) \ ) #define HCargumentP_PI(q) \ FHCargumentP_PI(q) #define FHCargumentP_PI(q) \ gPhi_4D(ARTG \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,HReelle(q),HImaginaire(q),HJmaginaire(q),HKmaginaire(q) \ ) #define HCargumentA_PI(q) \ FHCargumentA_PI(q) #define FHCargumentA_PI(q) \ gAlpha_4D(ARTG \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,HReelle(q),HImaginaire(q),HJmaginaire(q),HKmaginaire(q) \ ) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A R G U M E N T S D E Q D A N S [ 0 , 2 . P I ] D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HCargumentT_2PI(q) \ FHCargumentT_2PI(q) #define FHCargumentT_2PI(q) \ NEUT(gTheta_4D(ATAN \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,HReelle(q),HImaginaire(q),HJmaginaire(q),HKmaginaire(q) \ ) \ ) #define HCargumentP_2PI(q) \ FHCargumentP_2PI(q) #define FHCargumentP_2PI(q) \ SOUS(gPhi_4D(ATAN \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,HReelle(q),HImaginaire(q),HJmaginaire(q),HKmaginaire(q) \ ) \ ,PI_SUR_2 \ ) #define HCargumentA_2PI(q) \ FHCargumentA_2PI(q) #define FHCargumentA_2PI(q) \ SOUS(gAlpha_4D(ATAN \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,HReelle(q),HImaginaire(q),HJmaginaire(q),HKmaginaire(q) \ ) \ ,PI_SUR_2 \ ) /* En ce qui concerne la translation de '-pi/2' des angles 'alpha' et 'phi', cela a ete */ /* introduit le 20061210001852 par symetrie avec ce qui a ete fait pour les procedures */ /* {FHCcomposanteR,FHCcomposanteI,FHCcomposanteJ,FHCcomposanteK} ci-dessous lors de leur */ /* definition... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M P O S A N T E S C A R T E S I E N N E S D ' U N N O M B R E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ /* Les procedures suivantes furent introduites le 20061209094527... */ /* */ /* ATTENTION : on notera que l'ordre des arguments {theta,phi,alpha} des procedures */ /* 'Ccomposante?(...)' est l'inverse de celui des procedures '?cartesienne_4D(...)' */ /* parce que plus logique... */ #define HCcomposanteR(rho,theta,phi,alpha) \ FHCcomposanteR(rho,theta,phi,alpha) #define FHCcomposanteR(rho,theta,phi,alpha) \ Xcartesienne_4D(rho,ADD2(alpha,PI_SUR_2),ADD2(phi,PI_SUR_2),NEUT(theta)) #define HCcomposanteI(rho,theta,phi,alpha) \ FHCcomposanteI(rho,theta,phi,alpha) #define FHCcomposanteI(rho,theta,phi,alpha) \ Ycartesienne_4D(rho,ADD2(alpha,PI_SUR_2),ADD2(phi,PI_SUR_2),NEUT(theta)) #define HCcomposanteJ(rho,theta,phi,alpha) \ FHCcomposanteJ(rho,theta,phi,alpha) #define FHCcomposanteJ(rho,theta,phi,alpha) \ Zcartesienne_4D(rho,ADD2(alpha,PI_SUR_2),ADD2(phi,PI_SUR_2),NEUT(theta)) #define HCcomposanteK(rho,theta,phi,alpha) \ FHCcomposanteK(rho,theta,phi,alpha) #define FHCcomposanteK(rho,theta,phi,alpha) \ Tcartesienne_4D(rho,ADD2(alpha,PI_SUR_2),ADD2(phi,PI_SUR_2),NEUT(theta)) /* En ce qui concerne la translation de 'pi/2' des angles 'alpha' et 'phi', voir les */ /* commentaires 'v $ximcd/operator$FON 20061206133437' qui suivent... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E X P O N E N T I A T I O N H Y P E R - C O M P L E X E A B A S E R E E L L E : */ /* */ /*************************************************************************************************************************************/ #define HCexponentielle(q,base,q1) \ /* Introduit le 20061205160911... */ \ Bblock \ FHCexponentielle(q,base,q1); \ Eblock #define FHCexponentielle(q,base,q1) \ Bblock \ FgHCexponentielle(q,base,q1); \ Eblock #define FHCexponentielle_RI(composante) \ NEUT(composante) #define FHCexponentielle_JK(composante) \ COND(IL_FAUT(FHCexponentielle_____compatibilite_20061206) \ ,NEGA(composante) \ ,NEUT(composante) \ ) /* Permet de "controler" l'exponentielle hyper-complexe (introduit le 20061206224938)... */ #define FgHCexponentielle(q,base,q1) \ /* Introduit le 20061205160911... */ \ Bblock \ Test(IL_FAUT(FHCexponentielle_____compatibilite_20230204)) \ /* Test introduit le 20230204085911... */ \ Bblock \ DEFV(hyper_complexe,qA); \ DEFV(hyper_complexe,qB); \ /* Quaternions de manoeuvre... */ \ \ FHCforme_lineaire(qA \ ,LOGX(base) \ ,q1 \ ,FZERO \ ); \ /* Calcul de : */ \ /* */ \ /* q = (q11 + i.q1i + j.q1j + k.q1k).Log(base) */ \ /* A */ \ /* */ \ /* ou {q11,q1i,q1j,q1k} designent respectivement les quatre composantes de 'q1'... */ \ FHCinitialisation(qB \ ,FHCexponentielle_RI(FHCcomposanteR(Rho1_Quaternion \ ,HImaginaire(qA),HJmaginaire(qA),HKmaginaire(qA) \ ) \ ) \ ,FHCexponentielle_RI(FHCcomposanteI(Rho1_Quaternion \ ,HImaginaire(qA),HJmaginaire(qA),HKmaginaire(qA) \ ) \ ) \ ,FHCexponentielle_JK(FHCcomposanteJ(Rho1_Quaternion \ ,HImaginaire(qA),HJmaginaire(qA),HKmaginaire(qA) \ ) \ ) \ ,FHCexponentielle_JK(FHCcomposanteK(Rho1_Quaternion \ ,HImaginaire(qA),HJmaginaire(qA),HKmaginaire(qA) \ ) \ ) \ ); \ /* Ce calcul repose sur la methode utilisee dans le plan complexe (voir a ce propos */ \ /* 'v $ximcd/operator$FON 20061205161300') : */ \ /* */ \ /* z1 x1 + i.y1 */ \ /* base = base */ \ /* */ \ /* x1 i.y1 */ \ /* = base .base */ \ /* */ \ /* x1.log(base) i.[y1.log(base)] */ \ /* = e .e */ \ /* */ \ /* x1.log(base) */ \ /* = e .{cos[y1.log(base)] + i.sin[y1.log(base)]} */ \ /* */ \ /* x1.log(base) */ \ /* = e .[cos(theta) + i.sin(theta)] */ \ /* */ \ /* avec : */ \ /* */ \ /* theta --> Imaginaire(z1.log(base)) */ \ /* */ \ /* x1 = Reelle(z1) */ \ /* y1 = Imaginaire(z1) */ \ /* */ \ /* Avec les quaternions, on procede de meme, mais avec des associations plus compliquees : */ \ /* */ \ /* HReelle(qA) = sin(alpha)sin(phi)cos(theta) [Formules1] */ \ /* HImaginaire(qA) = sin(alpha)sin(phi)sin(theta) */ \ /* HJmaginaire(qA) = sin(alpha)cos(phi) */ \ /* HKmaginaire(qA) = cos(alpha) */ \ /* */ \ /* via les definitions de {Xcartesienne_4D,Ycartesienne_4D,Zcartesienne_4D,Tcartesienne_4D} */ \ /* faisant ainsi les correspondances : */ \ /* */ \ /* theta --> HImaginaire(qA) */ \ /* phi --> HJmaginaire(qA) */ \ /* alpha --> HKmaginaire(qA) */ \ /* */ \ /* Malheureusement, le 20061206090308, j'ai note que dans le plan complexe, c'est-a-dire */ \ /* avec : */ \ /* */ \ /* theta quelconque, */ \ /* */ \ /* phi = 0 */ \ /* alpha = 0 */ \ /* */ \ /* cela ne fonctionnait pas car alors : */ \ /* */ \ /* HReelle(qA) = 0*0*cos(theta) = 0 */ \ /* HImaginaire(qA) = 0*0*sin(theta) = 0 */ \ /* HJmaginaire(qA) = cos(alpha)*1 = cos(alpha) */ \ /* HKmaginaire(qA) = sin(alpha)*1 = sin(alpha) */ \ /* */ \ /* J'ai donc choisi (arbitrairement) a cette date : */ \ /* */ \ /* HReelle(qA) = cos(alpha)cos(phi)cos(theta) [Formules2] */ \ /* HImaginaire(qA) = cos(alpha)cos(phi)sin(theta) */ \ /* HJmaginaire(qA) = cos(alpha)sin(phi) */ \ /* HKmaginaire(qA) = sin(alpha) */ \ /* */ \ /* En fait cela vient de la remarque 'v $ximD/definit.1$DEF 20061206133437' car, en */ \ /* effet, il y a eu une petite confusion entre les angles {alpha,phi} (dans la version du */ \ /* 20061205160911 ci-dessus) et les angles {alpha,phi} (dans la version du 20061206090308) */ \ /* qui different en fait de pi/2. Sachant alors que : */ \ /* */ \ /* sin(x+(pi/2)) = +cos(x) */ \ /* cos(x+(pi/2)) = -sin(x) */ \ /* */ \ /* on retombe sur les formules du 20061206090308 [Formules2] a partir de celles du */ \ /* 20061205160911 [Formules1], a un signe pres, en remplacant {alpha,phi} par */ \ /* {alpha+ps2,phi+ps2} dans [Formules1] : */ \ /* */ \ /* HReelle(qA) = sin(alpha+ps2)sin(phi+ps2)cos(theta) [Formules1] */ \ /* HImaginaire(qA) = sin(alpha+ps2)sin(phi+ps2)sin(theta) */ \ /* HJmaginaire(qA) = sin(alpha+ps2)cos(phi+ps2) */ \ /* HKmaginaire(qA) = cos(alpha+ps2) */ \ /* */ \ /* soit : */ \ /* */ \ /* HReelle(qA) = +cos(alpha)cos(phi)cos(theta) [Formules2] */ \ /* HImaginaire(qA) = +cos(alpha)cos(phi)sin(theta) */ \ /* HJmaginaire(qA) = -cos(alpha)sin(phi) */ \ /* HKmaginaire(qA) = -sin(alpha) */ \ /* */ \ /* Malgre tout, par symetrie, je supprime les signes "-" : */ \ /* */ \ /* HReelle(qA) = +cos(alpha)cos(phi)cos(theta) [Formules2] */ \ /* HImaginaire(qA) = +cos(alpha)cos(phi)sin(theta) */ \ /* HJmaginaire(qA) = +cos(alpha)sin(phi) */ \ /* HKmaginaire(qA) = +sin(alpha) */ \ /* */ \ /* ou 'ps2' designe 'pi/2'. En fait, le 20061206224938 fut introduite la procedure */ \ /* 'FHCexponentielle_JK(...)' a cause du doute relatif a ce choix... */ \ /* */ \ /* Finalement grace a {FHCcomposanteR,FHCcomposanteI,FHCcomposanteJ,FHCcomposanteK} */ \ /* introduits le 20061209094300 tout est rentre dans l'ordre... */ \ /* */ \ /* Ce qui donne ainsi (par analogie avec les nombres complexes) : */ \ /* */ \ /* q1 q11*log(base) */ \ /* base = e */ \ /* *{1*cos[q1k*log(base)]*cos[q1j*log(base)]*cos[q1i*log(base)] */ \ /* +i*cos[q1k*log(base)]*cos[q1j*log(base)]*sin[q1i*log(base)] */ \ /* +j*cos[q1k*log(base)]*sin[q1j*log(base)] */ \ /* +k*sin[q1k*log(base)]} */ \ /* */ \ /* ou {q11,q1i,q1j,q1k} sont les quatre composantes {1,i,j,k} du quaternion 'q1'... */ \ /* */ \ /* ATTENTION, jusqu'au 20240626111544 il y avait ici par erreur : */ \ /* */ \ /* EXba(base,HReelle(qA)) */ \ /* */ \ /* ce qui s'est vu lors de la mise au point de l'image 'v $xiirc/ZETA.21$m.IdM'... */ \ FHCforme_lineaire(q \ ,EXPB(HReelle(qA)) \ ,qB \ ,FZERO \ ); \ /* Calcul final ('v $ximcd/operator$FON FCexponentielle'). */ \ Eblock \ ATes \ Bblock \ DEFV(hyper_complexe,q1_partieReelle); \ DEFV(Float,INIT(exponentielle_de_q1_partieReelle,FLOT__UNDEF)); \ \ DEFV(hyper_complexe,q1_partieIJKmaginaire); \ DEFV(Float,INIT(module_de_q1_partieIJKmaginaire,FLOT__UNDEF)); \ DEFV(Float,INIT(cosinus_de_module_de_q1_partieIJKmaginaire,FLOT__UNDEF)); \ DEFV(Float,INIT(sinus_cardinal_de_module_de_q1_partieIJKmaginaire,FLOT__UNDEF)); \ \ DEFV(hyper_complexe,q1_partiel); \ \ FHCpartieReelle(q1_partieReelle,q1); \ FHCpartieIJKmaginaire(q1_partieIJKmaginaire,q1); \ \ EGAL(module_de_q1_partieIJKmaginaire,FHCmodule(q1_partieIJKmaginaire)); \ EGAL(exponentielle_de_q1_partieReelle,EXba(base,HReelle(q1_partieReelle))); \ EGAL(cosinus_de_module_de_q1_partieIJKmaginaire,COSX(module_de_q1_partieIJKmaginaire)); \ EGAL(sinus_cardinal_de_module_de_q1_partieIJKmaginaire,SINC(module_de_q1_partieIJKmaginaire)); \ \ FHCinitialisation(q1_partiel \ ,cosinus_de_module_de_q1_partieIJKmaginaire \ ,MUL2(sinus_cardinal_de_module_de_q1_partieIJKmaginaire,HImaginaire(q1_partieIJKmaginaire)) \ ,MUL2(sinus_cardinal_de_module_de_q1_partieIJKmaginaire,HJmaginaire(q1_partieIJKmaginaire)) \ ,MUL2(sinus_cardinal_de_module_de_q1_partieIJKmaginaire,HKmaginaire(q1_partieIJKmaginaire)) \ ); \ FHCforme_lineaire(q \ ,exponentielle_de_q1_partieReelle \ ,q1_partiel \ ,FZERO \ ); \ /* Le 20230204091013, il semblerait que la bonne definition de l'exponentielle d'un nombre */ \ /* hyper-complexe soit : */ \ /* */ \ /* :Debut_listMN_DEFINITION_EXPONENTIELLE_NOMBRES_HYPER_COMPLEXES: */ \ /* */ \ /* q R(q) */ \ /* e = e .[cos(|I(q)|) + sinc(|I(q)|).I(q)] */ \ /* */ \ /* En effet : */ \ /* */ \ /* q = R(q) + I(q) */ \ /* q = a + b.i + c.j + d.k */ \ /* */ \ /* I = b.i + c.j + d.k [I = I(q)] */ \ /* */ \ /* q = a + I */ \ /* */ \ /* 2 2 2 2 2 2 */ \ /* I = -b -c -d = -|I| = -m [m = |I|] */ \ /* */ \ /* 3 2 */ \ /* I = -m .I */ \ /* */ \ /* 4 4 */ \ /* I = +m */ \ /* */ \ /* 5 4 */ \ /* I = +m .I */ \ /* */ \ /* (...) */ \ /* */ \ /* q a I a.i c.j d.k */ \ /* e = e .e (et non pas : e .e .e ) */ \ /* */ \ /* I 1 1 1 2 1 3 1 4 1 5 */ \ /* e = 1 + ----.I + ----.I + ----.I + ----.I + ----.I + (...) */ \ /* 1! 2! 3! 4! 5! */ \ /* */ \ /* I 1 1 1 2 1 2 1 4 1 4 */ \ /* e = 1 + ----.I + ----.(-m ) + ----.(-m ).I) + ----.(+m ) + ----.(+m .I) + (...) */ \ /* 1! 2! 3! 4! 5! */ \ /* */ \ /* I 1 2 1 4 1 1 2 */ \ /* e = 1 - ----.m + ----.m + (...) + I.[---- - ----.m + (...)] */ \ /* 2! 4! 1! 3! */ \ /* */ \ /* I 1 2 1 4 I 1 1 1 3 */ \ /* e = 1 - ----.m + ----.m + (...) + ---.[----.m - ----.m + (...)] */ \ /* 2! 4! m 1! 3! */ \ /* */ \ /* I I */ \ /* e = cos(m) + ---.sin(m) */ \ /* m */ \ /* */ \ /* I */ \ /* e = cos(m) + sinc(m).I */ \ /* */ \ /* q a */ \ /* e = e .[cos(m) + sinc(m).I] [sinc(...) = sinus cardinal] */ \ /* */ \ /* :Fin_listMN_DEFINITION_EXPONENTIELLE_NOMBRES_HYPER_COMPLEXES: */ \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E X P O N E N T I A T I O N H Y P E R - C O M P L E X E A B A S E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HCexponentielle_quaternionique(q,base,q1) \ /* Introduit le 20061205160911... */ \ Bblock \ FHCexponentielle_quaternionique(q,base,q1); \ Eblock #define FHCexponentielle_quaternionique(q,base,q1) \ Bblock \ FgHCexponentielle_quaternionique(q,base,q1); \ Eblock #define FgHCexponentielle_quaternionique(q,base,q1) \ /* Introduit le 20061205160911... */ \ Bblock \ Test(FHCTestIFEQ(base,HC_____quaternion__0__0__0__0)) \ Bblock \ FHCegal(q,HC_____quaternion__0__0__0__0); \ /* Valeur arbitraire introduite le 20210218120647... */ \ Eblock \ ATes \ Bblock \ DEFV(hyper_complexe,logarithme_base); \ DEFV(hyper_complexe,q_produit); \ /* Quaternions de manoeuvre... */ \ \ FHClogarithme(logarithme_base,base); \ /* Calcul de : */ \ /* */ \ /* log(base) */ \ /* */ \ FHCproduit(q_produit,q1,logarithme_base); \ /* Calcul de : */ \ /* */ \ /* q1.log(base) */ \ /* */ \ FHCexponentielle(q,EN,q_produit); \ /* Calcul de : */ \ /* */ \ /* q1.log(base) */ \ /* e */ \ /* */ \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* L O G A R I T H M E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HClogarithme(q,q1) \ /* Introduit le 20061205160911... */ \ Bblock \ FHClogarithme(q,q1); \ Eblock #define FHClogarithme(q,q1) \ Bblock \ FgHClogarithme(q,q1); \ Eblock #define FgHClogarithme(q,q1) \ /* Introduit le 20061205160911... */ \ Bblock \ Test(IL_FAUT(FHClogarithme_____compatibilite_20230204)) \ /* Test introduit le 20230204111216... */ \ Bblock \ DEFV(Float,INIT(module_q1,FHCmodule(q1))); \ DEFV(Float,INIT(argumentT_q1,FHCargumentT_PI(q1))); \ DEFV(Float,INIT(argumentP_q1,FHCargumentP_PI(q1))); \ DEFV(Float,INIT(argumentA_q1,FHCargumentA_PI(q1))); \ /* Module et arguments du nombre 'q1'. */ \ \ FHCinitialisation(q \ ,COND(IZEQ_a_peu_pres(module_q1,GRAND_EPSILON),F_MOINS_LE_PETIT_INFINI,LOGX(module_q1)) \ ,argumentT_q1 \ ,argumentP_q1 \ ,argumentA_q1 \ ); \ /* Calcul de : */ \ /* */ \ /* q = log(module(q1)) + i.argT(q1) + j.argP(q1) + k.argA(q1) */ \ /* */ \ /* On notera qu'en toute generalite, c'est la nullite "parfaite" du module qui devrait */ \ /* etre testee, mais en faisant ainsi, on risquerait des debordements ulterieurs, d'ou */ \ /* ce dispositif "a epsilon pres". */ \ Eblock \ ATes \ Bblock \ DEFV(Float,INIT(module_de_q1,FLOT__UNDEF)); \ DEFV(Float,INIT(logarithme_du_module_de_q1,FLOT__UNDEF)); \ \ DEFV(hyper_complexe,q1_partieReelle); \ DEFV(Float,INIT(module_de_q1_partieReelle,FLOT__UNDEF)); \ \ DEFV(hyper_complexe,q1_partieIJKmaginaire); \ DEFV(Float,INIT(module_de_q1_partieIJKmaginaire,FLOT__UNDEF)); \ \ DEFV(Float,INIT(facteur,FLOT__UNDEF)); \ \ FHCpartieReelle(q1_partieReelle,q1); \ EGAL(module_de_q1_partieReelle,FHCmodule(q1_partieReelle)); \ FHCpartieIJKmaginaire(q1_partieIJKmaginaire,q1); \ \ EGAL(module_de_q1,FHCmodule(q1)); \ EGAL(logarithme_du_module_de_q1 \ ,COND(IZEQ_a_peu_pres(module_de_q1,GRAND_EPSILON),F_MOINS_LE_PETIT_INFINI,LOGX(module_de_q1)) \ ); \ EGAL(module_de_q1_partieIJKmaginaire,FHCmodule(q1_partieIJKmaginaire)); \ EGAL(facteur \ ,DIV0(ACOX(DIVZ(module_de_q1_partieReelle,module_de_q1)) \ ,module_de_q1_partieIJKmaginaire \ ,FZERO \ ,FZERO \ ) \ ); \ /* Le cas particulier de la division par 0 a ete introduit le 20230321121916 lors de la */ \ /* mise au point de l'image 'v $xiirs/CAYA.W4'... */ \ \ FHCinitialisation(q \ ,logarithme_du_module_de_q1 \ ,MUL2(facteur,HImaginaire(q1_partieIJKmaginaire)) \ ,MUL2(facteur,HJmaginaire(q1_partieIJKmaginaire)) \ ,MUL2(facteur,HKmaginaire(q1_partieIJKmaginaire)) \ ); \ /* Le 20230204112039 il semblerait que la bonne definition du logarithme d'un nombre */ \ /* hyper-complexe soit : */ \ /* */ \ /* :Debut_listMN_DEFINITION_LOGARITHME_NOMBRES_HYPER_COMPLEXES: */ \ /* */ \ /* 1 |R(q)| */ \ /* log(q) = {log(|q|,--------.acos(--------).I(q)} */ \ /* |I(q)| |q| */ \ /* */ \ /* :Fin_listMN_DEFINITION_LOGARITHME_NOMBRES_HYPER_COMPLEXES: */ \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* L I G N E S T R I G O N O M E T R I Q U E S H Y P E R - C O M P L E X E S */ /* C I R C U L A I R E S E T H Y P E R B O L I Q U E S : */ /* */ /*************************************************************************************************************************************/ #define FHCcosinus_sinus_circulaires_et_hyperboliques__type_1(q,q1,facteur_des_exposants,FHCplus_ou_moins,diviseur) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ DEFV(hyper_complexe,plus_q1); \ DEFV(hyper_complexe,moins_q1); \ DEFV(hyper_complexe,qF1); \ DEFV(hyper_complexe,qF2); \ DEFV(hyper_complexe,qE1); \ DEFV(hyper_complexe,qE2); \ DEFV(hyper_complexe,qN); \ /* Nombres complexes de manoeuvre... */ \ \ FHCegal(plus_q1,q1); \ FHCnegation(moins_q1,q1); \ \ FHCproduit(qF1,facteur_des_exposants,plus_q1); \ FHCproduit(qF2,facteur_des_exposants,moins_q1); \ /* Definition des nombres '+f.q1' et '-f.q1'. */ \ \ FHCexponentielle(qE1,EN,qF1); \ FHCexponentielle(qE2,EN,qF2); \ \ FHCplus_ou_moins(qN,qE1,qE2); \ \ FHCquotient(q,qN,diviseur); \ /* Calcul de : */ \ /* */ \ /* +f.q1 -f.q1 */ \ /* e & e */ \ /* q = ----------------- */ \ /* d */ \ /* */ \ /* ou '&' et 'd' valent {+,-} et {2,2i} pour le cosinus et le sinus respectivement, et */ \ /* ou 'f' vaut {i,1} pour les lignes circulaires et hyperboliques respectivement. */ \ Eblock #define FHCcosinus_sinus_circulaires_et_hyperboliques__type_2(q,q1,f11,f12,signe,f21,f22) \ /* Procedure introduite le 20230206110454... */ \ Bblock \ DEFV(hyper_complexe,q1_partieReelle); \ DEFV(Float,INIT(module_de_q1_partieReelle,FLOT__UNDEF)); \ \ DEFV(hyper_complexe,q1_partieIJKmaginaire); \ DEFV(Float,INIT(module_de_q1_partieIJKmaginaire,FLOT__UNDEF)); \ \ DEFV(Float,INIT(f11_de_module_de_q1_partieReelle,FLOT__UNDEF)); \ DEFV(Float,INIT(f12_de_module_de_q1_partieIJKmaginaire,FLOT__UNDEF)); \ DEFV(Float,INIT(f21_de_module_de_q1_partieReelle,FLOT__UNDEF)); \ DEFV(Float,INIT(f22_de_module_de_q1_partieIJKmaginaire,FLOT__UNDEF)); \ \ FHCpartieReelle(q1_partieReelle,q1); \ FHCpartieIJKmaginaire(q1_partieIJKmaginaire,q1); \ \ EGAL(module_de_q1_partieReelle,FHCmodule(q1_partieReelle)); \ EGAL(module_de_q1_partieIJKmaginaire,FHCmodule(q1_partieIJKmaginaire)); \ \ EGAL(f11_de_module_de_q1_partieReelle,f11(module_de_q1_partieReelle)); \ EGAL(f21_de_module_de_q1_partieReelle,f21(module_de_q1_partieReelle)); \ \ EGAL(f12_de_module_de_q1_partieIJKmaginaire,f12(module_de_q1_partieIJKmaginaire)); \ EGAL(f22_de_module_de_q1_partieIJKmaginaire,f22(module_de_q1_partieIJKmaginaire)); \ \ FHCinitialisation(q \ ,MUL2(f11_de_module_de_q1_partieReelle \ ,f12_de_module_de_q1_partieIJKmaginaire \ ) \ ,MUL4(FLOT(signe) \ ,f21_de_module_de_q1_partieReelle \ ,f22_de_module_de_q1_partieIJKmaginaire \ ,HImaginaire(q1_partieIJKmaginaire) \ ) \ ,MUL4(FLOT(signe) \ ,f21_de_module_de_q1_partieReelle \ ,f22_de_module_de_q1_partieIJKmaginaire \ ,HJmaginaire(q1_partieIJKmaginaire) \ ) \ ,MUL4(FLOT(signe) \ ,f21_de_module_de_q1_partieReelle \ ,f22_de_module_de_q1_partieIJKmaginaire \ ,HKmaginaire(q1_partieIJKmaginaire) \ ) \ ); \ Eblock \ /* Le 20230206110454, il semblerait que la bonne definition des lignes trigonometriques */ \ /* circulaires et hyperboliques d'un nombre hyper-complexe soit : */ \ /* */ \ /* :Debut_listMN_DEFINITION_LIGNES_TRIGONOMETRIQUES_NOMBRES_HYPER_COMPLEXES: */ \ /* */ \ /* cos(q) = [cos(R(q)).ch(|I(q)|)] - [sin(R(q)).shc(|I(q)|).I(q)] */ \ /* sin(q) = [sin(R(q)).ch(|I(q)|)] + [cos(R(q)).shc(|I(q)|).I(q)] */ \ /* */ \ /* ch(q) = [ch(R(q)).cos(|I(q)|)] + [sh(R(q)).sinc(|I(q)|).I(q)] */ \ /* sh(q) = [sh(R(q)).cos(|I(q)|)] + [ch(R(q)).sinc(|I(q)|).I(q)] */ \ /* */ \ /* en faisant les hypotheses audacieuses suivantes : */ \ /* */ \ /* q = R(q) + I(q) */ \ /* q = a + b.i + c.j + d.k */ \ /* */ \ /* I = b.i + c.j + d.k [I = I(q)] */ \ /* [m = |I|] */ \ /* */ \ /* q = a + I */ \ /* */ \ /* f11 f12 f21 f22 */ \ /* */ \ /* cos(q) = cos(a+I) = [cos(a).cos(I) - sin(a).sin(I)] */ \ /* sin(q) = cos(a+I) = [sin(a).cos(I) + cos(a).sin(I)] */ \ /* */ \ /* ch(q) = ch(a+I) = [ch(a).ch(I) + sh(a).sh(I)] */ \ /* sh(q) = sh(a+I) = [sh(a).ch(I) + ch(a).sh(I)] */ \ /* */ \ /* En effet, par des developpements en series tel celui de 'FgHCexponentielle(...)', on */ \ /* montre facilement que : */ \ /* */ \ /* cos(I) = ch(m) */ \ /* */ \ /* sh(m) */ \ /* sin(I) = -------.I = shc(m).I */ \ /* m */ \ /* */ \ /* */ \ /* ch(I) = cos(m) */ \ /* */ \ /* sin(m) */ \ /* sh(I) = --------.I = sinc(m).I */ \ /* m */ \ /* */ \ /* d'ou : */ \ /* */ \ /* f11 f12 f21 f22 */ \ /* */ \ /* cos(q) = cos(a+I) = [cos(a).ch(m) - sin(a).shc(m).I] */ \ /* sin(q) = cos(a+I) = [sin(a).ch(m) + cos(a).shc(m).I] */ \ /* */ \ /* ch(q) = ch(a+I) = [ch(a).cos(m) + sh(a).sinc(m).I] */ \ /* sh(q) = sh(a+I) = [sh(a).cos(m) + ch(a).sinc(m).I] */ \ /* */ \ /* */ \ /* On verifie aisement que : */ \ /* */ \ /* 2 2 2 2 2 */ \ /* cos (q) + sin (q) = ch (m) + shc (m).I */ \ /* */ \ /* 2 */ \ /* 2 sh (m) 2 2 2 */ \ /* = ch (m) + --------.I [I = -(m )] */ \ /* 2 */ \ /* m */ \ /* */ \ /* 2 2 */ \ /* = ch (m) - sh (m) */ \ /* ['m' etant un Reel...] */ \ /* = 1 */ \ /* */ \ /* de meme : */ \ /* */ \ /* 2 2 */ \ /* ch (q) - sh (q) = 1 */ \ /* */ \ /* :Fin_listMN_DEFINITION_LIGNES_TRIGONOMETRIQUES_NOMBRES_HYPER_COMPLEXES: */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* L I G N E S T R I G O N O M E T R I Q U E S H Y P E R - C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define FHCcosinus_sinus(q,q1,FHCplus_ou_moins,diviseur) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ FHCcosinus_sinus_circulaires_et_hyperboliques__type_1(q \ ,q1 \ ,HC_____quaternion__0_p1__0__0 \ ,FHCplus_ou_moins \ ,diviseur \ ); \ /* Calcul de : */ \ /* */ \ /* +i.q1 -i.q1 */ \ /* e & e */ \ /* q = ----------------- */ \ /* d */ \ /* */ \ /* ou '&' et 'd' valent {+,-} et {2,2.i} pour le cosinus et le sinus respectivement. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O S I N U S H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HCserie_cosinus(q,q1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FHCserie_cosinus(q,q1); \ Eblock #define FHCserie_cosinus(q,q1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FgHCserie_cosinus(q,q1); \ Eblock #define FgHCserie_cosinus(q,q1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ GENERATION_SERIE_TRIGONOMETRIQUE(q,q1 \ ,GENERER_UN_COSINUS,TRIGONOMETRIE_CIRCULAIRE__ \ ,hyper_complexe \ ,FHCegal \ ,FHCforme_lineaire \ ,FHCsomme \ ,aHCpuissance \ ,FgHCserie_cosinus_____HC_____exposant \ ,FHCproduit \ ,FgHCserie_cosinus_____HC_____quaternion__0__0__0__0 \ ,HC_____quaternion_p1__0__0__0 \ ); \ Eblock #define HCcosinus(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ FHCcosinus(q,q1); \ Eblock #define FHCcosinus(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ FgHCcosinus(q,q1); \ Eblock #define FgHCcosinus(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ Test(IL_FAUT(FHCcosinus_____compatibilite_20230206)) \ /* Test introduit le 20230206092813... */ \ Bblock \ FHCcosinus_sinus(q,q1,FHCsomme,HC_____quaternion_p2__0__0__0); \ /* Calcul de : */ \ /* */ \ /* +i.q1 -i.q1 */ \ /* e + e */ \ /* q = ----------------- */ \ /* 2 */ \ /* */ \ Eblock \ ATes \ Bblock \ Test(IL_FAUT(FHCcosinus_____compatibilite_20230321)) \ /* Test introduit le 20230321184556... */ \ Bblock \ FHCcosinus_sinus_circulaires_et_hyperboliques__type_2(q,q1,COSX,COHX,SIGNE_MOINS,SINX,SIHC); \ /* Introduit le 20230206110454... */ \ Eblock \ ATes \ Bblock \ DEFV(hyper_complexe,exponentielle_q1); \ \ FHCexponentielle(exponentielle_q1,EN,q1); \ FHCpartieReelle(q,exponentielle_q1); \ /* Mis sous cette forme le 20230321184556... */ \ Eblock \ ETes \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* S I N U S H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HCserie_sinus(q,q1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FHCserie_sinus(q,q1); \ Eblock #define FHCserie_sinus(q,q1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FgHCserie_sinus(q,q1); \ Eblock #define FgHCserie_sinus(q,q1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ GENERATION_SERIE_TRIGONOMETRIQUE(q,q1 \ ,GENERER_UN_SINUS__,TRIGONOMETRIE_CIRCULAIRE__ \ ,hyper_complexe \ ,FHCegal \ ,FHCforme_lineaire \ ,FHCsomme \ ,aHCpuissance \ ,FgHCserie_sinus_____HC_____exposant \ ,FHCproduit \ ,FgHCserie_sinus_____HC_____quaternion__0__0__0__0 \ ,HC_____quaternion_p1__0__0__0 \ ); \ Eblock #define HCsinus(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ FHCsinus(q,q1); \ Eblock #define FHCsinus(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ FgHCsinus(q,q1); \ Eblock #define FgHCsinus(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ Test(IL_FAUT(FHCsinus_____compatibilite_20230206)) \ /* Test introduit le 20230206092813... */ \ Bblock \ FHCcosinus_sinus(q,q1,FHCdifference,HC_____quaternion__0_p2__0__0); \ /* Calcul de : */ \ /* */ \ /* +i.q1 -i.q1 */ \ /* e - e */ \ /* q = ----------------- */ \ /* 2.i */ \ /* */ \ Eblock \ ATes \ Bblock \ Test(IL_FAUT(FHCsinus_____compatibilite_20230321)) \ /* Test introduit le 20230321184556... */ \ Bblock \ FHCcosinus_sinus_circulaires_et_hyperboliques__type_2(q,q1,SINX,COHX,SIGNE_PLUS,COSX,SIHC); \ /* Procedure introduite le 20230206092813... */ \ Eblock \ ATes \ Bblock \ DEFV(hyper_complexe,exponentielle_q1); \ \ FHCexponentielle(exponentielle_q1,EN,q1); \ FHCpartieIJKmaginaire(q,exponentielle_q1); \ /* Mis sous cette forme le 20230321184556... */ \ Eblock \ ETes \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T A N G E N T E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define FgHCtangente_quotient(q,q1,fonction_cosinus,fonction_sinus__) \ /* Procedure introduite le 20210209103456... */ \ Bblock \ DEFV(hyper_complexe,cosinus_q1); \ DEFV(hyper_complexe,sinus_q1); \ /* Nombres complexes de manoeuvre... */ \ \ fonction_cosinus(cosinus_q1,q1); \ fonction_sinus__(sinus_q1,q1); \ /* Calcul du sinus et du cosinus de 'q1'. */ \ \ Test(IZNE(FHCmodule(cosinus_q1))) \ Bblock \ FHCquotient(q,sinus_q1,cosinus_q1); \ /* Calcul de : */ \ /* */ \ /* */ \ /* sinus(q1) */ \ /* q = ------------- */ \ /* cosinus(q1) */ \ /* */ \ Eblock \ ATes \ Bblock \ FHCinitialisation(q \ ,MEME_SIGNE_QUE(HReelle(sinus_q1),F_INFINI) \ ,MEME_SIGNE_QUE(HImaginaire(sinus_q1),F_INFINI) \ ,MEME_SIGNE_QUE(HJmaginaire(sinus_q1),F_INFINI) \ ,MEME_SIGNE_QUE(HKmaginaire(sinus_q1),F_INFINI) \ ); \ /* Lorsque le module du cosinus est nul, la valeur de la tangente est fixee de facon tout */ \ /* a fait arbitraire... */ \ Eblock \ ETes \ Eblock #define HCserie_tangente(q,q1) \ /* Procedure introduite le 20210209103456... */ \ Bblock \ FHCserie_tangente(q,q1); \ Eblock #define FHCserie_tangente(q,q1) \ /* Procedure introduite le 20210209103456... */ \ Bblock \ FgHCserie_tangente(q,q1); \ Eblock #define FgHCserie_tangente(q,q1) \ /* Procedure introduite le 20210209103456... */ \ Bblock \ FgHCtangente_quotient(q,q1,FHCserie_cosinus,FHCserie_sinus); \ Eblock #define HCtangente(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ FHCtangente(q,q1); \ Eblock #define FHCtangente(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ FgHCtangente(q,q1); \ Eblock #define FgHCtangente(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ FgHCtangente_quotient(q,q1,FHCcosinus,FHCsinus); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* L I G N E S H Y P E R B O L I Q U E S H Y P E R - C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define FHCcosinus_sinus_hyperbolique(q,q1,FHCplus_ou_moins) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ FHCcosinus_sinus_circulaires_et_hyperboliques__type_1(q \ ,q1 \ ,HC_____quaternion_p1__0__0__0 \ ,FHCplus_ou_moins \ ,HC_____quaternion_p2__0__0__0 \ ); \ /* Calcul de : */ \ /* */ \ /* +q1 -q1 */ \ /* e & e */ \ /* q = ------------- */ \ /* 2 */ \ /* */ \ /* ou '&' vaut {+,-} pour le cosinus et le sinus respectivement. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O S I N U S 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 : */ /* */ /*************************************************************************************************************************************/ #define HCserie_cosinus_hyperbolique(q,q1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FHCserie_cosinus_hyperbolique(q,q1); \ Eblock #define FHCserie_cosinus_hyperbolique(q,q1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FgHCserie_cosinus_hyperbolique(q,q1); \ Eblock #define FgHCserie_cosinus_hyperbolique(q,q1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ GENERATION_SERIE_TRIGONOMETRIQUE(q,q1 \ ,GENERER_UN_COSINUS,TRIGONOMETRIE_HYPERBOLIQUE \ ,hyper_complexe \ ,FHCegal \ ,FHCforme_lineaire \ ,FHCsomme \ ,aHCpuissance \ ,FgHCserie_cosinus_hyperbolique_____HC_____exposant \ ,FHCproduit \ ,FgHCserie_cosinus_hyperbolique_____HC_____quaternion__0__0__0__0 \ ,HC_____quaternion_p1__0__0__0 \ ); \ Eblock #define HCcosinus_hyperbolique(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ FHCcosinus_hyperbolique(q,q1); \ Eblock #define FHCcosinus_hyperbolique(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ FgHCcosinus_hyperbolique(q,q1); \ Eblock #define FgHCcosinus_hyperbolique(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ Test(IL_FAUT(FHCcosinus_hyperbolique_____compatibilite_20230206)) \ /* Test introduit le 20230206092813... */ \ Bblock \ FHCcosinus_sinus_hyperbolique(q,q1,FHCsomme); \ /* Calcul de : */ \ /* */ \ /* +q1 -q1 */ \ /* e + e */ \ /* q = ------------- */ \ /* 2 */ \ /* */ \ Eblock \ ATes \ Bblock \ FHCcosinus_sinus_circulaires_et_hyperboliques__type_2(q,q1,COHX,COSX,SIGNE_PLUS,SIHX,SINC); \ /* Procedure introduite le 20230206092813... */ \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* S I N U S 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 : */ /* */ /*************************************************************************************************************************************/ #define HCserie_sinus_hyperbolique(q,q1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FHCserie_sinus_hyperbolique(q,q1); \ Eblock #define FHCserie_sinus_hyperbolique(q,q1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FgHCserie_sinus_hyperbolique(q,q1); \ Eblock #define FgHCserie_sinus_hyperbolique(q,q1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ GENERATION_SERIE_TRIGONOMETRIQUE(q,q1 \ ,GENERER_UN_SINUS__,TRIGONOMETRIE_HYPERBOLIQUE \ ,hyper_complexe \ ,FHCegal \ ,FHCforme_lineaire \ ,FHCsomme \ ,aHCpuissance \ ,FgHCserie_sinus_hyperbolique_____HC_____exposant \ ,FHCproduit \ ,FgHCserie_sinus_hyperbolique_____HC_____quaternion__0__0__0__0 \ ,HC_____quaternion_p1__0__0__0 \ ); \ Eblock #define HCsinus_hyperbolique(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ FHCsinus_hyperbolique(q,q1); \ Eblock #define FHCsinus_hyperbolique(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ FgHCsinus_hyperbolique(q,q1); \ Eblock #define FgHCsinus_hyperbolique(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ Test(IL_FAUT(FHCsinus_hyperbolique_____compatibilite_20230206)) \ /* Test introduit le 20230206092813... */ \ Bblock \ FHCcosinus_sinus_hyperbolique(q,q1,FHCdifference); \ /* Calcul de : */ \ /* */ \ /* +q1 -q1 */ \ /* e - e */ \ /* q = ------------- */ \ /* 2 */ \ /* */ \ Eblock \ ATes \ Bblock \ FHCcosinus_sinus_circulaires_et_hyperboliques__type_2(q,q1,SIHX,COSX,SIGNE_PLUS,COHX,SINC); \ /* Procedure introduite le 20230206092813... */ \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T A N G E N T E 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 : */ /* */ /*************************************************************************************************************************************/ #define FgHCtangente_hyperbolique_quotient(q,q1,fonction_cosinus_hyperbolique,fonction_sinus___hyperbolique) \ Bblock \ DEFV(hyper_complexe,cosinus_hyperbolique_q1); \ DEFV(hyper_complexe,sinus_hyperbolique_q1); \ /* Nombres complexes de manoeuvre... */ \ \ fonction_cosinus_hyperbolique(cosinus_hyperbolique_q1,q1); \ fonction_sinus___hyperbolique(sinus_hyperbolique_q1,q1); \ /* Calcul du sinus et du cosinus de 'q1'. */ \ \ Test(IZNE(FHCmodule(cosinus_hyperbolique_q1))) \ Bblock \ FHCquotient(q,sinus_hyperbolique_q1,cosinus_hyperbolique_q1); \ /* Calcul de : */ \ /* */ \ /* */ \ /* sinus_hyperbolique(q1) */ \ /* q = -------------------------- */ \ /* cosinus_hyperbolique(q1) */ \ /* */ \ Eblock \ ATes \ Bblock \ FHCinitialisation(q \ ,MEME_SIGNE_QUE(HReelle(sinus_hyperbolique_q1),F_INFINI) \ ,MEME_SIGNE_QUE(HImaginaire(sinus_hyperbolique_q1),F_INFINI) \ ,MEME_SIGNE_QUE(HJmaginaire(sinus_hyperbolique_q1),F_INFINI) \ ,MEME_SIGNE_QUE(HKmaginaire(sinus_hyperbolique_q1),F_INFINI) \ ); \ /* Lorsque le module du cosinus est nul, la valeur de la tangente est fixee de facon tout */ \ /* a fait arbitraire... */ \ Eblock \ ETes \ Eblock #define HCserie_tangente_hyperbolique(q,q1) \ Bblock \ FHCserie_tangente_hyperbolique(q,q1); \ Eblock #define FHCserie_tangente_hyperbolique(q,q1) \ Bblock \ FgHCserie_tangente_hyperbolique(q,q1); \ Eblock #define FgHCserie_tangente_hyperbolique(q,q1) \ Bblock \ FgHCtangente_hyperbolique_quotient(q,q1,FHCserie_cosinus_hyperbolique,FHCserie_sinus_hyperbolique); \ Eblock #define HCtangente_hyperbolique(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ FHCtangente_hyperbolique(q,q1); \ Eblock #define FHCtangente_hyperbolique(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ FgHCtangente_hyperbolique(q,q1); \ Eblock #define FgHCtangente_hyperbolique(q,q1) \ /* Procedure introduite le 20210205174724... */ \ Bblock \ FgHCtangente_hyperbolique_quotient(q,q1,FHCcosinus_hyperbolique,FHCsinus_hyperbolique); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A C C E L E R A T I O N E V E N T U E L L E D E S C O M P I L A T I O N S */ /* D E S I T E R A T I O N S D A N S L ' E S P A C E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ /* Le dispositif suivant a ete mis en place ici le 20111204113520 afin de pouvoir etre */ /* utilise a la fois dans 'v $ximcf/conformes$FOn' et 'v $ximcf/iterations$FON', alors */ /* qu'avant cette date il etait situe dans 'v $ximcf/iterations$FON' en en limitant ainsi */ /* la portee... */ #ifdef NE_PAS_ACCELERER_LA_COMPILATION_DES_NOMBRES_HYPER_COMPLEXES # define aHCconjugaison(q,q1) \ Bblock \ HCconjugaison(q,q1); \ Eblock # define aHCmodulo(q,q1,Rorg,Rext,Iorg,Iext,Jorg,Jext,Korg,Kext) \ Bblock \ HCmodulo(q,q1,Rorg,Rext,Iorg,Iext,Jorg,Jext,Korg,Kext); \ Eblock # define aHCproduit(q,q1,q2) \ Bblock \ HCproduit(q,q1,q2); \ Eblock # define aHCpuissance(q,q1,exposant) \ Bblock \ HCpuissance(q,q1,exposant); \ Eblock # define aHCquotient(q,q1,q2) \ Bblock \ HCquotient(q,q1,q2); \ Eblock # define aHCsomme(q,q1,q2) \ Bblock \ HCsomme(q,q1,q2); \ Eblock # define aHCdifference(q,q1,q2) \ Bblock \ HCdifference(q,q1,q2); \ Eblock # define aHCforme_lineaire(q,alpha,q1,beta) \ Bblock \ HCforme_lineaire(q,alpha,q1,beta); \ Eblock # define aHCcombinaison_lineaire_2(q,a,q1,b,q2) \ Bblock \ HCcombinaison_lineaire_2(q,a,q1,b,q2); \ Eblock # define aHCcombinaison_lineaire_3(q,a,q1,b,q2,c,q3) \ Bblock \ HCcombinaison_lineaire_3(q,a,q1,b,q2,c,q3); \ Eblock # define aHCcombinaison_lineaire_4(q,a,q1,b,q2,c,q3,d,q4) \ Bblock \ HCcombinaison_lineaire_4(q,a,q1,b,q2,c,q3,d,q4); \ Eblock # define aHCcombinaison_lineaire_5(q,a,q1,b,q2,c,q3,d,q4,e,q5) \ Bblock \ HCcombinaison_lineaire_5(q,a,q1,b,q2,c,q3,d,q4,e,q5); \ Eblock # define aHCcombinaison_lineaire_6(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6) \ Bblock \ HCcombinaison_lineaire_6(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6); \ Eblock # define aHCcombinaison_lineaire_7(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7) \ Bblock \ HCcombinaison_lineaire_7(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7); \ Eblock # define aHCcombinaison_lineaire_8(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7,h,q8) \ Bblock \ HCcombinaison_lineaire_8(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7,h,q8); \ Eblock # define aHCcombinaison_lineaire_9(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7,h,q8,i,q9) \ Bblock \ HCcombinaison_lineaire_9(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7,h,q8,i,q9); \ Eblock # define aHCexponentielle_quaternionique(q,base,q1) \ Bblock \ HCexponentielle_quaternionique(q,base,q1); \ Eblock # nodefine aHClogarithme(q,q1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ HClogarithme(q,q1); \ Eblock # nodefine aHCcosinus(q,q1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ HCcosinus(q,q1); \ Eblock # nodefine aHCsinus(q,q1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ HCsinus(q,q1); \ Eblock # nodefine aHCtangente(q,q1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ HCtangente(q,q1); \ Eblock # nodefine aHCcosinus_hyperbolique(q,q1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ HCcosinus_hyperbolique(q,q1); \ Eblock # nodefine aHCsinus_hyperbolique(q,q1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ HCsinus_hyperbolique(q,q1); \ Eblock # nodefine aHCtangente_hyperbolique(q,q1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ HCtangente_hyperbolique(q,q1); \ Eblock #Aifdef NE_PAS_ACCELERER_LA_COMPILATION_DES_NOMBRES_HYPER_COMPLEXES /* Possibilite introduite le 20111201134708... */ # define aHCconjugaison(q,q1) \ Bblock \ EGAL(q,fFHCconjugaison(q1)); \ Eblock # define aHCmodulo(q,q1,Rorg,Rext,Iorg,Iext,Jorg,Jext,Korg,Kext) \ Bblock \ EGAL(q,fFHCmodulo(q1,Rorg,Rext,Iorg,Iext,Jorg,Jext,Korg,Kext)); \ Eblock # define aHCproduit(q,q1,q2) \ Bblock \ EGAL(q,fFHCproduit(q1,q2)); \ Eblock # define aHCpuissance(q,q1,exposant) \ Bblock \ EGAL(q,fFHCpuissance(q1,exposant)); \ Eblock # define aHCquotient(q,q1,q2) \ Bblock \ EGAL(q,fFHCquotient(q1,q2)); \ Eblock # define aHCsomme(q,q1,q2) \ Bblock \ EGAL(q,fFHCsomme(q1,q2)); \ Eblock # define aHCdifference(q,q1,q2) \ Bblock \ EGAL(q,fFHCdifference(q1,q2)); \ Eblock # define aHCforme_lineaire(q,alpha,q1,beta) \ Bblock \ EGAL(q,fFHCforme_lineaire(alpha,q1,beta)); \ Eblock # define aHCcombinaison_lineaire_2(q,a,q1,b,q2) \ Bblock \ EGAL(q,fFHCcombinaison_lineaire_2(a,q1,b,q2)); \ Eblock # define aHCcombinaison_lineaire_3(q,a,q1,b,q2,c,q3) \ Bblock \ EGAL(q,fFHCcombinaison_lineaire_3(a,q1,b,q2,c,q3)); \ Eblock # define aHCcombinaison_lineaire_4(q,a,q1,b,q2,c,q3,d,q4) \ Bblock \ EGAL(q,fFHCcombinaison_lineaire_4(a,q1,b,q2,c,q3,d,q4)); \ Eblock # define aHCcombinaison_lineaire_5(q,a,q1,b,q2,c,q3,d,q4,e,q5) \ Bblock \ EGAL(q,fFHCcombinaison_lineaire_5(q,a,q1,b,q2,c,q3,d,q4,e,q5)); \ Eblock # define aHCcombinaison_lineaire_6(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6) \ Bblock \ EGAL(q,fFHCcombinaison_lineaire_6(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6)); \ Eblock # define aHCcombinaison_lineaire_7(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7) \ Bblock \ EGAL(q,fFHCcombinaison_lineaire_7(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7)); \ Eblock # define aHCcombinaison_lineaire_8(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7,h,q8) \ Bblock \ EGAL(q,fFHCcombinaison_lineaire_8(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7,h,q8)); \ Eblock # define aHCcombinaison_lineaire_9(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7,h,q8,i,q9) \ Bblock \ EGAL(q,fFHCcombinaison_lineaire_9(q,a,q1,b,q2,c,q3,d,q4,e,q5,f,q6,g,q7,h,q8,i,q9)); \ Eblock # define aHCexponentielle_quaternionique(q,base,q1) \ Bblock \ EGAL(q,fFHCexponentielle_quaternionique(base,q1)); \ Eblock # nodefine aHClogarithme(q,q1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(q,faFHClogarithme(o1)); \ /* On notera le 'faFHC...' a cause de 'v $ximcf/fonction$FON fFHClogarithme'... */ \ Eblock # nodefine aHCcosinus(q,q1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(q,fFHCcosinus(o1)); \ Eblock # nodefine aHCsinus(q,q1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(q,fFHCsinus(o1)); \ Eblock # nodefine aHCtangente(q,q1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(q,fFHCtangente(o1)); \ Eblock # nodefine aHCcosinus_hyperbolique(q,q1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(q,faFHCcosinus_hyperbolique(o1)); \ /* On notera le 'faFHC...' a cause de 'v $ximcf/fonction$FON fFHCcosinus_hyperbolique'... */ \ Eblock # nodefine aHCsinus_hyperbolique(q,q1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(q,faFHCsinus_hyperbolique(o1)); \ /* On notera le 'faFHC...' a cause de 'v $ximcf/fonction$FON fFHCsinus_hyperbolique'... */ \ Eblock # nodefine aHCtangente_hyperbolique(q,q1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(q,faFHCtangente_hyperbolique(o1)); \ /* On notera le 'faFHC...' a cause de 'v $ximcf/fonction$FON fFHCtangente_hyperbolique'... */ \ Eblock #Eifdef NE_PAS_ACCELERER_LA_COMPILATION_DES_NOMBRES_HYPER_COMPLEXES /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 : */ /* */ /*************************************************************************************************************************************/ /* Ceci a ete introduit le 20070129115950... */ #ifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES # define UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HHC(faire_de_l_arithmetique_etendue,sequence) \ Bblock \ USs_GooF______CONDITIONNEL \ (IFET(IL_FAUT(faire_de_l_arithmetique_etendue) \ ,EST_VRAI(HHC_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base) \ ) \ ,sequence \ ); \ /* Execution de la sequence argument avec l'arithmetique etendue si elle est disponible... */ \ Eblock #Aifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES # define UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HHC(faire_de_l_arithmetique_etendue,sequence) \ Bblock \ BLOC(sequence); \ /* Execution de la sequence argument avec l'arithmetique de base... */ \ Eblock #Eifdef FAIRE_EVENTUELLEMENT_DE_L_ARITHMETIQUE_ETENDUE_DANS_LES_NOMBRES_HYPER_HYPER_COMPLEXES #define FHHCinitialisation_____utiliser_l_arithmetique_etendue \ FHHCinitialisation_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base_dans_HHC #define FHHCsomme_____utiliser_l_arithmetique_etendue \ FHHCsomme_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base_dans_HHC #define FHHCdifference_____utiliser_l_arithmetique_etendue \ FHHCdifference_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base_dans_HHC #define FHHCproduit_____utiliser_l_arithmetique_etendue \ FHHCproduit_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base_dans_HHC #define FHHCproduit_____utiliser_l_arithmetique_etendue_dans_CxCxCxC \ FHHCproduit_____si_GooF_activable_et_si_arithmetique_etendue_aller_dans_CxCxCxC_au_lieu_de_HHC #define FHHCquotient_____utiliser_l_arithmetique_etendue \ FHHCquotient_____si_GooF_activable_arithmetique_etendue_au_lieu_arithmetique_de_base_dans_HHC /* Definitions destinees a raccourcir certaines lignes suivantes... */ /* */ /* Ces definitions furent completees le 20120918142202 pour ce qui concerne CxCxCxC... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E D I T I O N D ' U N N O M B R E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define PRINT_DANS_HHC(titre,o) \ Bblock \ CAL3(Prme9("%s={%+.^^^,%+.^^^,%+.^^^,%+.^^^,%+.^^^,%+.^^^,%+.^^^,%+.^^^}\n" \ ,titre \ ,HHReelle(o) \ ,HHImaginaire(o) \ ,HHJmaginaire(o) \ ,HHKmaginaire(o) \ ,HHSmaginaire(o) \ ,HHTmaginaire(o) \ ,HHUmaginaire(o) \ ,HHVmaginaire(o) \ ) \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N O = ( R , I , J , K , S , T , U , V ) */ /* D ' U N N O M B R E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HHCinitialisation(o,p_reelle,p_imaginaire,p_jmaginaire,p_kmaginaire,p_smaginaire,p_tmaginaire,p_umaginaire,p_vmaginaire) \ Bblock \ FHHCinitialisation(o \ ,p_reelle \ ,p_imaginaire \ ,p_jmaginaire \ ,p_kmaginaire \ ,p_smaginaire \ ,p_tmaginaire \ ,p_umaginaire \ ,p_vmaginaire \ ); \ Eblock #define FHHCinitialisation(o,p_reelle,p_imaginaire,p_jmaginaire,p_kmaginaire,p_smaginaire,p_tmaginaire,p_umaginaire,p_vmaginaire) \ Bblock \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HHC(FHHCinitialisation_____utiliser_l_arithmetique_etendue \ ,BLOC(FgHHCinitialisation(o \ ,p_reelle \ ,p_imaginaire \ ,p_jmaginaire \ ,p_kmaginaire \ ,p_smaginaire \ ,p_tmaginaire \ ,p_umaginaire \ ,p_vmaginaire \ ); \ ) \ ); \ /* L'arithmetique etendue fut introduite ici le 20110811153401... */ \ Eblock #define bFgHHCinitialisation(o,p_reelle,p_imaginaire,p_jmaginaire,p_kmaginaire,p_smaginaire,p_tmaginaire,p_umaginaire,p_vmaginaire) \ Bblock \ EGAL(HHReelle(o) \ ,p_reelle \ ); \ EGAL(HHImaginaire(o) \ ,p_imaginaire \ ); \ EGAL(HHJmaginaire(o) \ ,p_jmaginaire \ ); \ EGAL(HHKmaginaire(o) \ ,p_kmaginaire \ ); \ EGAL(HHSmaginaire(o) \ ,p_smaginaire \ ); \ EGAL(HHTmaginaire(o) \ ,p_tmaginaire \ ); \ EGAL(HHUmaginaire(o) \ ,p_umaginaire \ ); \ EGAL(HHVmaginaire(o) \ ,p_vmaginaire \ ); \ Eblock \ /* Introduit le 20121102215336 pour simplifier 'FgHHCinitialisation(...)'. */ #define FgHHCinitialisation(o,p_reelle,p_imaginaire,p_jmaginaire,p_kmaginaire,p_smaginaire,p_tmaginaire,p_umaginaire,p_vmaginaire) \ /* ATTENTION, on ne peut utiliser ici une definition du type : */ \ /* */ \ /* # define FGinitialisation(prefixe,corps,sous_corps,...) \ */ \ /* (...) */ \ /* */ \ /* car en effet, les Arguments sont des nombres Reels, et non pas des elements du sous-corps */ \ /* ce qui fait que le nombre d'arguments de la procedure n'est pas independant de la */ \ /* dimension du corps... */ \ Bblock \ DEFV(hyper_hyper_complexe,o_intermediaire_initialisation); \ /* Au cas ou il y aurait une dependance entre les Arguments et le Resultat (introduit */ \ /* le 20121102172614)... */ \ \ bFgHHCinitialisation(o_intermediaire_initialisation \ ,p_reelle \ ,p_imaginaire \ ,p_jmaginaire \ ,p_kmaginaire \ ,p_smaginaire \ ,p_tmaginaire \ ,p_umaginaire \ ,p_vmaginaire \ ); \ \ bFgHHCinitialisation(o \ ,HHReelle(o_intermediaire_initialisation) \ ,HHImaginaire(o_intermediaire_initialisation) \ ,HHJmaginaire(o_intermediaire_initialisation) \ ,HHKmaginaire(o_intermediaire_initialisation) \ ,HHSmaginaire(o_intermediaire_initialisation) \ ,HHTmaginaire(o_intermediaire_initialisation) \ ,HHUmaginaire(o_intermediaire_initialisation) \ ,HHVmaginaire(o_intermediaire_initialisation) \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N O = ( R H O , A 1 , A 2 , A 3 , A 4 , A 5 , A 6 , A 7 ) */ /* D ' U N N O M B R E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HHCinitialisation_trigonometrique(o,rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ Bblock \ FHHCinitialisation_trigonometrique(o,rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7); \ Eblock #define FHHCinitialisation_trigonometrique(o,rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ Bblock \ FgHHCinitialisation_trigonometrique(o,rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7); \ Eblock #define FgHHCinitialisation_trigonometrique(o,rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ Bblock \ FHHCinitialisation(o \ ,FHHCcomposanteR(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ ,FHHCcomposanteI(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ ,FHHCcomposanteJ(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ ,FHHCcomposanteK(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ ,FHHCcomposanteS(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ ,FHHCcomposanteT(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ ,FHHCcomposanteU(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ ,FHHCcomposanteV(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ ); \ Eblock /* Introduit le 20111229161914. */ #define HHCdefinition_trigonometrique(o,module,argument) \ Bblock \ FHHCdefinition_trigonometrique(o,module,argument); \ Eblock #define FHHCdefinition_trigonometrique(o,module,argument) \ Bblock \ FgHHCdefinition_trigonometrique(o,module,argument); \ Eblock #define FgHHCdefinition_trigonometrique(o,module,argument) \ Bblock \ DEFV(Float,INIT(unitaire \ ,HHCmodule(COND(IL_FAUT(FHHCdefinition_trigonometrique_____compatibilite_20230320) \ ,HHC_____octonion__0_p1__0__0__0__0__0__0 \ ,HHC_____octonion__0_p1_p1_p1_p1_p1_p1_p1 \ ) \ ) \ ) \ ); \ /* Inutile mais, par "symetrie" avec les hyper-complexes et les hyper-hyper-complexes... */ \ DEFV(Float,INIT(cosinus,NEUT(MUL2(module,COSX(argument))))); \ DEFV(Float,INIT(sinus,FLOT__UNDEF)); \ DEFV(Float,INIT(sinus_de_compatibilite,FLOT__UNDEF)); \ \ EGAL(sinus,DIVI(MUL2(module,SINX(argument)),unitaire)); \ EGAL(sinus_de_compatibilite,COND(IL_FAUT(FHCdefinition_trigonometrique_____compatibilite_20230320),FZERO,sinus)); \ \ FHHCinitialisation(o \ ,cosinus \ ,sinus \ ,sinus_de_compatibilite \ ,sinus_de_compatibilite \ ,sinus_de_compatibilite \ ,sinus_de_compatibilite \ ,sinus_de_compatibilite \ ,sinus_de_compatibilite \ ); \ Eblock /* Introduit le 20230320123152 afin de se debarasser de l'usage de l'exponentielle en */ /* particulier pour les hyper-complexes et les hyper-hyper-complexes... */ #define HHCextension_directe(o_etendu,o) \ Bblock \ FHHCextension_directe(o_etendu,o); \ Eblock #define FHHCextension_directe(o_etendu,o) \ Bblock \ FgHHCextension_directe(o_etendu,o); \ Eblock #define FgHHCextension_directe(o_etendu,o) \ Bblock \ EGAL(HHCHHS_Rho(o_etendu),HHCmodule(o)); \ EGAL(HHCHHS_Angle1(o_etendu),HHCargumentA1_2PI(o)); \ EGAL(HHCHHS_Angle2(o_etendu),HHCargumentA2_2PI(o)); \ EGAL(HHCHHS_Angle3(o_etendu),HHCargumentA3_2PI(o)); \ EGAL(HHCHHS_Angle4(o_etendu),HHCargumentA4_2PI(o)); \ EGAL(HHCHHS_Angle5(o_etendu),HHCargumentA5_2PI(o)); \ EGAL(HHCHHS_Angle6(o_etendu),HHCargumentA6_2PI(o)); \ EGAL(HHCHHS_Angle7(o_etendu),HHCargumentA7_2PI(o)); \ Eblock /* Introduit le 20111230081620. */ #define HHCextension_inverse(o,o_etendu) \ Bblock \ FHHCextension_inverse(o,o_etendu); \ Eblock #define FHHCextension_inverse(o,o_etendu) \ Bblock \ FgHHCextension_inverse(o,o_etendu); \ Eblock #define FgHHCextension_inverse(o,o_etendu) \ Bblock \ FHHCinitialisation_trigonometrique(o \ ,HHCHHS_Rho(o_etendu) \ ,HHCHHS_Angle1(o_etendu) \ ,HHCHHS_Angle2(o_etendu) \ ,HHCHHS_Angle3(o_etendu) \ ,HHCHHS_Angle4(o_etendu) \ ,HHCHHS_Angle5(o_etendu) \ ,HHCHHS_Angle6(o_etendu) \ ,HHCHHS_Angle7(o_etendu) \ ); \ Eblock /* Introduit le 20111230081620. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E X T R A C T I O N D E S P A R T I E S R E E L L E E T I M A G I N A I R E */ /* D E 2 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 : */ /* */ /*************************************************************************************************************************************/ #define HHCpartieReelle(o,o1) \ Bblock \ FHHCpartieReelle(o,o1); \ Eblock #define FHHCpartieReelle(o,o1) \ Bblock \ FgHHCpartieReelle(o,o1); \ Eblock #define FgHHCpartieReelle(o,o1) \ Bblock \ DEFV(hyper_hyper_complexe,o1_conjugue); \ DEFV(hyper_hyper_complexe,o_somme); \ \ FHHCconjugaison(o1_conjugue,o1); \ FHHCsomme(o_somme,o1,o1_conjugue); \ FHHCforme_lineaire(o \ ,INVE(CONSTANTE_DE_MOYENNE) \ ,o_somme \ ,FZERO \ ); \ /* La partie reelle 'PR' est definie par : */ \ /* _ */ \ /* o + o */ \ /* PR(o) = ------- */ \ /* 2 */ \ /* */ \ Eblock \ /* Extraction de la partie reelle d'un nombre hyper-hyper-complexe sous la forme d'un */ \ /* autre nombre hyper-hyper-complexe (introduit le 20230204075556)... */ #define HHCpartieIJKSTUVmaginaire(o,o1) \ Bblock \ FHHCpartieIJKSTUVmaginaire(o,o1); \ Eblock #define FHHCpartieIJKSTUVmaginaire(o,o1) \ Bblock \ FgHHCpartieIJKSTUVmaginaire(o,o1); \ Eblock #define FgHHCpartieIJKSTUVmaginaire(o,o1) \ Bblock \ DEFV(hyper_hyper_complexe,o1_conjugue); \ DEFV(hyper_hyper_complexe,o_difference); \ \ FHHCconjugaison(o1_conjugue,o1); \ FHHCdifference(o_difference,o1,o1_conjugue); \ FHHCforme_lineaire(o \ ,INVE(CONSTANTE_DE_MOYENNE) \ ,o_difference \ ,FZERO \ ); \ /* La partie imaginaire 'PI' est definie par : */ \ /* _ */ \ /* o - o */ \ /* PI(o) = ------- */ \ /* 2 */ \ /* */ \ Eblock \ /* Extraction de la partie imaginaire d'un nombre hyper-hyper-complexe sous la forme d'un */ \ /* autre nombre hyper-hyper-complexe (introduit le 20230204075556)... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E G A L I T E O = O1 D E 2 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 : */ /* */ /*************************************************************************************************************************************/ #define HHCegal(o,o1) \ Bblock \ FHHCegal(o,o1); \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 # define FHHCegal(o,o1) \ Bblock \ FHHCinitialisation(o \ ,HHReelle(o1) \ ,HHImaginaire(o1) \ ,HHJmaginaire(o1) \ ,HHKmaginaire(o1) \ ,HHSmaginaire(o1) \ ,HHTmaginaire(o1) \ ,HHUmaginaire(o1) \ ,HHVmaginaire(o1) \ ); \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FHHCegal(o,o1) \ Bblock \ FGegal(HH,hyper_hyper_complexe,hyper_complexe \ ,o \ ,o1 \ ,dHHReelle,dHHImaginaire \ ,HCegal \ ); \ /* ATTENTION, 'HH' et 'hyper_hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T E S T D E 2 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 : */ /* */ /*************************************************************************************************************************************/ /* Les definitions suivantes ont ete introduites le 20210218101725... */ #define HHCTestIFEQ(o1,o2) \ FHHCTestIFEQ(o1,o2) #define FHHCTestIFEQ(o1,o2) \ I8ET(IFEQ(HHReelle(o1),HHReelle(o2)) \ ,IFEQ(HHImaginaire(o1),HHImaginaire(o2)) \ ,IFEQ(HHJmaginaire(o1),HHJmaginaire(o2)) \ ,IFEQ(HHKmaginaire(o1),HHKmaginaire(o2)) \ ,IFEQ(HHSmaginaire(o1),HHSmaginaire(o2)) \ ,IFEQ(HHTmaginaire(o1),HHTmaginaire(o2)) \ ,IFEQ(HHUmaginaire(o1),HHUmaginaire(o2)) \ ,IFEQ(HHVmaginaire(o1),HHVmaginaire(o2)) \ ) /* Test de l'egalite de 'o1' et 'o2'. */ #define HHCTestIFEQ_a_peu_pres_absolu(o1,o2,epsilon) \ FHHCTestIFEQ_a_peu_pres_absolu(o1,o2,epsilon) #define FHHCTestIFEQ_a_peu_pres_absolu(o1,o2,epsilon) \ I8ET(IFEQ_a_peu_pres_absolu(HHReelle(o1),HHReelle(o2),epsilon) \ ,IFEQ_a_peu_pres_absolu(HHImaginaire(o1),HHImaginaire(o2),epsilon) \ ,IFEQ_a_peu_pres_absolu(HHJmaginaire(o1),HHJmaginaire(o2),epsilon) \ ,IFEQ_a_peu_pres_absolu(HHKmaginaire(o1),HHKmaginaire(o2),epsilon) \ ,IFEQ_a_peu_pres_absolu(HHSmaginaire(o1),HHSmaginaire(o2),epsilon) \ ,IFEQ_a_peu_pres_absolu(HHTmaginaire(o1),HHTmaginaire(o2),epsilon) \ ,IFEQ_a_peu_pres_absolu(HHUmaginaire(o1),HHUmaginaire(o2),epsilon) \ ,IFEQ_a_peu_pres_absolu(HHVmaginaire(o1),HHVmaginaire(o2),epsilon) \ ) /* Test de l'egalite de 'o1' et 'o2' a "epsilon pres absolu". */ #define HHCTestIFEQ_a_peu_pres_relatif(o1,o2,pourcentage) \ FHHCTestIFEQ_a_peu_pres_relatif(o1,o2,pourcentage) #define FHHCTestIFEQ_a_peu_pres_relatif(o1,o2,pourcentage) \ I8ET(IFEQ_a_peu_pres_relatif(HHReelle(o1),HHReelle(o2),pourcentage) \ ,IFEQ_a_peu_pres_relatif(HHImaginaire(o1),HHImaginaire(o2),pourcentage) \ ,IFEQ_a_peu_pres_relatif(HHJmaginaire(o1),HHJmaginaire(o2),pourcentage) \ ,IFEQ_a_peu_pres_relatif(HHKmaginaire(o1),HHKmaginaire(o2),pourcentage) \ ,IFEQ_a_peu_pres_relatif(HHSmaginaire(o1),HHSmaginaire(o2),pourcentage) \ ,IFEQ_a_peu_pres_relatif(HHTmaginaire(o1),HHTmaginaire(o2),pourcentage) \ ,IFEQ_a_peu_pres_relatif(HHUmaginaire(o1),HHUmaginaire(o2),pourcentage) \ ,IFEQ_a_peu_pres_relatif(HHVmaginaire(o1),HHVmaginaire(o2),pourcentage) \ ) /* Test de l'egalite de 'o1' et 'o2' a "epsilon pres relatif". */ #define HHCTestIFNE(o1,o2) \ FHHCTestIFNE(o1,o2) #define FHHCTestIFNE(o1,o2) \ I8OU(IFNE(HHReelle(o1),HHReelle(o2)) \ ,IFNE(HHImaginaire(o1),HHImaginaire(o2)) \ ,IFNE(HHJmaginaire(o1),HHJmaginaire(o2)) \ ,IFNE(HHKmaginaire(o1),HHKmaginaire(o2)) \ ,IFNE(HHSmaginaire(o1),HHSmaginaire(o2)) \ ,IFNE(HHTmaginaire(o1),HHTmaginaire(o2)) \ ,IFNE(HHUmaginaire(o1),HHUmaginaire(o2)) \ ,IFNE(HHVmaginaire(o1),HHVmaginaire(o2)) \ ) /* Test de la non egalite de 'o1' et 'o2'. */ #define HHCTestIFNE_a_peu_pres_absolu(o1,o2,epsilon) \ FHHCTestIFNE_a_peu_pres_absolu(o1,o2,epsilon) #define FHHCTestIFNE_a_peu_pres_absolu(o1,o2,epsilon) \ I8OU(IFNE_a_peu_pres_absolu(HHReelle(o1),HHReelle(o2),epsilon) \ ,IFNE_a_peu_pres_absolu(HHImaginaire(o1),HHImaginaire(o2),epsilon) \ ,IFNE_a_peu_pres_absolu(HHJmaginaire(o1),HHJmaginaire(o2),epsilon) \ ,IFNE_a_peu_pres_absolu(HHKmaginaire(o1),HHKmaginaire(o2),epsilon) \ ,IFNE_a_peu_pres_absolu(HHSmaginaire(o1),HHSmaginaire(o2),epsilon) \ ,IFNE_a_peu_pres_absolu(HHTmaginaire(o1),HHTmaginaire(o2),epsilon) \ ,IFNE_a_peu_pres_absolu(HHUmaginaire(o1),HHUmaginaire(o2),epsilon) \ ,IFNE_a_peu_pres_absolu(HHVmaginaire(o1),HHVmaginaire(o2),epsilon) \ ) /* Test de la non egalite de 'o1' et 'o2' a "epsilon pres absolu". */ #define HHCTestIFNE_a_peu_pres_relatif(o1,o2,pourcentage) \ FHHCTestIFNE_a_peu_pres_relatif(o1,o2,pourcentage) #define FHHCTestIFNE_a_peu_pres_relatif(o1,o2,pourcentage) \ I8OU(IFNE_a_peu_pres_relatif(HHReelle(o1),HHReelle(o2),pourcentage) \ ,IFNE_a_peu_pres_relatif(HHImaginaire(o1),HHImaginaire(o2),pourcentage) \ ,IFNE_a_peu_pres_relatif(HHJmaginaire(o1),HHJmaginaire(o2),pourcentage) \ ,IFNE_a_peu_pres_relatif(HHKmaginaire(o1),HHKmaginaire(o2),pourcentage) \ ,IFNE_a_peu_pres_relatif(HHSmaginaire(o1),HHSmaginaire(o2),pourcentage) \ ,IFNE_a_peu_pres_relatif(HHTmaginaire(o1),HHTmaginaire(o2),pourcentage) \ ,IFNE_a_peu_pres_relatif(HHUmaginaire(o1),HHUmaginaire(o2),pourcentage) \ ,IFNE_a_peu_pres_relatif(HHVmaginaire(o1),HHVmaginaire(o2),pourcentage) \ ) /* Test de la non egalite de 'o1' et 'o2' a "epsilon pres relatif". */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N E G A T I O N O = - O1 D ' U N N O M B R E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HHCnegation(o,o1) \ Bblock \ FHHCnegation(o,o1); \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 # define FHHCnegation(o,o1) \ Bblock \ FHHCforme_lineaire(o \ ,NEGA(FU) \ ,o1 \ ,FZERO \ ); \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FHHCnegation(o,o1) \ Bblock \ FGnegation(HH,hyper_hyper_complexe,hyper_complexe \ ,o \ ,o1 \ ,dHHReelle,dHHImaginaire \ ,HCegal \ ,HCnegation \ ); \ /* ATTENTION, 'HH' et 'hyper_hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* -- */ /* C O N J U G A I S O N O = O1 D ' U N N O M B R E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HHCconjugaison(o,o1) \ Bblock \ FHHCconjugaison(o,o1); \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 # define FHHCconjugaison(o,o1) \ Bblock \ FHHCinitialisation(o \ ,CHHReelle(o1) \ ,CHHImaginaire(o1) \ ,CHHJmaginaire(o1) \ ,CHHKmaginaire(o1) \ ,CHHSmaginaire(o1) \ ,CHHTmaginaire(o1) \ ,CHHUmaginaire(o1) \ ,CHHVmaginaire(o1) \ ); \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FHHCconjugaison(o,o1) \ Bblock \ FGconjugaison(HH,hyper_hyper_complexe,hyper_complexe \ ,o \ ,o1 \ ,dHHReelle,dHHImaginaire \ ,FgHCegal \ ,FgHCconjugaison \ ,FgHCnegation \ ); \ /* ATTENTION, 'HH' et 'hyper_hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L E U R M O D U L O D ' U N N O M B R E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HHCmodulo(o,o1,Rorg,Rext,Iorg,Iext,Jorg,Jext,Korg,Kext,Sorg,Sext,Torg,Text,Uorg,Uext,Vorg,Vext) \ Bblock \ FHHCmodulo(o,o1,Rorg,Rext,Iorg,Iext,Jorg,Jext,Korg,Kext,Sorg,Sext,Torg,Text,Uorg,Uext,Vorg,Vext); \ Eblock #define FHHCmodulo(o,o1,Rorg,Rext,Iorg,Iext,Jorg,Jext,Korg,Kext,Sorg,Sext,Torg,Text,Uorg,Uext,Vorg,Vext) \ /* ATTENTION, on ne peut utiliser ici une definition du type : */ \ /* */ \ /* # define FGmodulo(prefixe,corps,sous_corps,...) \ */ \ /* (...) */ \ /* */ \ /* a cause de la fonction 'MODF(...)' et de ses arguments... */ \ Bblock \ FHHCinitialisation(o \ ,MODF(HHReelle(o1),Rorg,Rext) \ ,MODF(HHImaginaire(o1),Iorg,Iext) \ ,MODF(HHJmaginaire(o1),Jorg,Jext) \ ,MODF(HHKmaginaire(o1),Korg,Kext) \ ,MODF(HHSmaginaire(o1),Sorg,Sext) \ ,MODF(HHTmaginaire(o1),Torg,Text) \ ,MODF(HHUmaginaire(o1),Uorg,Uext) \ ,MODF(HHVmaginaire(o1),Vorg,Vext) \ ); \ Eblock /* Procedures introduites le 20121102174217... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F O R M E L I N E A I R E O = A*O1 + B D ' U N N O M B R E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HHCforme_lineaire(o,alpha,o1,beta) \ Bblock \ FHHCforme_lineaire(o,alpha,o1,beta); \ Eblock #define FHHCforme_lineaire(o,alpha,o1,beta) \ /* ATTENTION, on ne peut utiliser ici une definition du type : */ \ /* */ \ /* # define FGforme_lineaire(prefixe,corps,sous_corps,...) \ */ \ /* (...) */ \ /* */ \ /* car en effet, la decomposition recursive appliquee ailleurs ne fonctionne pas ici, */ \ /* le premier nombre Reel jouant un role tres different des autres, puisqu'il est le seul */ \ /* a etre translate de 'beta'... */ \ Bblock \ FHHCinitialisation(o \ ,LIN1(alpha,HHReelle(o1),beta) \ ,LIZ1(alpha,HHImaginaire(o1)) \ ,LIZ1(alpha,HHJmaginaire(o1)) \ ,LIZ1(alpha,HHKmaginaire(o1)) \ ,LIZ1(alpha,HHSmaginaire(o1)) \ ,LIZ1(alpha,HHTmaginaire(o1)) \ ,LIZ1(alpha,HHUmaginaire(o1)) \ ,LIZ1(alpha,HHVmaginaire(o1)) \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E O = A*O1 + B*O2 */ /* D E 2 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 */ /* L E S N O M B R E S { A , B } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HHCcombinaison_lineaire_2(o,a,o1,b,o2) \ Bblock \ FHHCcombinaison_lineaire_2(o,a,o1,b,o2); \ Eblock #define FHHCcombinaison_lineaire_2(o,a,o1,b,o2) \ Bblock \ FHHCinitialisation(o \ ,LIZ2(a,HHReelle(o1),b,HHReelle(o2)) \ ,LIZ2(a,HHImaginaire(o1),b,HHImaginaire(o2)) \ ,LIZ2(a,HHJmaginaire(o1),b,HHJmaginaire(o2)) \ ,LIZ2(a,HHKmaginaire(o1),b,HHKmaginaire(o2)) \ ,LIZ2(a,HHSmaginaire(o1),b,HHSmaginaire(o2)) \ ,LIZ2(a,HHTmaginaire(o1),b,HHTmaginaire(o2)) \ ,LIZ2(a,HHUmaginaire(o1),b,HHUmaginaire(o2)) \ ,LIZ2(a,HHVmaginaire(o1),b,HHVmaginaire(o2)) \ ); \ Eblock /* Introduit le 20040508121316... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E O = A*O1 + B*O2 + C*O3 */ /* D E 3 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 */ /* L E S N O M B R E S { A , B , C } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HHCcombinaison_lineaire_3(o,a,o1,b,o2,c,o3) \ Bblock \ FHHCcombinaison_lineaire_3(o,a,o1,b,o2,c,o3); \ Eblock #define FHHCcombinaison_lineaire_3(o,a,o1,b,o2,c,o3) \ Bblock \ DEFV(hyper_hyper_complexe,to3); \ FHHCcombinaison_lineaire_2(to3,b,o2,c,o3); \ FHHCcombinaison_lineaire_2(o,a,o1,FU,to3); \ Eblock /* Introduit le 20220608142417... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E O = A*O1 + B*O2 + C*O3 + D*O4 */ /* D E 4 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 */ /* L E S N O M B R E S { A , B , C , D } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HHCcombinaison_lineaire_4(o,a,o1,b,o2,c,o3,d,o4) \ Bblock \ FHHCcombinaison_lineaire_4(o,a,o1,b,o2,c,o3,d,o4); \ Eblock #define FHHCcombinaison_lineaire_4(o,a,o1,b,o2,c,o3,d,o4) \ Bblock \ DEFV(hyper_hyper_complexe,to4); \ FHHCcombinaison_lineaire_3(to4,b,o2,c,o3,d,o4); \ FHHCcombinaison_lineaire_2(o,a,o1,FU,to4); \ Eblock /* Introduit le 20220608142417... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E O = A*O1 + B*O2 + C*O3 + D*O4 + E*O5 */ /* D E 5 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 */ /* L E S N O M B R E S { A , B , C , D , E } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HHCcombinaison_lineaire_5(o,a,o1,b,o2,c,o3,d,o4,e,o5) \ Bblock \ FHHCcombinaison_lineaire_5(o,a,o1,b,o2,c,o3,d,o4,e,o5); \ Eblock #define FHHCcombinaison_lineaire_5(o,a,o1,b,o2,c,o3,d,o4,e,o5) \ Bblock \ DEFV(hyper_hyper_complexe,to5); \ FHHCcombinaison_lineaire_4(to5,b,o2,c,o3,d,o4,e,o5); \ FHHCcombinaison_lineaire_2(o,a,o1,FU,to5); \ Eblock /* Introduit le 20220609083129... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E O = A*O1 + B*O2 + C*O3 + D*O4 + E*O5 + F*O6 */ /* D E 6 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 */ /* L E S N O M B R E S { A , B , C , D , E , F } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HHCcombinaison_lineaire_6(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6) \ Bblock \ FHHCcombinaison_lineaire_6(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6); \ Eblock #define FHHCcombinaison_lineaire_6(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6) \ Bblock \ DEFV(hyper_hyper_complexe,to6); \ FHHCcombinaison_lineaire_5(to6,b,o2,c,o3,d,o4,e,o5,f,o6); \ FHHCcombinaison_lineaire_2(o,a,o1,FU,to6); \ Eblock /* Introduit le 20220609083129... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E O = A*O1 + B*O2 + C*O3 + D*O4 + E*O5 + F*O6 + G*O7 */ /* D E 7 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 */ /* L E S N O M B R E S { A , B , C , D , E , F , G } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HHCcombinaison_lineaire_7(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7) \ Bblock \ FHHCcombinaison_lineaire_7(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7); \ Eblock #define FHHCcombinaison_lineaire_7(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7) \ Bblock \ DEFV(hyper_hyper_complexe,to7); \ FHHCcombinaison_lineaire_6(to7,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7); \ FHHCcombinaison_lineaire_2(o,a,o1,FU,to7); \ Eblock /* Introduit le 20220609083129... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E O = A*O1 + B*O2 + C*O3 + D*O4 + E*O5 + F*O6 + G*O7 + H*O8 */ /* D E 8 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 */ /* L E S N O M B R E S { A , B , C , D , E , F , G , H } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HHCcombinaison_lineaire_8(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7,h,o8) \ Bblock \ FHHCcombinaison_lineaire_8(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7,h,o8); \ Eblock #define FHHCcombinaison_lineaire_8(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7,h,o8) \ Bblock \ DEFV(hyper_hyper_complexe,to8); \ FHHCcombinaison_lineaire_7(to8,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7,h,o8); \ FHHCcombinaison_lineaire_2(o,a,o1,FU,to8); \ Eblock /* Introduit le 20220609083129... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M B I N A I S O N L I N E A I R E O = A*O1 + B*O2 + C*O3 + D*O4 + E*O5 + F*O6 + G*O7 + H*O8 + I*O9 */ /* D E 9 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 */ /* L E S N O M B R E S { A , B , C , D , E , F , G , H , I } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HHCcombinaison_lineaire_9(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7,h,o8,i,o9) \ Bblock \ FHHCcombinaison_lineaire_9(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7,h,o8,i,o9); \ Eblock #define FHHCcombinaison_lineaire_9(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7,h,o8,i,o9) \ Bblock \ DEFV(hyper_hyper_complexe,to9); \ FHHCcombinaison_lineaire_8(to9,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7,h,o8,i,o9); \ FHHCcombinaison_lineaire_2(o,a,o1,FU,to9); \ Eblock /* Introduit le 20220609083129... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* S O M M E O = O1 + O2 D E 2 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 : */ /* */ /*************************************************************************************************************************************/ #define HHCsomme(o,o1,o2) \ Bblock \ FHHCsomme(o,o1,o2); \ Eblock #define FHHCsomme(o,o1,o2) \ Bblock \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HHC(FHHCsomme_____utiliser_l_arithmetique_etendue \ ,BLOC(FgHHCsomme(o,o1,o2);) \ ); \ /* L'arithmetique etendue fut introduite ici le 20110811153401... */ \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 # define FgHHCsomme(o,o1,o2) \ Bblock \ FHHCinitialisation(o \ ,ADD2(HHReelle(o1),HHReelle(o2)) \ ,ADD2(HHImaginaire(o1),HHImaginaire(o2)) \ ,ADD2(HHJmaginaire(o1),HHJmaginaire(o2)) \ ,ADD2(HHKmaginaire(o1),HHKmaginaire(o2)) \ ,ADD2(HHSmaginaire(o1),HHSmaginaire(o2)) \ ,ADD2(HHTmaginaire(o1),HHTmaginaire(o2)) \ ,ADD2(HHUmaginaire(o1),HHUmaginaire(o2)) \ ,ADD2(HHVmaginaire(o1),HHVmaginaire(o2)) \ ); \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FgHHCsomme(o,o1,o2) \ Bblock \ FGsomme_difference(HH,hyper_hyper_complexe,hyper_complexe \ ,o \ ,o1,o2 \ ,dHHReelle,dHHImaginaire \ ,FgHCsomme \ ); \ /* ATTENTION, 'HH' et 'hyper_hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D I F F E R E N C E O = O1 - O2 D E 2 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 : */ /* */ /*************************************************************************************************************************************/ #define HHCdifference(o,o1,o2) \ Bblock \ FHHCdifference(o,o1,o2); \ Eblock #define FHHCdifference(o,o1,o2) \ Bblock \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HHC(FHHCdifference_____utiliser_l_arithmetique_etendue \ ,BLOC(FgHHCdifference(o,o1,o2);) \ ); \ /* L'arithmetique etendue fut introduite ici le 20110811153401... */ \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 # define FgHHCdifference(o,o1,o2) \ Bblock \ FHHCinitialisation(o \ ,SOUS(HHReelle(o1),HHReelle(o2)) \ ,SOUS(HHImaginaire(o1),HHImaginaire(o2)) \ ,SOUS(HHJmaginaire(o1),HHJmaginaire(o2)) \ ,SOUS(HHKmaginaire(o1),HHKmaginaire(o2)) \ ,SOUS(HHSmaginaire(o1),HHSmaginaire(o2)) \ ,SOUS(HHTmaginaire(o1),HHTmaginaire(o2)) \ ,SOUS(HHUmaginaire(o1),HHUmaginaire(o2)) \ ,SOUS(HHVmaginaire(o1),HHVmaginaire(o2)) \ ); \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FgHHCdifference(o,o1,o2) \ Bblock \ FGsomme_difference(HH,hyper_hyper_complexe,hyper_complexe \ ,o \ ,o1,o2 \ ,dHHReelle,dHHImaginaire \ ,FgHCdifference \ ); \ /* ATTENTION, 'HH' et 'hyper_hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R P O L A T I O N O = A*O1 + B*O2 E N T R E 2 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 , L E S N O M B R E S { A , B } E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HHCinterpolation(o,alpha,o1,beta,o2) \ Bblock \ FHHCinterpolation(o,alpha,o1,beta,o2); \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 # define FHHCinterpolation(o,alpha,o1,beta,o2) \ Bblock \ FHHCinitialisation(o \ ,LIZ2(alpha,HHReelle(o1),beta,HHReelle(o2)) \ ,LIZ2(alpha,HHImaginaire(o1),beta,HHImaginaire(o2)) \ ,LIZ2(alpha,HHJmaginaire(o1),beta,HHJmaginaire(o2)) \ ,LIZ2(alpha,HHKmaginaire(o1),beta,HHKmaginaire(o2)) \ ,LIZ2(alpha,HHSmaginaire(o1),beta,HHSmaginaire(o2)) \ ,LIZ2(alpha,HHTmaginaire(o1),beta,HHTmaginaire(o2)) \ ,LIZ2(alpha,HHUmaginaire(o1),beta,HHUmaginaire(o2)) \ ,LIZ2(alpha,HHVmaginaire(o1),beta,HHVmaginaire(o2)) \ ); \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FHHCinterpolation(o,alpha,o1,beta,o2) \ Bblock \ FGinterpolation(HH,hyper_hyper_complexe,hyper_complexe \ ,o \ ,alpha,o1,beta,o2 \ ,dHHReelle,dHHImaginaire \ ,FgHCinterpolation \ ); \ /* ATTENTION, 'HH' et 'hyper_hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P R O D U I T O = O1 * O2 D E 2 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 : */ /* */ /*************************************************************************************************************************************/ #define CHOI1_HHC(o1,o2) \ o1 #define CHOI2_HHC(o1,o2) \ o2 /* Introduit le 20230323135750 lors de la mise au point de 'v $xiirs/CAYA.W8' image correcte */ /* alors que 'v $xrs/CalabiYau.81$I valider_la_qualite_du_calcul_de_o1_et_de_o2' donnait */ /* une erreur peut-etre liee au fait que la multiplication n'est ni commutative, ni */ /* associative dans les hyper-hyper-complexes... */ #define HHCproduit(o,o1,o2) \ /* ATTENTION, il convient de ne pas oublier que : */ \ /* */ \ /* o1.o2 # o2.o1 */ \ /* (o1.o2).o3 # o1.(o2.o3) */ \ /* */ \ /* c'est-a-dire que le produit des octonions n'est ni commutatif, ni associatif... */ \ Bblock \ FHHCproduit(o,o1,o2); \ Eblock #define FHHCproduit(o,o1,o2) \ Bblock \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HHC(FHHCproduit_____utiliser_l_arithmetique_etendue \ ,BLOC(FgHHCproduit(o,o1,o2);) \ ); \ Eblock #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 # define FgHHCproduit(o,o1,o2) \ /* ATTENTION, il convient de ne pas oublier que : */ \ /* */ \ /* o1.o2 # o2.o1 */ \ /* (o1.o2).o3 # o1.(o2.o3) */ \ /* */ \ /* c'est-a-dire que le produit des octonions n'est ni commutatif, ni associatif... */ \ Bblock \ SEQUENCE_INCOMPLETE("la procedure 'FHHCproduit(...)' est trop compliquee a definir explicitement..."); \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define HHCproduit_theorique(o,o1,o2) \ Bblock \ FHHCproduit_theorique(o,o1,o2); \ Eblock # define FHHCproduit_theorique(o,o1,o2) \ Bblock \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HHC(FHHCproduit_____utiliser_l_arithmetique_etendue \ ,BLOC(FgHHCproduit_theorique(o,o1,o2);) \ ); \ Eblock # define FgHHCproduit_theorique(o,o1,o2) \ Bblock \ FGproduit(HH,hyper_hyper_complexe,hyper_complexe \ ,o \ ,o1,o2 \ ,dHHReelle,dHHImaginaire \ ,FgHCegal \ ,FgHCconjugaison \ ,FgHCsomme \ ,FgHCdifference \ ,FgHCproduit_theorique \ ); \ /* ATTENTION, 'HH' et 'hyper_hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ \ Eblock # define FgHHCproduit(o,o1,o2) \ Bblock \ Test(IL_FAUT(FHHCproduit_____utiliser_la_definition_theorique_du_produit)) \ Bblock \ FHHCproduit_theorique(o,o1,o2); \ /* ATTENTION, 'HH' et 'hyper_hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ \ Eblock \ ATes \ Bblock \ /* La possibilite du produit non theorique a ete introduite le 20110811135821... */ \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HHC \ (FHHCproduit_____utiliser_l_arithmetique_etendue \ ,BLOC( \ Bblock \ Test(IL_FAUT(FHHCproduit_____utiliser_l_arithmetique_etendue_dans_CxCxCxC)) \ /* Test introduit le 20120918142202... */ \ Bblock \ FCproduit(dHReelle(dHHReelle(o)) \ ,dHReelle(dHHReelle(o1)) \ ,dHReelle(dHHReelle(o2)) \ ); \ FCproduit(dHImaginaire(dHHReelle(o)) \ ,dHImaginaire(dHHReelle(o1)) \ ,dHImaginaire(dHHReelle(o2)) \ ); \ FCproduit(dHReelle(dHHImaginaire(o)) \ ,dHReelle(dHHImaginaire(o1)) \ ,dHReelle(dHHImaginaire(o2)) \ ); \ FCproduit(dHImaginaire(dHHImaginaire(o)) \ ,dHImaginaire(dHHImaginaire(o1)) \ ,dHImaginaire(dHHImaginaire(o2)) \ ); \ /* Produit dans CxCxCxC... */ \ /* */ \ /* Mais le 20120918163456 je note que ce n'est certainement pas comme cela que l'on fait */ \ /* le produit dans CxCxCxC car il independance entre les quatre plans C et donc lors de */ \ /* calculs de fractales on retombera sur des choses tres classiques (l'ensemble de */ \ /* Mandelbrot dans C par exemple...). */ \ Eblock \ ATes \ Bblock \ DEFV(hyper_hyper_complexe_etendu,o1_etendu); \ DEFV(hyper_hyper_complexe_etendu,o2_etendu); \ DEFV(hyper_hyper_complexe_etendu,o_etendu_1); \ DEFV(hyper_hyper_complexe_etendu,o_etendu_2); \ /* Nombre hyper-hyper-complexe resultat du "faux" produit avant (1) et apres (2) */ \ /* combinaisons lineaires. */ \ \ FHHCextension_directe(o1_etendu,o1); \ FHHCextension_directe(o2_etendu,o2); \ /* Introduit sous cette forme le 20111230092602... */ \ \ /* On notera le 20111007122014 que lors du calcul de produits du type : */ \ /* */ \ /* 1*o */ \ /* */ \ /* ('v $xiirc/JULJ.C4'), les monomes de 'HORNER_2_02(...)' qui referencent les deux */ \ /* angles (soit {22,21,12,11}) sont nuls a cause donc de l'octonion "1" (dont les sept */ \ /* arguments -angles- sont nuls) dans le produit "1*o". Seuls sont donc alors interessants */ \ /* les monomes {20,10,02,01,00}... */ \ \ EGAL(HHCHHS_Rho(o_etendu_1) \ ,HORNER_2_02(HHCHHS_Rho(o1_etendu) \ ,HHCHHS_Rho(o2_etendu) \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_R2R2 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_R2R1 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_R2R0 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_R1R2 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_R1R1 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_R1R0 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_R0R2 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_R0R1 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_R0R0 \ ) \ ); \ EGAL(HHCHHS_Angle1(o_etendu_1) \ ,HORNER_2_02(HHCHHS_Angle1(o1_etendu) \ ,HHCHHS_Angle1(o2_etendu) \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A12A12 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A12A11 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A12A10 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A11A12 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A11A11 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A11A10 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A10A12 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A10A11 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A10A10 \ ) \ ); \ EGAL(HHCHHS_Angle2(o_etendu_1) \ ,HORNER_2_02(HHCHHS_Angle2(o1_etendu) \ ,HHCHHS_Angle2(o2_etendu) \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A22A22 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A22A21 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A22A20 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A21A22 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A21A21 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A21A20 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A20A22 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A20A21 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A20A20 \ ) \ ); \ EGAL(HHCHHS_Angle3(o_etendu_1) \ ,HORNER_2_02(HHCHHS_Angle3(o1_etendu) \ ,HHCHHS_Angle3(o2_etendu) \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A32A32 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A32A31 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A32A30 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A31A32 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A31A31 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A31A30 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A30A32 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A30A31 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A30A30 \ ) \ ); \ EGAL(HHCHHS_Angle4(o_etendu_1) \ ,HORNER_2_02(HHCHHS_Angle4(o1_etendu) \ ,HHCHHS_Angle4(o2_etendu) \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A42A42 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A42A41 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A42A40 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A41A42 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A41A41 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A41A40 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A40A42 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A40A41 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A40A40 \ ) \ ); \ EGAL(HHCHHS_Angle5(o_etendu_1) \ ,HORNER_2_02(HHCHHS_Angle5(o1_etendu) \ ,HHCHHS_Angle5(o2_etendu) \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A52A52 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A52A51 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A52A50 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A51A52 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A51A51 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A51A50 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A50A52 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A50A51 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A50A50 \ ) \ ); \ EGAL(HHCHHS_Angle6(o_etendu_1) \ ,HORNER_2_02(HHCHHS_Angle6(o1_etendu) \ ,HHCHHS_Angle6(o2_etendu) \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A62A62 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A62A61 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A62A60 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A61A62 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A61A61 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A61A60 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A60A62 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A60A61 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A60A60 \ ) \ ); \ EGAL(HHCHHS_Angle7(o_etendu_1) \ ,HORNER_2_02(HHCHHS_Angle7(o1_etendu) \ ,HHCHHS_Angle7(o2_etendu) \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A72A72 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A72A71 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A72A70 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A71A72 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A71A71 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A71A70 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A70A72 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A70A71 \ ,FHHCproduit_____avec_le_produit_non_theorique__Horner_A70A70 \ ) \ ); \ /* Calcul des huit composantes etendues de 'o'... */ \ \ EGAL(HHCHHS_Rho(o_etendu_2) \ ,PUIX(AXPB(FHHCproduit_____avec_le_produit_non_theorique__ponder1_Rho \ ,HHCHHS_Rho(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__transl1_Rho \ ) \ ,FHHCproduit_____avec_le_produit_non_theorique__exposa1_Rho \ ) \ ); \ \ EGAL(HHCHHS_Angle1(o_etendu_2) \ ,OPC1(IL_FAUT(FHHCproduit_____avec_le_produit_non_theorique__modulo_Angle1) \ ,CERC \ ,NEUT \ ,AXPB(FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle1 \ ,LIN7(FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle1Angle1 \ ,HHCHHS_Angle1(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle1Angle2 \ ,HHCHHS_Angle2(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle1Angle3 \ ,HHCHHS_Angle3(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle1Angle4 \ ,HHCHHS_Angle4(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle1Angle5 \ ,HHCHHS_Angle5(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle1Angle6 \ ,HHCHHS_Angle6(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle1Angle7 \ ,HHCHHS_Angle7(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__transl2_Angle1 \ ) \ ,FHHCproduit_____avec_le_produit_non_theorique__transl1_Angle1 \ ) \ ) \ ); \ EGAL(HHCHHS_Angle2(o_etendu_2) \ ,OPC1(IL_FAUT(FHHCproduit_____avec_le_produit_non_theorique__modulo_Angle1) \ ,CERC \ ,NEUT \ ,AXPB(FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle2 \ ,LIN7(FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle2Angle1 \ ,HHCHHS_Angle1(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle2Angle2 \ ,HHCHHS_Angle2(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle2Angle3 \ ,HHCHHS_Angle3(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle2Angle4 \ ,HHCHHS_Angle4(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle2Angle5 \ ,HHCHHS_Angle5(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle2Angle6 \ ,HHCHHS_Angle6(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle2Angle7 \ ,HHCHHS_Angle7(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__transl2_Angle2 \ ) \ ,FHHCproduit_____avec_le_produit_non_theorique__transl1_Angle2 \ ) \ ) \ ); \ EGAL(HHCHHS_Angle3(o_etendu_2) \ ,OPC1(IL_FAUT(FHHCproduit_____avec_le_produit_non_theorique__modulo_Angle1) \ ,CERC \ ,NEUT \ ,AXPB(FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle3 \ ,LIN7(FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle3Angle1 \ ,HHCHHS_Angle1(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle3Angle2 \ ,HHCHHS_Angle2(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle3Angle3 \ ,HHCHHS_Angle3(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle3Angle4 \ ,HHCHHS_Angle4(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle3Angle5 \ ,HHCHHS_Angle5(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle3Angle6 \ ,HHCHHS_Angle6(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle3Angle7 \ ,HHCHHS_Angle7(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__transl2_Angle3 \ ) \ ,FHHCproduit_____avec_le_produit_non_theorique__transl1_Angle3 \ ) \ ) \ ); \ EGAL(HHCHHS_Angle4(o_etendu_2) \ ,OPC1(IL_FAUT(FHHCproduit_____avec_le_produit_non_theorique__modulo_Angle1) \ ,CERC \ ,NEUT \ ,AXPB(FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle4 \ ,LIN7(FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle4Angle1 \ ,HHCHHS_Angle1(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle4Angle2 \ ,HHCHHS_Angle2(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle4Angle3 \ ,HHCHHS_Angle3(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle4Angle4 \ ,HHCHHS_Angle4(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle4Angle5 \ ,HHCHHS_Angle5(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle4Angle6 \ ,HHCHHS_Angle6(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle4Angle7 \ ,HHCHHS_Angle7(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__transl2_Angle4 \ ) \ ,FHHCproduit_____avec_le_produit_non_theorique__transl1_Angle4 \ ) \ ) \ ); \ EGAL(HHCHHS_Angle5(o_etendu_2) \ ,OPC1(IL_FAUT(FHHCproduit_____avec_le_produit_non_theorique__modulo_Angle1) \ ,CERC \ ,NEUT \ ,AXPB(FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle5 \ ,LIN7(FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle5Angle1 \ ,HHCHHS_Angle1(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle5Angle2 \ ,HHCHHS_Angle2(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle5Angle3 \ ,HHCHHS_Angle3(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle5Angle4 \ ,HHCHHS_Angle4(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle5Angle5 \ ,HHCHHS_Angle5(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle5Angle6 \ ,HHCHHS_Angle6(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle5Angle7 \ ,HHCHHS_Angle7(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__transl2_Angle5 \ ) \ ,FHHCproduit_____avec_le_produit_non_theorique__transl1_Angle5 \ ) \ ) \ ); \ EGAL(HHCHHS_Angle6(o_etendu_2) \ ,OPC1(IL_FAUT(FHHCproduit_____avec_le_produit_non_theorique__modulo_Angle1) \ ,CERC \ ,NEUT \ ,AXPB(FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle6 \ ,LIN7(FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle6Angle1 \ ,HHCHHS_Angle1(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle6Angle2 \ ,HHCHHS_Angle2(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle6Angle3 \ ,HHCHHS_Angle3(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle6Angle4 \ ,HHCHHS_Angle4(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle6Angle5 \ ,HHCHHS_Angle5(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle6Angle6 \ ,HHCHHS_Angle6(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle6Angle7 \ ,HHCHHS_Angle7(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__transl2_Angle6 \ ) \ ,FHHCproduit_____avec_le_produit_non_theorique__transl1_Angle6 \ ) \ ) \ ); \ EGAL(HHCHHS_Angle7(o_etendu_2) \ ,OPC1(IL_FAUT(FHHCproduit_____avec_le_produit_non_theorique__modulo_Angle1) \ ,CERC \ ,NEUT \ ,AXPB(FHHCproduit_____avec_le_produit_non_theorique__ponder1_Angle7 \ ,LIN7(FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle7Angle1 \ ,HHCHHS_Angle1(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle7Angle2 \ ,HHCHHS_Angle2(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle7Angle3 \ ,HHCHHS_Angle3(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle7Angle4 \ ,HHCHHS_Angle4(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle7Angle5 \ ,HHCHHS_Angle5(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle7Angle6 \ ,HHCHHS_Angle6(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__ponder2_Angle7Angle7 \ ,HHCHHS_Angle7(o_etendu_1) \ ,FHHCproduit_____avec_le_produit_non_theorique__transl2_Angle7 \ ) \ ,FHHCproduit_____avec_le_produit_non_theorique__transl1_Angle7 \ ) \ ) \ ); \ \ FHHCextension_inverse(o,o_etendu_2); \ /* Introduit sous cette forme le 20111230092602... */ \ Eblock \ ETes \ Eblock \ ) \ ); \ Eblock \ ETes \ Eblock #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N */ /* P U I S S A N C E N - I E M E O = O1 ( P O S I T I V E O U N E G A T I V E ) */ /* D ' U N N O M B R E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HHCpuissance(o,o1,exposant) \ Bblock \ FHHCpuissance(o,o1,exposant); \ Eblock #define FHHCpuissance(o,o1,exposant) \ Bblock \ FgHHCpuissance(o,o1,exposant); \ Eblock #define FgHHCpuissance(o,o1,exposant) \ /* Definition introduite le 20110824071133... */ \ Bblock \ Test(EST_ENTIER(exposant)) \ /* Test introduit le 20110829140721 pour plus de generalite... */ \ Bblock \ DEFV(hyper_hyper_complexe,o_cumul_multiplicatif); \ FHHCegal(o_cumul_multiplicatif,HHC_____octonion_p1__0__0__0__0__0__0__0); \ /* Nombre complexe intermediaire donnant le "cumul multiplicatif" courant. Il est */ \ /* initialise ici a {1,0,0,0,0,0,0,0,0} et c'est cette valeur qui est renvoyee en cas */ \ /* d'erreur... */ \ /* */ \ /* On notera qu'il n'est pas possible d'optimiser cette sequence en faisant une */ \ /* iteration de moins via l'initialisation : */ \ /* */ \ /* FHHCegal(o_cumul_multiplicatif,o1); */ \ /* */ \ /* puis : */ \ /* */ \ /* Repe(TRMU(exposant)) */ \ /* */ \ /* a cause du cas de l'exposant nul pour lequel le resultat est {1,0,0,0,0,0,0,0,0}. D'autre */ \ /* part si 'IL_NE_FAUT_PAS(FHHCproduit_____utiliser_la_definition_theorique_du_produit)' */ \ /* les deux methodes ne donneraient pas le meme resultat sauf cas particuliers... */ \ \ Test(IFGE(exposant,ZERO)) \ Bblock \ Repe(NEUT(exposant)) \ Bblock \ FHHCproduit(o_cumul_multiplicatif,o_cumul_multiplicatif,o1); \ /* On notera le 20230324100530 la question problematique suivante. En effet, pour les */ \ /* hyper-hyper-complexes, la multiplication n'est pas commutative : */ \ /* */ \ /* o1.o2 # o2.o1 (en general...) */ \ /* */ \ /* En ce qui concerne la puissance, on a par exemple pour un exposant egal a 3 : */ \ /* */ \ /* o1^3 = o1.o1.o1 */ \ /* */ \ /* Or lors du calcul iteratif precedent, l'ordre entre 'o_cumul_multiplicatif' et 'o1' est */ \ /* en fait arbitraire. Doit-on utiliser : */ \ /* */ \ /* o1.o1.o1 = o1.(o1.o1) */ \ /* */ \ /* ou bien : */ \ /* */ \ /* o1.o1.o1 = (o1.o1).o1 */ \ /* */ \ /* Or, en toute generalite, on a cause de la non commutativite : */ \ /* */ \ /* o1.(o1.o1) # (o1.o1).o1 */ \ /* \___/ \___/ */ \ /* o2 o2 */ \ /* */ \ /* Alors que faire ? Au passage, cette interrogation peut etre etendue a toutes les */ \ /* fonctions et a tous les operateurs un peu "compliques" definis par ailleurs comme, */ \ /* par exemple, les lignes trigonometriques, l'exponentielle, le logarithme,... */ \ Eblock \ ERep \ Eblock \ ATes \ Bblock \ Repe(NEGA(exposant)) \ Bblock \ FHHCquotient(o_cumul_multiplicatif,o_cumul_multiplicatif,o1); \ Eblock \ ERep \ Eblock \ ETes \ \ FHHCegal(o,o_cumul_multiplicatif); \ Eblock \ ATes \ Bblock \ DEFV(hyper_hyper_complexe,o_exposant); \ /* Exposant hyper-hyper-complexe. */ \ \ FHHCinitialisation(o_exposant \ ,exposant \ ,I0_Octonion \ ,J0_Octonion \ ,K0_Octonion \ ,S0_Octonion \ ,T0_Octonion \ ,U0_Octonion \ ,V0_Octonion \ ); \ /* Calcul de : */ \ /* */ \ /* exposant + i.0 + j.0 + k.0 + s.0 + t.0 + u.0 + v.0 */ \ /* */ \ FHHCexponentielle_octonionique(o \ ,o1 \ ,o_exposant \ ); \ /* Calcul de : */ \ /* */ \ /* exposant + i.0 + j.0 + k.0 + s.0 + t.0 + u.0 + v.0 */ \ /* o1 */ \ /* */ \ /* (introduit le 20110829140721 pour plus de generalite qu'un exposant entier). */ \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A.O1 + B */ /* F O R M E H O M O G R A P H I Q U E O = ---------- */ /* C.O2 + D */ /* */ /* D E 2 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 */ /* L E S N O M B R E S ' A ' , ' B ' , ' C ' E T ' D ' E T A N T R E E L S : */ /* */ /*************************************************************************************************************************************/ #define HHCforme_homographique(o,alpha,o1,beta,gamma,o2,delta) \ Bblock \ FHHCforme_homographique(o,alpha,o1,beta,gamma,o2,delta); \ Eblock #define FHHCforme_homographique(o,alpha,o1,beta,gamma,o2,delta) \ Bblock \ FgHHCforme_homographique(o,alpha,o1,beta,gamma,o2,delta); \ Eblock #define FgHHCforme_homographique(o,alpha,o1,beta,gamma,o2,delta) \ /* Definition introduite le 20210207101344... */ \ Bblock \ DEFV(hyper_hyper_complexe,o___numerateur); \ DEFV(hyper_hyper_complexe,o_denominateur); \ /* Numerateur et denominateur de la forme homographique. */ \ \ FHHCforme_lineaire(o___numerateur,alpha,o1,beta); \ /* Calcul de : */ \ /* */ \ /* A.o1 + B */ \ /* */ \ FHHCforme_lineaire(o_denominateur,gamma,o2,delta); \ /* Calcul de : */ \ /* */ \ /* C.o2 + D */ \ /* */ \ \ FHHCquotient(o,o___numerateur,o_denominateur); \ /* Mise a jour du nombre complexe resultat : */ \ /* */ \ /* A.o1 + B */ \ /* ---------- */ \ /* C.o2 + D */ \ /* */ \ /* en notant qu'en general les deux nombres 'o1' et 'o2' sont identiques... */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* -- */ /* O1 O1.O2 */ /* Q U O T I E N T O = ---- = ------- D E 2 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 : */ /* O2 2 */ /* |O2| */ /* */ /*************************************************************************************************************************************/ #define HHCquotient(o,o1,o2) \ Bblock \ FHHCquotient(o,o1,o2); \ Eblock #define FHHCquotient(o,o1,o2) \ Bblock \ UTILISER_EVENTUELLEMENT_L_ARITHMETIQUE_ETENDUE_DANS_HHC(FHHCquotient_____utiliser_l_arithmetique_etendue \ ,BLOC(FgHHCquotient(o,o1,o2);) \ ); \ /* L'arithmetique etendue fut introduite ici le 20110811153401... */ \ Eblock #define FgHHCquotient(o,o1,o2) \ /* ATTENTION, il n'est pas utile de definir quelque chose du type : */ \ /* */ \ /* # define FGquotient(prefixe,corps,sous_corps,...) \ */ \ /* (...) */ \ /* */ \ /* puique la definition qui suit n'utilise que des fonctions du type 'FHHC...(...)' qui sont */ \ /* de haut niveau et ne font aucunes hypotheses sur les structures de base... */ \ Bblock \ DEFV(hyper_hyper_complexe,o2_barre); \ /* Ce nombre hyper-hyper-complexe est le conjugue du nombre hyper-hyper-complexe argument */ \ /* 'o2'. */ \ DEFV(hyper_hyper_complexe,o_intermediaire_quotient_1); \ DEFV(hyper_hyper_complexe,o_intermediaire_quotient_2); \ /* Ces deux nombres hyper-hyper-complexes intermediaires sont destines a traiter les cas */ \ /* ou par malheur le nombre hyper-hyper-complexe resultat 'o' serait identique a l'un des */ \ /* deux arguments 'o1' ou 'o2'. */ \ \ FHHCconjugaison(o2_barre,o2); \ /* Calcul de : */ \ /* */ \ /* -- */ \ /* o2 */ \ /* */ \ FHHCproduit(o_intermediaire_quotient_1,o1,o2_barre); \ /* Calcul de : */ \ /* */ \ /* -- */ \ /* o1.o2 */ \ /* */ \ FHHCforme_lineaire(o_intermediaire_quotient_2,fINVZ(FHHCmodule2(o2)),o_intermediaire_quotient_1,FZERO); \ /* Calcul de : */ \ /* */ \ /* -- */ \ /* o1.o2 */ \ /* ------- */ \ /* 2 */ \ /* |o2| */ \ /* */ \ /* Le 20071201105511 'INVZ(...)' fut remplace tardivement par 'fINVZ(...)'... */ \ FHHCegal(o,o_intermediaire_quotient_2); \ /* Mise a jour du nombre hyper-hyper-complexe resultat... */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 1 */ /* I N V E R S E O = ---- D ' U N N O M B R E H Y P E R - H Y P E R - C O M P L E X E : */ /* O1 */ /* */ /*************************************************************************************************************************************/ #define HHCinverse(o,o1) \ Bblock \ FHHCinverse(o,o1); \ Eblock #define FHHCinverse(o,o1) \ /* Ces definitions furent introduites le 20060425154232... */ \ Bblock \ FHHCquotient(o,HHC_____octonion_p1__0__0__0__0__0__0__0,o1); \ /* Calcul de : */ \ /* */ \ /* 1 */ \ /* ---- */ \ /* o1 */ \ /* */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 2 */ /* N O R M E O U M O D U L E A U C A R R E | O | D ' U N */ /* N O M B R E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HHCmodule2(o) \ FHHCmodule2(o) #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 # define FHHCmodule2(o) \ ADD8(EXP2(HHReelle(o)) \ ,EXP2(HHImaginaire(o)) \ ,EXP2(HHJmaginaire(o)) \ ,EXP2(HHKmaginaire(o)) \ ,EXP2(HHSmaginaire(o)) \ ,EXP2(HHTmaginaire(o)) \ ,EXP2(HHUmaginaire(o)) \ ,EXP2(HHVmaginaire(o)) \ ) /* ATTENTION, on notera que l'on ne peut pas definir la norme par : */ /* */ /* - */ /* N(o) = o.o */ /* */ /* car en effet le produit 'FHHCproduit(...)' fait intervenir des variables intermediaires */ /* qui sont incompatibles avec l'utilisation de 'FHHCmodule2(...)' en tant que scalaire */ /* dans des expressions... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 #ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 # define FHHCmodule2(o) \ FGmodule2(HH,hyper_hyper_complexe,hyper_complexe \ ,o \ ,dHHReelle,dHHImaginaire \ ,HCmodule2 \ ) \ /* ATTENTION, 'HH' et 'hyper_hyper_complexe' doivent etre cote a cote afin de garantir une */ \ /* utilisation correcte de l'operateur de concatenation '`'... */ #Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 #Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M O D U L E | O | D ' U N N O M B R E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HHC_MODULE_UNITAIRE \ FU #define HHCmodule(o) \ FHHCmodule(o) #define FHHCmodule(o) \ RACX(FHHCmodule2(o)) /* ATTENTION, il n'est pas utile de definir quelque chose du type : */ /* */ /* # define FGmodule(prefixe,corps,sous_corps,...) \ */ /* (...) */ /* */ /* puique la definition qui suit n'utilise que des fonctions du type 'FHHC...(...)' qui sont */ /* de haut niveau et ne font aucunes hypotheses sur les structures de base... */ #define LogHHCmodule(z) \ LOGX(HHCmodule(z)) \ /* Introduit le 20180927085818 pour son utilite en geometrie "tropicale" (anciennement */ \ /* appelee "MAX-PLUS"...). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* -- */ /* T R A C E O = O1 + O1 D ' U N N O M B R E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /* */ /* Rappel : */ /* */ /* Si N(o) et T(o) designent respectivement */ /* la norme et la trace du nombre hyper-hyper-complexe 'o', */ /* on a : */ /* */ /* 2 */ /* o - T(o).o + N(o) = 0 */ /* */ /* */ /*************************************************************************************************************************************/ #define HHCtrace(o,o1) \ Bblock \ FHHCtrace(o,o1); \ Eblock #define FHHCtrace(o,o1) \ /* ATTENTION, il n'est pas utile de definir quelque chose du type : */ \ /* */ \ /* # define FGtrace(prefixe,corps,sous_corps,...) \ */ \ /* (...) */ \ /* */ \ /* puique la definition qui suit n'utilise que des fonctions du type 'FHHC...(...)' qui sont */ \ /* de haut niveau et ne font aucunes hypotheses sur les structures de base... */ \ Bblock \ DEFV(hyper_hyper_complexe,o1_barre); \ /* Ce nombre hyper-hyper-complexe est le conjugue du nombre hyper-hyper-complexe argument */ \ /* 'o1'. */ \ \ FHHCconjugaison(o1_barre,o1); \ /* Calcul de : */ \ /* */ \ /* -- */ \ /* o1 */ \ /* */ \ FHHCsomme(o,o1,o1_barre); \ /* Calcul de : */ \ /* */ \ /* -- */ \ /* o1 + o1 */ \ /* */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A R G U M E N T S D E O D A N S [ - P I , + P I ] D ' U N N O M B R E */ /* H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ /* Les procedures suivantes furent introduites le 20110811140935... */ #define HHCargumentA1_PI(o) \ FHHCargumentA1_PI(o) #define FHHCargumentA1_PI(o) \ gAngle1_8D(ARTG \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,S0_Octonion,T0_Octonion,U0_Octonion,V0_Octonion \ ,HHReelle(o),HHImaginaire(o),HHJmaginaire(o),HHKmaginaire(o) \ ,HHSmaginaire(o),HHTmaginaire(o),HHUmaginaire(o),HHVmaginaire(o) \ ) #define HHCargumentA2_PI(o) \ FHHCargumentA2_PI(o) #define FHHCargumentA2_PI(o) \ gAngle2_8D(ARTG \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,S0_Octonion,T0_Octonion,U0_Octonion,V0_Octonion \ ,HHReelle(o),HHImaginaire(o),HHJmaginaire(o),HHKmaginaire(o) \ ,HHSmaginaire(o),HHTmaginaire(o),HHUmaginaire(o),HHVmaginaire(o) \ ) #define HHCargumentA3_PI(o) \ FHHCargumentA3_PI(o) #define FHHCargumentA3_PI(o) \ gAngle3_8D(ARTG \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,S0_Octonion,T0_Octonion,U0_Octonion,V0_Octonion \ ,HHReelle(o),HHImaginaire(o),HHJmaginaire(o),HHKmaginaire(o) \ ,HHSmaginaire(o),HHTmaginaire(o),HHUmaginaire(o),HHVmaginaire(o) \ ) #define HHCargumentA4_PI(o) \ FHHCargumentA4_PI(o) #define FHHCargumentA4_PI(o) \ gAngle4_8D(ARTG \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,S0_Octonion,T0_Octonion,U0_Octonion,V0_Octonion \ ,HHReelle(o),HHImaginaire(o),HHJmaginaire(o),HHKmaginaire(o) \ ,HHSmaginaire(o),HHTmaginaire(o),HHUmaginaire(o),HHVmaginaire(o) \ ) #define HHCargumentA5_PI(o) \ FHHCargumentA5_PI(o) #define FHHCargumentA5_PI(o) \ gAngle5_8D(ARTG \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,S0_Octonion,T0_Octonion,U0_Octonion,V0_Octonion \ ,HHReelle(o),HHImaginaire(o),HHJmaginaire(o),HHKmaginaire(o) \ ,HHSmaginaire(o),HHTmaginaire(o),HHUmaginaire(o),HHVmaginaire(o) \ ) #define HHCargumentA6_PI(o) \ FHHCargumentA6_PI(o) #define FHHCargumentA6_PI(o) \ gAngle6_8D(ARTG \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,S0_Octonion,T0_Octonion,U0_Octonion,V0_Octonion \ ,HHReelle(o),HHImaginaire(o),HHJmaginaire(o),HHKmaginaire(o) \ ,HHSmaginaire(o),HHTmaginaire(o),HHUmaginaire(o),HHVmaginaire(o) \ ) #define HHCargumentA7_PI(o) \ FHHCargumentA7_PI(o) #define FHHCargumentA7_PI(o) \ gAngle7_8D(ARTG \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,S0_Octonion,T0_Octonion,U0_Octonion,V0_Octonion \ ,HHReelle(o),HHImaginaire(o),HHJmaginaire(o),HHKmaginaire(o) \ ,HHSmaginaire(o),HHTmaginaire(o),HHUmaginaire(o),HHVmaginaire(o) \ ) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A R G U M E N T S D E O D A N S [ 0 , 2 . P I ] D ' U N N O M B R E */ /* H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ /* Les procedures suivantes furent introduites le 20110811140935... */ #define HHCargumentA1_2PI(o) \ FHHCargumentA1_2PI(o) #define FHHCargumentA1_2PI(o) \ NEUT(gAngle1_8D(ATAN \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,S0_Octonion,T0_Octonion,U0_Octonion,V0_Octonion \ ,HHReelle(o),HHImaginaire(o),HHJmaginaire(o),HHKmaginaire(o) \ ,HHSmaginaire(o),HHTmaginaire(o),HHUmaginaire(o),HHVmaginaire(o) \ ) \ ) #define HHCargumentA2_2PI(o) \ FHHCargumentA2_2PI(o) #define FHHCargumentA2_2PI(o) \ SOUS(gAngle2_8D(ATAN \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,S0_Octonion,T0_Octonion,U0_Octonion,V0_Octonion \ ,HHReelle(o),HHImaginaire(o),HHJmaginaire(o),HHKmaginaire(o) \ ,HHSmaginaire(o),HHTmaginaire(o),HHUmaginaire(o),HHVmaginaire(o) \ ) \ ,PI_SUR_2 \ ) #define HHCargumentA3_2PI(o) \ FHHCargumentA3_2PI(o) #define FHHCargumentA3_2PI(o) \ SOUS(gAngle3_8D(ATAN \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,S0_Octonion,T0_Octonion,U0_Octonion,V0_Octonion \ ,HHReelle(o),HHImaginaire(o),HHJmaginaire(o),HHKmaginaire(o) \ ,HHSmaginaire(o),HHTmaginaire(o),HHUmaginaire(o),HHVmaginaire(o) \ ) \ ,PI_SUR_2 \ ) #define HHCargumentA4_2PI(o) \ FHHCargumentA4_2PI(o) #define FHHCargumentA4_2PI(o) \ SOUS(gAngle4_8D(ATAN \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,S0_Octonion,T0_Octonion,U0_Octonion,V0_Octonion \ ,HHReelle(o),HHImaginaire(o),HHJmaginaire(o),HHKmaginaire(o) \ ,HHSmaginaire(o),HHTmaginaire(o),HHUmaginaire(o),HHVmaginaire(o) \ ) \ ,PI_SUR_2 \ ) #define HHCargumentA5_2PI(o) \ FHHCargumentA5_2PI(o) #define FHHCargumentA5_2PI(o) \ SOUS(gAngle5_8D(ATAN \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,S0_Octonion,T0_Octonion,U0_Octonion,V0_Octonion \ ,HHReelle(o),HHImaginaire(o),HHJmaginaire(o),HHKmaginaire(o) \ ,HHSmaginaire(o),HHTmaginaire(o),HHUmaginaire(o),HHVmaginaire(o) \ ) \ ,PI_SUR_2 \ ) #define HHCargumentA6_2PI(o) \ FHHCargumentA6_2PI(o) #define FHHCargumentA6_2PI(o) \ SOUS(gAngle6_8D(ATAN \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,S0_Octonion,T0_Octonion,U0_Octonion,V0_Octonion \ ,HHReelle(o),HHImaginaire(o),HHJmaginaire(o),HHKmaginaire(o) \ ,HHSmaginaire(o),HHTmaginaire(o),HHUmaginaire(o),HHVmaginaire(o) \ ) \ ,PI_SUR_2 \ ) #define HHCargumentA7_2PI(o) \ FHHCargumentA7_2PI(o) #define FHHCargumentA7_2PI(o) \ SOUS(gAngle7_8D(ATAN \ ,R0_Quaternion,I0_Quaternion,J0_Quaternion,K0_Quaternion \ ,S0_Octonion,T0_Octonion,U0_Octonion,V0_Octonion \ ,HHReelle(o),HHImaginaire(o),HHJmaginaire(o),HHKmaginaire(o) \ ,HHSmaginaire(o),HHTmaginaire(o),HHUmaginaire(o),HHVmaginaire(o) \ ) \ ,PI_SUR_2 \ ) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M P O S A N T E S C A R T E S I E N N E S D ' U N N O M B R E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ /* Les procedures suivantes furent introduites le 20110811140935... */ #define HHCcomposanteR(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ FHHCcomposanteR(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) #define FHHCcomposanteR(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ X2cartesienne_8D(rho \ ,ADD2(angle7,PI_SUR_2) \ ,ADD2(angle6,PI_SUR_2) \ ,ADD2(angle5,PI_SUR_2) \ ,ADD2(angle4,PI_SUR_2) \ ,ADD2(angle3,PI_SUR_2) \ ,ADD2(angle2,PI_SUR_2) \ ,NEUT(angle1) \ ) /* ATTENTION : c'est bien 'X2cartesienne_8D(...)' et non pas 'X1cartesienne_8D(...)' afin */ /* de retomber sur les coordonnees polaires du plan Complexe... */ #define HHCcomposanteI(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ FHHCcomposanteI(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) #define FHHCcomposanteI(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ X1cartesienne_8D(rho \ ,ADD2(angle7,PI_SUR_2) \ ,ADD2(angle6,PI_SUR_2) \ ,ADD2(angle5,PI_SUR_2) \ ,ADD2(angle4,PI_SUR_2) \ ,ADD2(angle3,PI_SUR_2) \ ,ADD2(angle2,PI_SUR_2) \ ,NEUT(angle1) \ ) /* ATTENTION : c'est bien 'X1cartesienne_8D(...)' et non pas 'X2cartesienne_8D(...)' afin */ /* de retomber sur les coordonnees polaires du plan Complexe... */ #define HHCcomposanteJ(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ FHHCcomposanteJ(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) #define FHHCcomposanteJ(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ X3cartesienne_8D(rho \ ,ADD2(angle7,PI_SUR_2) \ ,ADD2(angle6,PI_SUR_2) \ ,ADD2(angle5,PI_SUR_2) \ ,ADD2(angle4,PI_SUR_2) \ ,ADD2(angle3,PI_SUR_2) \ ,ADD2(angle2,PI_SUR_2) \ ,NEUT(angle1) \ ) #define HHCcomposanteK(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ FHHCcomposanteK(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) #define FHHCcomposanteK(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ X4cartesienne_8D(rho \ ,ADD2(angle7,PI_SUR_2) \ ,ADD2(angle6,PI_SUR_2) \ ,ADD2(angle5,PI_SUR_2) \ ,ADD2(angle4,PI_SUR_2) \ ,ADD2(angle3,PI_SUR_2) \ ,ADD2(angle2,PI_SUR_2) \ ,NEUT(angle1) \ ) #define HHCcomposanteS(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ FHHCcomposanteS(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) #define FHHCcomposanteS(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ X5cartesienne_8D(rho \ ,ADD2(angle7,PI_SUR_2) \ ,ADD2(angle6,PI_SUR_2) \ ,ADD2(angle5,PI_SUR_2) \ ,ADD2(angle4,PI_SUR_2) \ ,ADD2(angle3,PI_SUR_2) \ ,ADD2(angle2,PI_SUR_2) \ ,NEUT(angle1) \ ) #define HHCcomposanteT(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ FHHCcomposanteT(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) #define FHHCcomposanteT(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ X6cartesienne_8D(rho \ ,ADD2(angle7,PI_SUR_2) \ ,ADD2(angle6,PI_SUR_2) \ ,ADD2(angle5,PI_SUR_2) \ ,ADD2(angle4,PI_SUR_2) \ ,ADD2(angle3,PI_SUR_2) \ ,ADD2(angle2,PI_SUR_2) \ ,NEUT(angle1) \ ) #define HHCcomposanteU(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ FHHCcomposanteU(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) #define FHHCcomposanteU(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ X7cartesienne_8D(rho \ ,ADD2(angle7,PI_SUR_2) \ ,ADD2(angle6,PI_SUR_2) \ ,ADD2(angle5,PI_SUR_2) \ ,ADD2(angle4,PI_SUR_2) \ ,ADD2(angle3,PI_SUR_2) \ ,ADD2(angle2,PI_SUR_2) \ ,NEUT(angle1) \ ) #define HHCcomposanteV(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ FHHCcomposanteV(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) #define FHHCcomposanteV(rho,angle1,angle2,angle3,angle4,angle5,angle6,angle7) \ X8cartesienne_8D(rho \ ,ADD2(angle7,PI_SUR_2) \ ,ADD2(angle6,PI_SUR_2) \ ,ADD2(angle5,PI_SUR_2) \ ,ADD2(angle4,PI_SUR_2) \ ,ADD2(angle3,PI_SUR_2) \ ,ADD2(angle2,PI_SUR_2) \ ,NEUT(angle1) \ ) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E X P O N E N T I A T I O N H Y P E R - H Y P E R - C O M P L E X E A B A S E R E E L L E : */ /* */ /*************************************************************************************************************************************/ #define HHCexponentielle(o,base,o1) \ Bblock \ FHHCexponentielle(o,base,o1); \ Eblock #define FHHCexponentielle(o,base,o1) \ Bblock \ FgHHCexponentielle(o,base,o1); \ Eblock #define FHHCexponentielle_RI(composante) \ NEUT(composante) #define FHHCexponentielle_JKSTUV(composante) \ COND(IL_FAUT(FHHCexponentielle_____compatibilite_20110829) \ ,NEGA(composante) \ ,NEUT(composante) \ ) /* Permet de "controler" l'exponentielle hyper-hyper-complexe... */ #define FgHHCexponentielle(o,base,o1) \ /* Introduit le 20110829140721... */ \ Bblock \ Test(IL_FAUT(FHHCexponentielle_____compatibilite_20230204)) \ /* Test introduit le 20230204085911... */ \ Bblock \ DEFV(hyper_hyper_complexe,oA); \ DEFV(hyper_hyper_complexe,oB); \ /* Octonions de manoeuvre... */ \ \ FHHCforme_lineaire(oA \ ,LOGX(base) \ ,o1 \ ,FZERO \ ); \ /* Calcul de : */ \ /* */ \ /* o = (o11 + i.o1i + j.o1j + k.o1k + s.o1s + t.o1t + u.o1u + v.o1v).Log(base) */ \ /* A */ \ /* */ \ /* ou {o11,o1i,o1j,o1k,o1s,o1t,o1u,o1v} designent respectivement les huit composantes */ \ /* de 'o1'... */ \ FHHCinitialisation(oB \ ,FHHCexponentielle_RI(FHHCcomposanteR(Rho1_Octonion \ ,HHImaginaire(oA) \ ,HHJmaginaire(oA) \ ,HHKmaginaire(oA) \ ,HHSmaginaire(oA) \ ,HHTmaginaire(oA) \ ,HHUmaginaire(oA) \ ,HHVmaginaire(oA) \ ) \ ) \ ,FHHCexponentielle_RI(FHHCcomposanteI(Rho1_Octonion \ ,HHImaginaire(oA) \ ,HHJmaginaire(oA) \ ,HHKmaginaire(oA) \ ,HHSmaginaire(oA) \ ,HHTmaginaire(oA) \ ,HHUmaginaire(oA) \ ,HHVmaginaire(oA) \ ) \ ) \ ,FHHCexponentielle_JKSTUV(FHHCcomposanteJ(Rho1_Octonion \ ,HHImaginaire(oA) \ ,HHJmaginaire(oA) \ ,HHKmaginaire(oA) \ ,HHSmaginaire(oA) \ ,HHTmaginaire(oA) \ ,HHUmaginaire(oA) \ ,HHVmaginaire(oA) \ ) \ ) \ ,FHHCexponentielle_JKSTUV(FHHCcomposanteK(Rho1_Octonion \ ,HHImaginaire(oA) \ ,HHJmaginaire(oA) \ ,HHKmaginaire(oA) \ ,HHSmaginaire(oA) \ ,HHTmaginaire(oA) \ ,HHUmaginaire(oA) \ ,HHVmaginaire(oA) \ ) \ ) \ ,FHHCexponentielle_JKSTUV(FHHCcomposanteS(Rho1_Octonion \ ,HHImaginaire(oA) \ ,HHJmaginaire(oA) \ ,HHKmaginaire(oA) \ ,HHSmaginaire(oA) \ ,HHTmaginaire(oA) \ ,HHUmaginaire(oA) \ ,HHVmaginaire(oA) \ ) \ ) \ ,FHHCexponentielle_JKSTUV(FHHCcomposanteT(Rho1_Octonion \ ,HHImaginaire(oA) \ ,HHJmaginaire(oA) \ ,HHKmaginaire(oA) \ ,HHSmaginaire(oA) \ ,HHTmaginaire(oA) \ ,HHUmaginaire(oA) \ ,HHVmaginaire(oA) \ ) \ ) \ ,FHHCexponentielle_JKSTUV(FHHCcomposanteU(Rho1_Octonion \ ,HHImaginaire(oA) \ ,HHJmaginaire(oA) \ ,HHKmaginaire(oA) \ ,HHSmaginaire(oA) \ ,HHTmaginaire(oA) \ ,HHUmaginaire(oA) \ ,HHVmaginaire(oA) \ ) \ ) \ ,FHHCexponentielle_JKSTUV(FHHCcomposanteV(Rho1_Octonion \ ,HHImaginaire(oA) \ ,HHJmaginaire(oA) \ ,HHKmaginaire(oA) \ ,HHSmaginaire(oA) \ ,HHTmaginaire(oA) \ ,HHUmaginaire(oA) \ ,HHVmaginaire(oA) \ ) \ ) \ ); \ /* Ce calcul repose sur la methode utilisee dans le plan complexe (voir a ce propos */ \ /* 'v $ximcd/operator$FON 20061205161300')... */ \ FHHCforme_lineaire(o \ ,EXPB(HHReelle(oA)) \ ,oB \ ,FZERO \ ); \ /* Calcul final ('v $ximcd/operator$FON FCexponentielle'). */ \ /* */ \ /* ATTENTION, jusqu'au 20240626111544 il y avait ici par erreur : */ \ /* */ \ /* EXba(base,HHReelle(oA)) */ \ /* */ \ /* ce qui s'est vu lors de la mise au point de l'image 'v $xiirc/ZETA.21$m.IdM'... */ \ Eblock \ ATes \ Bblock \ DEFV(hyper_hyper_complexe,o1_partieReelle); \ DEFV(Float,INIT(exponentielle_de_o1_partieReelle,FLOT__UNDEF)); \ \ DEFV(hyper_hyper_complexe,o1_partieIJKSTUVmaginaire); \ DEFV(Float,INIT(module_de_o1_partieIJKSTUVmaginaire,FLOT__UNDEF)); \ DEFV(Float,INIT(cosinus_de_module_de_o1_partieIJKSTUVmaginaire,FLOT__UNDEF)); \ DEFV(Float,INIT(sinus_cardinal_de_module_de_o1_partieIJKSTUVmaginaire,FLOT__UNDEF)); \ \ DEFV(hyper_hyper_complexe,o1_partiel); \ \ FHHCpartieReelle(o1_partieReelle,o1); \ FHHCpartieIJKSTUVmaginaire(o1_partieIJKSTUVmaginaire,o1); \ \ EGAL(module_de_o1_partieIJKSTUVmaginaire,FHHCmodule(o1_partieIJKSTUVmaginaire)); \ EGAL(exponentielle_de_o1_partieReelle,EXba(base,HHReelle(o1_partieReelle))); \ EGAL(cosinus_de_module_de_o1_partieIJKSTUVmaginaire,COSX(module_de_o1_partieIJKSTUVmaginaire)); \ EGAL(sinus_cardinal_de_module_de_o1_partieIJKSTUVmaginaire,SINC(module_de_o1_partieIJKSTUVmaginaire)); \ \ FHHCinitialisation(o1_partiel \ ,cosinus_de_module_de_o1_partieIJKSTUVmaginaire \ ,MUL2(sinus_cardinal_de_module_de_o1_partieIJKSTUVmaginaire \ ,HHImaginaire(o1_partieIJKSTUVmaginaire) \ ) \ ,MUL2(sinus_cardinal_de_module_de_o1_partieIJKSTUVmaginaire \ ,HHJmaginaire(o1_partieIJKSTUVmaginaire) \ ) \ ,MUL2(sinus_cardinal_de_module_de_o1_partieIJKSTUVmaginaire \ ,HHKmaginaire(o1_partieIJKSTUVmaginaire) \ ) \ ,MUL2(sinus_cardinal_de_module_de_o1_partieIJKSTUVmaginaire \ ,HHSmaginaire(o1_partieIJKSTUVmaginaire) \ ) \ ,MUL2(sinus_cardinal_de_module_de_o1_partieIJKSTUVmaginaire \ ,HHTmaginaire(o1_partieIJKSTUVmaginaire) \ ) \ ,MUL2(sinus_cardinal_de_module_de_o1_partieIJKSTUVmaginaire \ ,HHUmaginaire(o1_partieIJKSTUVmaginaire) \ ) \ ,MUL2(sinus_cardinal_de_module_de_o1_partieIJKSTUVmaginaire \ ,HHVmaginaire(o1_partieIJKSTUVmaginaire) \ ) \ ); \ FHHCforme_lineaire(o \ ,exponentielle_de_o1_partieReelle \ ,o1_partiel \ ,FZERO \ ); \ /* Le 20230204091013, il semblerait que la bonne definition de l'exponentielle d'un nombre */ \ /* hyper-hyper-complexe soit : */ \ /* */ \ /* :Debut_listMN_DEFINITION_EXPONENTIELLE_NOMBRES_HYPER_HYPER_COMPLEXES: */ \ /* */ \ /* o R(o) */ \ /* e = e .[cos(|I(o)|) + sinc(|I(o)|).I(o)] */ \ /* */ \ /* :Fin_listMN_DEFINITION_EXPONENTIELLE_NOMBRES_HYPER_HYPER_COMPLEXES: */ \ /* */ \ /* (voir la demonstration pour 'FgHCexponentielle(...)'). */ \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E X P O N E N T I A T I O N H Y P E R - H Y P E R - C O M P L E X E */ /* A B A S E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HHCexponentielle_octonionique(o,base,o1) \ Bblock \ FHHCexponentielle_octonionique(o,base,o1); \ Eblock #define FHHCexponentielle_octonionique(o,base,o1) \ Bblock \ FgHHCexponentielle_octonionique(o,base,o1); \ Eblock #define FgHHCexponentielle_octonionique(o,base,o1) \ /* Introduit le 20110829140721... */ \ Bblock \ Test(HHCTestIFEQ(base,HHC_____octonion__0__0__0__0__0__0__0__0)) \ Bblock \ FHHCegal(o,HHC_____octonion__0__0__0__0__0__0__0__0); \ /* Valeur arbitraire introduite le 20210218120647... */ \ Eblock \ ATes \ Bblock \ DEFV(hyper_hyper_complexe,logarithme_base); \ DEFV(hyper_hyper_complexe,o_produit); \ /* Octonions de manoeuvre... */ \ \ FHHClogarithme(logarithme_base,base); \ /* Calcul de : */ \ /* */ \ /* log(base) */ \ /* */ \ FHHCproduit(o_produit,o1,logarithme_base); \ /* Calcul de : */ \ /* */ \ /* o1.log(base) */ \ /* */ \ FHHCexponentielle(o,EN,o_produit); \ /* Calcul de : */ \ /* */ \ /* o1.log(base) */ \ /* e */ \ /* */ \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* L O G A R I T H M E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HHClogarithme(o,o1) \ Bblock \ FHHClogarithme(o,o1); \ Eblock #define FHHClogarithme(o,o1) \ Bblock \ FgHHClogarithme(o,o1); \ Eblock #define FgHHClogarithme(o,o1) \ /* Introduit le 20110829140721... */ \ Bblock \ Test(IL_FAUT(FHHClogarithme_____compatibilite_20230204)) \ /* Test introduit le 20230204111216... */ \ Bblock \ DEFV(Float,INIT(module_o1,FHHCmodule(o1))); \ DEFV(Float,INIT(argumentA1_o1,FHHCargumentA1_PI(o1))); \ DEFV(Float,INIT(argumentA2_o1,FHHCargumentA2_PI(o1))); \ DEFV(Float,INIT(argumentA3_o1,FHHCargumentA3_PI(o1))); \ DEFV(Float,INIT(argumentA4_o1,FHHCargumentA4_PI(o1))); \ DEFV(Float,INIT(argumentA5_o1,FHHCargumentA5_PI(o1))); \ DEFV(Float,INIT(argumentA6_o1,FHHCargumentA6_PI(o1))); \ DEFV(Float,INIT(argumentA7_o1,FHHCargumentA7_PI(o1))); \ /* Module et arguments du nombre 'o1'. */ \ \ FHHCinitialisation(o \ ,COND(IZEQ_a_peu_pres(module_o1,GRAND_EPSILON),F_MOINS_LE_PETIT_INFINI,LOGX(module_o1)) \ ,argumentA1_o1 \ ,argumentA2_o1 \ ,argumentA3_o1 \ ,argumentA4_o1 \ ,argumentA5_o1 \ ,argumentA6_o1 \ ,argumentA7_o1 \ ); \ /* Calcul de : */ \ /* */ \ /* o = log(module(o1)) */ \ /* + i.argA1(o1) */ \ /* + j.argA2(o1) */ \ /* + k.argA3(o1) */ \ /* + s.argA4(o1) */ \ /* + t.argA5(o1) */ \ /* + u.argA6(o1) */ \ /* + v.argA7(o1) */ \ /* */ \ /* On notera qu'en toute generalite, c'est la nullite "parfaite" du module qui devrait */ \ /* etre testee, mais en faisant ainsi, on risquerait des debordements ulterieurs, d'ou */ \ /* ce dispositif "a epsilon pres". */ \ Eblock \ ATes \ Bblock \ DEFV(Float,INIT(module_de_o1,FLOT__UNDEF)); \ DEFV(Float,INIT(logarithme_du_module_de_o1,FLOT__UNDEF)); \ \ DEFV(hyper_hyper_complexe,o1_partieReelle); \ DEFV(Float,INIT(module_de_o1_partieReelle,FLOT__UNDEF)); \ \ DEFV(hyper_hyper_complexe,o1_partieIJKSTUVmaginaire); \ DEFV(Float,INIT(module_de_o1_partieIJKSTUVmaginaire,FLOT__UNDEF)); \ \ DEFV(Float,INIT(facteur,FLOT__UNDEF)); \ \ FHHCpartieReelle(o1_partieReelle,o1); \ EGAL(module_de_o1_partieReelle,FHHCmodule(o1_partieReelle)); \ FHHCpartieIJKSTUVmaginaire(o1_partieIJKSTUVmaginaire,o1); \ \ EGAL(module_de_o1,FHHCmodule(o1)); \ EGAL(logarithme_du_module_de_o1 \ ,COND(IZEQ_a_peu_pres(module_de_o1,GRAND_EPSILON),F_MOINS_LE_PETIT_INFINI,LOGX(module_de_o1)) \ ); \ EGAL(module_de_o1_partieIJKSTUVmaginaire,FHHCmodule(o1_partieIJKSTUVmaginaire)); \ EGAL(facteur \ ,DIV0(ACOX(DIVZ(module_de_o1_partieReelle,module_de_o1)) \ ,module_de_o1_partieIJKSTUVmaginaire \ ,FZERO \ ,FZERO \ ) \ ); \ /* Le cas particulier de la division par 0 a ete introduit le 20230321121916 lors de la */ \ /* mise au point de l'image 'v $xiirs/CAYA.W4'... */ \ \ FHHCinitialisation(o \ ,logarithme_du_module_de_o1 \ ,MUL2(facteur,HHImaginaire(o1_partieIJKSTUVmaginaire)) \ ,MUL2(facteur,HHJmaginaire(o1_partieIJKSTUVmaginaire)) \ ,MUL2(facteur,HHKmaginaire(o1_partieIJKSTUVmaginaire)) \ ,MUL2(facteur,HHSmaginaire(o1_partieIJKSTUVmaginaire)) \ ,MUL2(facteur,HHTmaginaire(o1_partieIJKSTUVmaginaire)) \ ,MUL2(facteur,HHUmaginaire(o1_partieIJKSTUVmaginaire)) \ ,MUL2(facteur,HHVmaginaire(o1_partieIJKSTUVmaginaire)) \ ); \ /* Le 20230204112039 il semblerait que la bonne definition du logarithme d'un nombre */ \ /* hyper-hyper-complexe soit : */ \ /* */ \ /* :Debut_listMN_DEFINITION_LOGARITHME_NOMBRES_HYPER_HYPER_COMPLEXES: */ \ /* */ \ /* 1 |R(o)| */ \ /* log(o) = {log(|o|,--------.acos(--------).I(o)} */ \ /* |I(o)| |o| */ \ /* */ \ /* :Fin_listMN_DEFINITION_LOGARITHME_NOMBRES_HYPER_HYPER_COMPLEXES: */ \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* L I G N E S T R I G O N O M E T R I Q U E S H Y P E R - H Y P E R - C O M P L E X E S */ /* C I R C U L A I R E S E T H Y P E R B O L I Q U E S : */ /* */ /*************************************************************************************************************************************/ #define FHHCcosinus_sinus_circulaires_et_hyperboliques__type_1(o,o1,facteur_des_exposants,FHHCplus_ou_moins,diviseur) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ DEFV(hyper_hyper_complexe,plus_o1); \ DEFV(hyper_hyper_complexe,moins_o1); \ DEFV(hyper_hyper_complexe,oF1); \ DEFV(hyper_hyper_complexe,oF2); \ DEFV(hyper_hyper_complexe,oE1); \ DEFV(hyper_hyper_complexe,oE2); \ DEFV(hyper_hyper_complexe,oN); \ /* Nombres complexes de manoeuvre... */ \ \ FHHCegal(plus_o1,o1); \ FHHCnegation(moins_o1,o1); \ \ FHHCproduit(oF1,facteur_des_exposants,plus_o1); \ FHHCproduit(oF2,facteur_des_exposants,moins_o1); \ /* Definition des nombres '+f.o1' et '-f.o1'. */ \ \ FHHCexponentielle(oE1,EN,oF1); \ FHHCexponentielle(oE2,EN,oF2); \ \ FHHCplus_ou_moins(oN,oE1,oE2); \ \ FHHCquotient(o,oN,diviseur); \ /* Calcul de : */ \ /* */ \ /* +f.o1 -f.o1 */ \ /* e & e */ \ /* o = ----------------- */ \ /* d */ \ /* */ \ /* ou '&' et 'd' valent {+,-} et {2,2i} pour le cosinus et le sinus respectivement, et */ \ /* ou 'f' vaut {i,1} pour les lignes circulaires et hyperboliques respectivement. */ \ Eblock #define FHHCcosinus_sinus_circulaires_et_hyperboliques__type_2(o,o1,f11,f12,signe,f21,f22) \ /* Procedure introduite le 20230206110454... */ \ Bblock \ DEFV(hyper_hyper_complexe,o1_partieReelle); \ DEFV(Float,INIT(module_de_o1_partieReelle,FLOT__UNDEF)); \ \ DEFV(hyper_hyper_complexe,o1_partieIJKSTUVmaginaire); \ DEFV(Float,INIT(module_de_o1_partieIJKSTUVmaginaire,FLOT__UNDEF)); \ \ DEFV(Float,INIT(f11_de_module_de_o1_partieReelle,FLOT__UNDEF)); \ DEFV(Float,INIT(f12_de_module_de_o1_partieIJKSTUVmaginaire,FLOT__UNDEF)); \ DEFV(Float,INIT(f21_de_module_de_o1_partieReelle,FLOT__UNDEF)); \ DEFV(Float,INIT(f22_de_module_de_o1_partieIJKSTUVmaginaire,FLOT__UNDEF)); \ \ FHHCpartieReelle(o1_partieReelle,o1); \ FHHCpartieIJKSTUVmaginaire(o1_partieIJKSTUVmaginaire,o1); \ \ EGAL(module_de_o1_partieReelle,FHHCmodule(o1_partieReelle)); \ EGAL(module_de_o1_partieIJKSTUVmaginaire,FHHCmodule(o1_partieIJKSTUVmaginaire)); \ \ EGAL(f11_de_module_de_o1_partieReelle \ ,f11(module_de_o1_partieReelle) \ ); \ EGAL(f21_de_module_de_o1_partieReelle \ ,f21(module_de_o1_partieReelle) \ ); \ \ EGAL(f12_de_module_de_o1_partieIJKSTUVmaginaire \ ,f12(module_de_o1_partieIJKSTUVmaginaire) \ ); \ EGAL(f22_de_module_de_o1_partieIJKSTUVmaginaire \ ,f22(module_de_o1_partieIJKSTUVmaginaire) \ ); \ \ FHHCinitialisation(o \ ,MUL2(f11_de_module_de_o1_partieReelle \ ,f12_de_module_de_o1_partieIJKSTUVmaginaire \ ) \ ,MUL4(FLOT(signe) \ ,f21_de_module_de_o1_partieReelle \ ,f22_de_module_de_o1_partieIJKSTUVmaginaire \ ,HHImaginaire(o1_partieIJKSTUVmaginaire) \ ) \ ,MUL4(FLOT(signe) \ ,f21_de_module_de_o1_partieReelle \ ,f22_de_module_de_o1_partieIJKSTUVmaginaire \ ,HHJmaginaire(o1_partieIJKSTUVmaginaire) \ ) \ ,MUL4(FLOT(signe) \ ,f21_de_module_de_o1_partieReelle \ ,f22_de_module_de_o1_partieIJKSTUVmaginaire \ ,HHKmaginaire(o1_partieIJKSTUVmaginaire) \ ) \ ,MUL4(FLOT(signe) \ ,f21_de_module_de_o1_partieReelle \ ,f22_de_module_de_o1_partieIJKSTUVmaginaire \ ,HHSmaginaire(o1_partieIJKSTUVmaginaire) \ ) \ ,MUL4(FLOT(signe) \ ,f21_de_module_de_o1_partieReelle \ ,f22_de_module_de_o1_partieIJKSTUVmaginaire \ ,HHTmaginaire(o1_partieIJKSTUVmaginaire) \ ) \ ,MUL4(FLOT(signe) \ ,f21_de_module_de_o1_partieReelle \ ,f22_de_module_de_o1_partieIJKSTUVmaginaire \ ,HHUmaginaire(o1_partieIJKSTUVmaginaire) \ ) \ ,MUL4(FLOT(signe) \ ,f21_de_module_de_o1_partieReelle \ ,f22_de_module_de_o1_partieIJKSTUVmaginaire \ ,HHVmaginaire(o1_partieIJKSTUVmaginaire) \ ) \ ); \ Eblock \ /* Le 20230206110454, il semblerait que la bonne definition des lignes trigonometriques */ \ /* circulaires et hyperboliques d'un nombre hyper-hyper-complexe soit : */ \ /* */ \ /* :Debut_listMN_DEFINITION_LIGNES_TRIGONOMETRIQUES_NOMBRES_HYPER_HYPER_COMPLEXES: */ \ /* */ \ /* cos(o) = [cos(R(o)).ch(|I(o)|)] - [sin(R(o)).shc(|I(o)|).I(o)] */ \ /* sin(o) = [sin(R(o)).ch(|I(o)|)] + [cos(R(o)).shc(|I(o)|).I(o)] */ \ /* */ \ /* ch(o) = [ch(R(o)).cos(|I(o)|)] + [sh(R(o)).sinc(|I(o)|).I(o)] */ \ /* sh(o) = [sh(R(o)).cos(|I(o)|)] + [ch(R(o)).sinc(|I(o)|).I(o)] */ \ /* */ \ /* en faisant les hypotheses audacieuses suivantes : */ \ /* */ \ /* o = R(o) + I(o) */ \ /* o = a + b.i + c.j + d.k + e.s + f.t + g.u + h.v */ \ /* */ \ /* I = b.i + c.j + d.k + e.s + f.t + g.u + h.v [I = I(o)] */ \ /* [m = |I|] */ \ /* */ \ /* o = a + I */ \ /* */ \ /* f11 f12 f21 f22 */ \ /* */ \ /* cos(o) = cos(a+I) = [cos(a).cos(I) - sin(a).sin(I)] */ \ /* sin(o) = cos(a+I) = [sin(a).cos(I) + cos(a).sin(I)] */ \ /* */ \ /* ch(o) = ch(a+I) = [ch(a).ch(I) + sh(a).sh(I)] */ \ /* sh(o) = sh(a+I) = [sh(a).ch(I) + ch(a).sh(I)] */ \ /* */ \ /* En effet, par des developpements en series tel celui de 'FgHCexponentielle(...)', on */ \ /* montre facilement que : */ \ /* */ \ /* cos(I) = ch(m) */ \ /* */ \ /* sh(m) */ \ /* sin(I) = -------.I = shc(m).I */ \ /* m */ \ /* */ \ /* */ \ /* ch(I) = cos(m) */ \ /* */ \ /* sin(m) */ \ /* sh(I) = --------.I = sinc(m).I */ \ /* m */ \ /* */ \ /* d'ou : */ \ /* */ \ /* f11 f12 f21 f22 */ \ /* */ \ /* cos(o) = cos(a+I) = [cos(a).ch(m) - sin(a).shc(m).I] */ \ /* sin(o) = cos(a+I) = [sin(a).ch(m) + cos(a).shc(m).I] */ \ /* */ \ /* ch(o) = ch(a+I) = [ch(a).cos(m) + sh(a).sinc(m).I] */ \ /* sh(o) = sh(a+I) = [sh(a).cos(m) + ch(a).sinc(m).I] */ \ /* */ \ /* */ \ /* On verifie aisement que : */ \ /* */ \ /* 2 2 2 2 2 */ \ /* cos (o) + sin (o) = ch (m) + shc (m).I */ \ /* */ \ /* 2 */ \ /* 2 sh (m) 2 2 2 */ \ /* = ch (m) + --------.I [I = -(m )] */ \ /* 2 */ \ /* m */ \ /* */ \ /* 2 2 */ \ /* = ch (m) - sh (m) */ \ /* ['m' etant un Reel...] */ \ /* = 1 */ \ /* */ \ /* de meme : */ \ /* */ \ /* 2 2 */ \ /* ch (o) - sh (o) = 1 */ \ /* */ \ /* :Fin_listMN_DEFINITION_LIGNES_TRIGONOMETRIQUES_NOMBRES_HYPER_HYPER_COMPLEXES: */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* L I G N E S T R I G O N O M E T R I Q U E S H Y P E R - H Y P E R - C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define FHHCcosinus_sinus(o,o1,FHHCplus_ou_moins,diviseur) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ FHHCcosinus_sinus_circulaires_et_hyperboliques__type_1(o \ ,o1 \ ,HHC_____octonion__0_p1__0__0__0__0__0__0 \ ,FHHCplus_ou_moins \ ,diviseur \ ); \ /* Calcul de : */ \ /* */ \ /* +i.o1 -i.o1 */ \ /* e & e */ \ /* o = ----------------- */ \ /* d */ \ /* */ \ /* ou '&' et 'd' valent {+,-} et {2,2.i} pour le cosinus et le sinus respectivement. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O S I N U S H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HHCserie_cosinus(o,o1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FHHCserie_cosinus(o,o1); \ Eblock #define FHHCserie_cosinus(o,o1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FgHHCserie_cosinus(o,o1); \ Eblock #define FgHHCserie_cosinus(o,o1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ GENERATION_SERIE_TRIGONOMETRIQUE(o,o1 \ ,GENERER_UN_COSINUS,TRIGONOMETRIE_CIRCULAIRE__ \ ,hyper_hyper_complexe \ ,FHHCegal \ ,FHHCforme_lineaire \ ,FHHCsomme \ ,aHHCpuissance \ ,FgHHCserie_cosinus_____HHC_____exposant \ ,FHHCproduit \ ,FgHHCserie_cosinus_____HHC_____octonion__0__0__0__0__0__0__0__0 \ ,HHC_____octonion_p1__0__0__0__0__0__0__0 \ ); \ Eblock #define HHCcosinus(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ FHHCcosinus(o,o1); \ Eblock #define FHHCcosinus(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ FgHHCcosinus(o,o1); \ Eblock #define FgHHCcosinus(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ Test(IL_FAUT(FHHCcosinus_____compatibilite_20230206)) \ /* Test introduit le 20230206092813... */ \ Bblock \ FHHCcosinus_sinus(o,o1,FHHCsomme,HHC_____octonion_p2__0__0__0__0__0__0__0); \ /* Calcul de : */ \ /* */ \ /* +i.o1 -i.o1 */ \ /* e + e */ \ /* o = ----------------- */ \ /* 2 */ \ /* */ \ Eblock \ ATes \ Bblock \ Test(IL_FAUT(FHHCcosinus_____compatibilite_20230321)) \ /* Test introduit le 20230321184556... */ \ Bblock \ FHHCcosinus_sinus_circulaires_et_hyperboliques__type_2(o,o1,COSX,COHX,SIGNE_MOINS,SINX,SIHC); \ /* Procedure introduite le 20230206092813... */ \ Eblock \ ATes \ Bblock \ DEFV(hyper_hyper_complexe,exponentielle_o1); \ \ FHHCexponentielle(exponentielle_o1,EN,o1); \ FHHCpartieReelle(o,exponentielle_o1); \ /* Mis sous cette forme le 20230321184556... */ \ Eblock \ ETes \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* S I N U S H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define HHCserie_sinus(o,o1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FHHCserie_sinus(o,o1); \ Eblock #define FHHCserie_sinus(o,o1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FgHHCserie_sinus(o,o1); \ Eblock #define FgHHCserie_sinus(o,o1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ GENERATION_SERIE_TRIGONOMETRIQUE(o,o1 \ ,GENERER_UN_SINUS__,TRIGONOMETRIE_CIRCULAIRE__ \ ,hyper_hyper_complexe \ ,FHHCegal \ ,FHHCforme_lineaire \ ,FHHCsomme \ ,aHHCpuissance \ ,FgHHCserie_sinus_____HHC_____exposant \ ,FHHCproduit \ ,FgHHCserie_sinus_____HHC_____octonion__0__0__0__0__0__0__0__0 \ ,HHC_____octonion_p1__0__0__0__0__0__0__0 \ ); \ Eblock #define HHCsinus(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ FHHCsinus(o,o1); \ Eblock #define FHHCsinus(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ FgHHCsinus(o,o1); \ Eblock #define FgHHCsinus(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ Test(IL_FAUT(FHHCsinus_____compatibilite_20230206)) \ /* Test introduit le 20230206092813... */ \ Bblock \ FHHCcosinus_sinus(o,o1,FHHCdifference,HHC_____octonion__0_p2__0__0__0__0__0__0); \ /* Calcul de : */ \ /* */ \ /* +i.o1 -i.o1 */ \ /* e - e */ \ /* o = ----------------- */ \ /* 2.i */ \ /* */ \ Eblock \ ATes \ Bblock \ Test(IL_FAUT(FHHCsinus_____compatibilite_20230321)) \ /* Test introduit le 20230321184556... */ \ Bblock \ FHHCcosinus_sinus_circulaires_et_hyperboliques__type_2(o,o1,SINX,COHX,SIGNE_PLUS,COSX,SIHC); \ /* Procedure introduite le 20230206092813... */ \ Eblock \ ATes \ Bblock \ DEFV(hyper_hyper_complexe,exponentielle_o1); \ \ FHHCexponentielle(exponentielle_o1,EN,o1); \ FHHCpartieIJKSTUVmaginaire(o,exponentielle_o1); \ /* Mis sous cette forme le 20230321184556... */ \ Eblock \ ETes \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T A N G E N T E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ #define FgHHCtangente_quotient(o,o1,fonction_cosinus,fonction_sinus__) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ DEFV(hyper_hyper_complexe,cosinus_o1); \ DEFV(hyper_hyper_complexe,sinus_o1); \ /* Nombres complexes de manoeuvre... */ \ \ fonction_cosinus(cosinus_o1,o1); \ fonction_sinus__(sinus_o1,o1); \ /* Calcul du sinus et du cosinus de 'o1'. */ \ \ Test(IZNE(FHHCmodule(cosinus_o1))) \ Bblock \ FHHCquotient(o,sinus_o1,cosinus_o1); \ /* Calcul de : */ \ /* */ \ /* */ \ /* sinus(o1) */ \ /* o = ------------- */ \ /* cosinus(o1) */ \ /* */ \ Eblock \ ATes \ Bblock \ FHHCinitialisation(o \ ,MEME_SIGNE_QUE(HHReelle(sinus_o1),F_INFINI) \ ,MEME_SIGNE_QUE(HHImaginaire(sinus_o1),F_INFINI) \ ,MEME_SIGNE_QUE(HHJmaginaire(sinus_o1),F_INFINI) \ ,MEME_SIGNE_QUE(HHKmaginaire(sinus_o1),F_INFINI) \ ,MEME_SIGNE_QUE(HHSmaginaire(sinus_o1),F_INFINI) \ ,MEME_SIGNE_QUE(HHTmaginaire(sinus_o1),F_INFINI) \ ,MEME_SIGNE_QUE(HHUmaginaire(sinus_o1),F_INFINI) \ ,MEME_SIGNE_QUE(HHVmaginaire(sinus_o1),F_INFINI) \ ); \ /* Lorsque le module du cosinus est nul, la valeur de la tangente est fixee de facon tout */ \ /* a fait arbitraire... */ \ Eblock \ ETes \ Eblock #define HHCserie_tangente(o,o1) \ /* Procedure introduite le 20210209103456... */ \ Bblock \ FHHCserie_tangente(o,o1); \ Eblock #define FHHCserie_tangente(o,o1) \ /* Procedure introduite le 20210209103456... */ \ Bblock \ FgHHCserie_tangente(o,o1); \ Eblock #define FgHHCserie_tangente(o,o1) \ /* Procedure introduite le 20210209103456... */ \ Bblock \ FgHHCtangente_quotient(o,o1,FHHCserie_cosinus,FHHCserie_sinus); \ Eblock #define HHCtangente(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ FHHCtangente(o,o1); \ Eblock #define FHHCtangente(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ FgHHCtangente(o,o1); \ Eblock #define FgHHCtangente(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ FgHHCtangente_quotient(o,o1,FHHCcosinus,FHHCsinus); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* L I G N E S H Y P E R B O L I Q U E S H Y P E R - H Y P E R - C O M P L E X E S : */ /* */ /*************************************************************************************************************************************/ #define FHHCcosinus_sinus_hyperbolique(o,o1,FHHCplus_ou_moins) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ FHHCcosinus_sinus_circulaires_et_hyperboliques__type_1(o \ ,o1 \ ,HHC_____octonion_p1__0__0__0__0__0__0__0 \ ,FHHCplus_ou_moins \ ,HHC_____octonion_p2__0__0__0__0__0__0__0 \ ); \ /* Calcul de : */ \ /* */ \ /* +o1 -o1 */ \ /* e & e */ \ /* o = ------------- */ \ /* 2 */ \ /* */ \ /* ou '&' vaut {+,-} pour le cosinus et le sinus respectivement. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O S I N U S 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 : */ /* */ /*************************************************************************************************************************************/ #define HHCserie_cosinus_hyperbolique(o,o1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FHHCserie_cosinus_hyperbolique(o,o1); \ Eblock #define FHHCserie_cosinus_hyperbolique(o,o1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FgHHCserie_cosinus_hyperbolique(o,o1); \ Eblock #define FgHHCserie_cosinus_hyperbolique(o,o1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ GENERATION_SERIE_TRIGONOMETRIQUE(o,o1 \ ,GENERER_UN_COSINUS,TRIGONOMETRIE_HYPERBOLIQUE \ ,hyper_hyper_complexe \ ,FHHCegal \ ,FHHCforme_lineaire \ ,FHHCsomme \ ,aHHCpuissance \ ,FgHHCserie_cosinus_hyperbolique_____HHC_____exposant \ ,FHHCproduit \ ,FgHHCserie_cosinus_hyperbolique_____HHC_____octonion__0__0__0__0__0__0__0__0 \ ,HHC_____octonion_p1__0__0__0__0__0__0__0 \ ); \ Eblock #define HHCcosinus_hyperbolique(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ FHHCcosinus_hyperbolique(o,o1); \ Eblock #define FHHCcosinus_hyperbolique(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ FgHHCcosinus_hyperbolique(o,o1); \ Eblock #define FgHHCcosinus_hyperbolique(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ Test(IL_FAUT(FHHCcosinus_hyperbolique_____compatibilite_20230206)) \ /* Test introduit le 20230206092813... */ \ Bblock \ FHHCcosinus_sinus_hyperbolique(o,o1,FHHCsomme); \ /* Calcul de : */ \ /* */ \ /* +o1 -o1 */ \ /* e + e */ \ /* o = ------------- */ \ /* 2 */ \ /* */ \ Eblock \ ATes \ Bblock \ FHHCcosinus_sinus_circulaires_et_hyperboliques__type_2(o,o1,COHX,COSX,SIGNE_PLUS,SIHX,SINC); \ /* Procedure introduite le 20230206092813... */ \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* S I N U S 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 : */ /* */ /*************************************************************************************************************************************/ #define HHCserie_sinus_hyperbolique(o,o1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FHHCserie_sinus_hyperbolique(o,o1); \ Eblock #define FHHCserie_sinus_hyperbolique(o,o1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ FgHHCserie_sinus_hyperbolique(o,o1); \ Eblock #define FgHHCserie_sinus_hyperbolique(o,o1) \ /* Procedure introduite le 20210208165922... */ \ Bblock \ GENERATION_SERIE_TRIGONOMETRIQUE(o,o1 \ ,GENERER_UN_SINUS__,TRIGONOMETRIE_HYPERBOLIQUE \ ,hyper_hyper_complexe \ ,FHHCegal \ ,FHHCforme_lineaire \ ,FHHCsomme \ ,aHHCpuissance \ ,FgHHCserie_sinus_hyperbolique_____HHC_____exposant \ ,FHHCproduit \ ,FgHHCserie_sinus_hyperbolique_____HHC_____octonion__0__0__0__0__0__0__0__0 \ ,HHC_____octonion_p1__0__0__0__0__0__0__0 \ ); \ Eblock #define HHCsinus_hyperbolique(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ FHHCsinus_hyperbolique(o,o1); \ Eblock #define FHHCsinus_hyperbolique(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ FgHHCsinus_hyperbolique(o,o1); \ Eblock #define FgHHCsinus_hyperbolique(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ Test(IL_FAUT(FHHCsinus_hyperbolique_____compatibilite_20230206)) \ /* Test introduit le 20230206092813... */ \ Bblock \ FHHCcosinus_sinus_hyperbolique(o,o1,FHHCdifference); \ /* Calcul de : */ \ /* */ \ /* +o1 -o1 */ \ /* e - e */ \ /* o = ------------- */ \ /* 2 */ \ /* */ \ Eblock \ ATes \ Bblock \ FHHCcosinus_sinus_circulaires_et_hyperboliques__type_2(o,o1,SIHX,COSX,SIGNE_PLUS,COHX,SINC); \ /* Procedure introduite le 20230206092813... */ \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T A N G E N T E 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 : */ /* */ /*************************************************************************************************************************************/ #define FgHHCtangente_hyperbolique_quotient(o,o1,fonction_cosinus_hyperbolique,fonction_sinus___hyperbolique) \ Bblock \ DEFV(hyper_hyper_complexe,cosinus_hyperbolique_o1); \ DEFV(hyper_hyper_complexe,sinus_hyperbolique_o1); \ /* Nombres complexes de manoeuvre... */ \ \ fonction_cosinus_hyperbolique(cosinus_hyperbolique_o1,o1); \ fonction_sinus___hyperbolique(sinus_hyperbolique_o1,o1); \ /* Calcul du sinus et du cosinus de 'o1'. */ \ \ Test(IZNE(FHHCmodule(cosinus_hyperbolique_o1))) \ Bblock \ FHHCquotient(o,sinus_hyperbolique_o1,cosinus_hyperbolique_o1); \ /* Calcul de : */ \ /* */ \ /* */ \ /* sinus_hyperbolique(o1) */ \ /* o = -------------------------- */ \ /* cosinus_hyperbolique(o1) */ \ /* */ \ Eblock \ ATes \ Bblock \ FHHCinitialisation(o \ ,MEME_SIGNE_QUE(HHReelle(sinus_hyperbolique_o1),F_INFINI) \ ,MEME_SIGNE_QUE(HHImaginaire(sinus_hyperbolique_o1),F_INFINI) \ ,MEME_SIGNE_QUE(HHJmaginaire(sinus_hyperbolique_o1),F_INFINI) \ ,MEME_SIGNE_QUE(HHKmaginaire(sinus_hyperbolique_o1),F_INFINI) \ ,MEME_SIGNE_QUE(HHSmaginaire(sinus_hyperbolique_o1),F_INFINI) \ ,MEME_SIGNE_QUE(HHTmaginaire(sinus_hyperbolique_o1),F_INFINI) \ ,MEME_SIGNE_QUE(HHUmaginaire(sinus_hyperbolique_o1),F_INFINI) \ ,MEME_SIGNE_QUE(HHVmaginaire(sinus_hyperbolique_o1),F_INFINI) \ ); \ /* Lorsque le module du cosinus est nul, la valeur de la tangente est fixee de facon tout */ \ /* a fait arbitraire... */ \ Eblock \ ETes \ Eblock #define HHCserie_tangente_hyperbolique(o,o1) \ Bblock \ FHHCserie_tangente_hyperbolique(o,o1); \ Eblock #define FHHCserie_tangente_hyperbolique(o,o1) \ Bblock \ FgHHCserie_tangente_hyperbolique(o,o1); \ Eblock #define FgHHCserie_tangente_hyperbolique(o,o1) \ Bblock \ FgHHCtangente_hyperbolique_quotient(o,o1,FHHCserie_cosinus_hyperbolique,FHHCserie_sinus_hyperbolique); \ Eblock #define HHCtangente_hyperbolique(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ FHHCtangente_hyperbolique(o,o1); \ Eblock #define FHHCtangente_hyperbolique(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ FgHHCtangente_hyperbolique(o,o1); \ Eblock #define FgHHCtangente_hyperbolique(o,o1) \ /* Procedure introduite le 20210205180151... */ \ Bblock \ FgHHCtangente_hyperbolique_quotient(o,o1,FHHCcosinus_hyperbolique,FHHCsinus_hyperbolique); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A C C E L E R A T I O N E V E N T U E L L E D E S C O M P I L A T I O N S */ /* D E S I T E R A T I O N S D A N S L ' E S P A C E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ /* Le dispositif suivant a ete mis en place ici le 20111204113520 afin de pouvoir etre */ /* utilise a la fois dans 'v $ximcf/conformes$FOn' et 'v $ximcf/iterations$FON', alors */ /* qu'avant cette date il etait situe dans 'v $ximcf/iterations$FON' en en limitant ainsi */ /* la portee... */ #ifdef NE_PAS_ACCELERER_LA_COMPILATION_DES_NOMBRES_HYPER_HYPER_COMPLEXES # define aHHCconjugaison(o,o1) \ Bblock \ HHCconjugaison(o,o1); \ Eblock # define aHHCmodulo(o,o1,Rorg,Rext,Iorg,Iext,Jorg,Jext,Korg,Kext,Sorg,Sext,Torg,Text,Uorg,Uext,Vorg,Vext) \ Bblock \ HHCmodulo(o,o1,Rorg,Rext,Iorg,Iext,Jorg,Jext,Korg,Kext,Sorg,Sext,Torg,Text,Uorg,Uext,Vorg,Vext); \ Eblock # define aHHCproduit(o,o1,o2) \ Bblock \ HHCproduit(o,o1,o2); \ Eblock # define aHHCpuissance(o,o1,exposant) \ Bblock \ HHCpuissance(o,o1,exposant); \ Eblock # define aHHCquotient(o,o1,o2) \ Bblock \ HHCquotient(o,o1,o2); \ Eblock # define aHHCsomme(o,o1,o2) \ Bblock \ HHCsomme(o,o1,o2); \ Eblock # define aHHCdifference(o,o1,o2) \ Bblock \ HHCdifference(o,o1,o2); \ Eblock # define aHHCforme_lineaire(o,alpha,o1,beta) \ Bblock \ HHCforme_lineaire(o,alpha,o1,beta); \ Eblock # define aHHCcombinaison_lineaire_2(o,a,o1,b,o2) \ Bblock \ HHCcombinaison_lineaire_2(o,a,o1,b,o2); \ Eblock # define aHHCcombinaison_lineaire_3(o,a,o1,b,o2,c,o3) \ Bblock \ HHCcombinaison_lineaire_3(o,a,o1,b,o2,c,o3); \ Eblock # define aHHCcombinaison_lineaire_4(o,a,o1,b,o2,c,o3,d,o4) \ Bblock \ HHCcombinaison_lineaire_4(o,a,o1,b,o2,c,o3,d,o4); \ Eblock # define aHHCcombinaison_lineaire_5(o,a,o1,b,o2,c,o3,d,o4,e,o5) \ Bblock \ HHCcombinaison_lineaire_5(o,a,o1,b,o2,c,o3,d,o4,e,o5); \ Eblock # define aHHCcombinaison_lineaire_6(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6) \ Bblock \ HHCcombinaison_lineaire_6(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6); \ Eblock # define aHHCcombinaison_lineaire_7(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7) \ Bblock \ HHCcombinaison_lineaire_7(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7); \ Eblock # define aHHCcombinaison_lineaire_8(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7,h,o8) \ Bblock \ HHCcombinaison_lineaire_8(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7,h,o8); \ Eblock # define aHHCcombinaison_lineaire_9(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7,h,o8,i,o9) \ Bblock \ HHCcombinaison_lineaire_9(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7,h,o8,i,o9); \ Eblock # define aHHCexponentielle_octonionique(o,base,o1) \ Bblock \ HHCexponentielle_octonionique(o,base,o1); \ Eblock # nodefine aHHClogarithme(o,o1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ HHClogarithme(o,o1); \ Eblock # nodefine aHHCcosinus(o,o1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ HHCcosinus(o,o1); \ Eblock # nodefine aHHCsinus(o,o1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ HHCsinus(o,o1); \ Eblock # nodefine aHHCtangente(o,o1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ HHCtangente(o,o1); \ Eblock # nodefine aHHCcosinus_hyperbolique(o,o1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ HHCcosinus_hyperbolique(o,o1); \ Eblock # nodefine aHHCsinus_hyperbolique(o,o1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ HHCsinus_hyperbolique(o,o1); \ Eblock # nodefine aHHCtangente_hyperbolique(o,o1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ HHCtangente_hyperbolique(o,o1); \ Eblock #Aifdef NE_PAS_ACCELERER_LA_COMPILATION_DES_NOMBRES_HYPER_HYPER_COMPLEXES /* Possibilite introduite le 20111201134708... */ # define aHHCconjugaison(o,o1) \ Bblock \ EGAL(o,fFHHCconjugaison(o1)); \ Eblock # define aHHCmodulo(o,o1,Rorg,Rext,Iorg,Iext,Jorg,Jext,Korg,Kext,Sorg,Sext,Torg,Text,Uorg,Uext,Vorg,Vext) \ Bblock \ EGAL(o,fFHHCmodulo(o1,Rorg,Rext,Iorg,Iext,Jorg,Jext,Korg,Kext,Sorg,Sext,Torg,Text,Uorg,Uext,Vorg,Vext)); \ Eblock # define aHHCproduit(o,o1,o2) \ Bblock \ EGAL(o,fFHHCproduit(o1,o2)); \ Eblock # define aHHCpuissance(o,o1,exposant) \ Bblock \ EGAL(o,fFHHCpuissance(o1,exposant)); \ Eblock # define aHHCquotient(o,o1,o2) \ Bblock \ EGAL(o,fFHHCquotient(o1,o2)); \ Eblock # define aHHCsomme(o,o1,o2) \ Bblock \ EGAL(o,fFHHCsomme(o1,o2)); \ Eblock # define aHHCdifference(o,o1,o2) \ Bblock \ EGAL(o,fFHHCdifference(o1,o2)); \ Eblock # define aHHCforme_lineaire(o,alpha,o1,beta) \ Bblock \ EGAL(o,fFHHCforme_lineaire(alpha,o1,beta)); \ Eblock # define aHHCcombinaison_lineaire_2(o,a,o1,b,o2) \ Bblock \ EGAL(o,fFHHCcombinaison_lineaire_2(a,o1,b,o2)); \ Eblock # define aHHCcombinaison_lineaire_3(o,a,o1,b,o2,c,o3) \ Bblock \ EGAL(o,fFHHCcombinaison_lineaire_3(a,o1,b,o2,c,o3)); \ Eblock # define aHHCcombinaison_lineaire_4(o,a,o1,b,o2,c,o3,d,o4) \ Bblock \ EGAL(o,fFHHCcombinaison_lineaire_4(a,o1,b,o2,c,o3,d,o4)); \ Eblock # define aHHCcombinaison_lineaire_5(o,a,o1,b,o2,c,o3,d,o4,e,o5) \ Bblock \ EGAL(o,fFHHCcombinaison_lineaire_5(o,a,o1,b,o2,c,o3,d,o4,e,o5)); \ Eblock # define aHHCcombinaison_lineaire_6(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6) \ Bblock \ EGAL(o,fFHHCcombinaison_lineaire_6(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6)); \ Eblock # define aHHCcombinaison_lineaire_7(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7) \ Bblock \ EGAL(o,fFHHCcombinaison_lineaire_7(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7)); \ Eblock # define aHHCcombinaison_lineaire_8(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7,h,o8) \ Bblock \ EGAL(o,fFHHCcombinaison_lineaire_8(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7,h,o8)); \ Eblock # define aHHCcombinaison_lineaire_9(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7,h,o8,i,o9) \ Bblock \ EGAL(o,fFHHCcombinaison_lineaire_9(o,a,o1,b,o2,c,o3,d,o4,e,o5,f,o6,g,o7,h,o8,i,o9)); \ Eblock # define aHHCexponentielle_octonionique(o,base,o1) \ Bblock \ EGAL(o,fFHHCexponentielle_octonionique(base,o1)); \ Eblock # nodefine aHHClogarithme(o,o1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(o,faFHHClogarithme(o1)); \ /* On notera le 'faFHHC...' a cause de 'v $ximcf/fonction$FON fFHHClogarithme'... */ \ Eblock # nodefine aHHCcosinus(o,o1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(o,fFHHCcosinus(o1)); \ Eblock # nodefine aHHCsinus(o,o1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(o,fFHHCsinus(o1)); \ Eblock # nodefine aHHCtangente(o,o1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(o,fFHHCtangente(o1)); \ Eblock # nodefine aHHCcosinus_hyperbolique(o,o1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(o,faFHHCcosinus_hyperbolique(o1)); \ /* On notera le 'faFHHC...' a cause de 'v $ximcf/fonction$FON fFHHCcosinus_hyperbolique'... */ \ Eblock # nodefine aHHCsinus_hyperbolique(o,o1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(o,faFHHCsinus_hyperbolique(o1)); \ /* On notera le 'faFHHC...' a cause de 'v $ximcf/fonction$FON fFHHCsinus_hyperbolique'... */ \ Eblock # nodefine aHHCtangente_hyperbolique(o,o1) \ /* Afin d'alleger la compilation de 'v $xbmcf/operator$K' (introduit le 20230323122843)... */ \ Bblock \ EGAL(o,faFHHCtangente_hyperbolique(o1)); \ /* On notera le 'faFHHC...' a cause de 'v $ximcf/fonction$FON fFHHCtangente_hyperbolique'... */ \ Eblock #Eifdef NE_PAS_ACCELERER_LA_COMPILATION_DES_NOMBRES_HYPER_HYPER_COMPLEXES