/*************************************************************************************************************************************/
/* */
/* 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