/*************************************************************************************************************************************/
/* */
/* F O R M A T D E S N O M B R E S C O M P L E X E S , */
/* D E S Q U A T E R N I O N S E T D E S O C T O N I O N S : */
/* */
/* */
/* Author of '$ximc/definit$DEF' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 19870000000000). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L A V E R S I O N : */
/* */
/*************************************************************************************************************************************/
#nodefine DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01 \
/* Cette version definit les nombres complexes, hyper-complexes et hyper-hyper-complexes en */ \
/* tant que vecteurs de nombres Reels a 2, 4 et 8 dimensions. */
#define DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02 \
/* Cette version definit les nombres d'un corps (par exemple celui des Quaternions) en tant */ \
/* vecteurs a 2 dimensions composes de deux nombres appartenant au sous-corps grace auquel */ \
/* le corps est defini (par exemple celui des Complexes)... */
/*===================================================================================================================================*/
/* :Debut_listMN_DEFINITION_NOMBRES_COMPLEXES_11: */
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S N O M B R E S C O M P L E X E S : */
/* */
/* */
/* Definition : */
/* */
/* Soit 'R' le corps des nombres Reels, le */
/* corps 'C' des nombres Complexes peut alors */
/* se definir par : */
/* */
/* C = (R.1) + (R.i) */
/* */
/* la conjugaison '-' pouvant se definir par : */
/* */
/* - - */
/* C = (R.1) - (R.i) */
/* */
/* avec : */
/* */
/* 2 */
/* i = -1 */
/* */
/* */
/* Notation : */
/* */
/* Un nombre complexe 'z' est compose */
/* d'une partie reelle 'a' et d'une partie */
/* imaginaire 'b' ; on le notera : */
/* */
/* z = (a,b) */
/* */
/* ou : */
/* */
/* z = (a.1) + (b.i) */
/* */
/* ou : */
/* */
/* z = a + b.i */
/* */
/* avec : */
/* */
/* 2 */
/* i = -1 */
/* */
/* */
/* on a donc la table de multiplication (v1.v2) : */
/* */
/* */
/* + | | | */
/* | | | */
/* + v1 | +1 | +i | */
/* | | | */
/* + | | | */
/* v2 | | | */
/* +| | | */
/* -------------+---------| */
/* +1 | +1 | +i | */
/* -------------|----+----| */
/* +i | +i | -1 | */
/* ----------------------- */
/* */
/* */
/* (ce resultat a ete obtenu grace au programme trivial 'v $xtKg/complexes$K') */
/* */
/* */
/* Remarque : */
/* */
/* Le corps des nombres Complexes 'z' */
/* defini par : */
/* */
/* z = a + b.i */
/* */
/* est isomorphe a l'ensemble des matrices */
/* du type : */
/* */
/* | +a +b | */
/* | -b +a | */
/* */
/* ou 'a' et 'b' sont deux nombres Reels. */
/* */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_DEFINITION_NOMBRES_COMPLEXES_11: */
TypedefS(PRECISION_DES_NOMBRES_COMPLEXES,Float PGPD)
/* Precision ('Float' ou 'Double') des nombres complexes. */
Dstruct02(nombre_complexe
,DEFV(PRECISION_DES_NOMBRES_COMPLEXES,reelle)
,DEFV(PRECISION_DES_NOMBRES_COMPLEXES,imaginaire)
,NOM_VIDE
);
Dstruct04(nombre_complexe_etendu
,DEFV(PRECISION_DES_NOMBRES_COMPLEXES,reelle)
,DEFV(PRECISION_DES_NOMBRES_COMPLEXES,imaginaire)
,DEFV(PRECISION_DES_NOMBRES_COMPLEXES,rho)
,DEFV(PRECISION_DES_NOMBRES_COMPLEXES,theta)
,NOM_VIDE
);
/* Definition du type "nombre complexe". */
/* */
/* Le 20061211113711 furent introduits {rho,theta} inutiles a cette date, mais */
/* on ne sait jamais : mieux vaut prevenir que guerir... */
/* */
/* Aux environs du 20061223122047, cela a cree une sacree "crise" de : */
/* */
/* Segmentation fault */
/* */
/* et autres phenomenes bizarres sur '$LACT15'. La solution fut evidemment de tout */
/* recompiler... */
/* */
/* En fait, le 20061223125559 je decide que cette extension etant d'une part inutile a */
/* cette date et d'autre part doublant la memoire necessaire, je la supprime, tout en */
/* conservant sa definition sous le nom 'nombre_complexe_etendu'... */
#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
#Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02
#Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02
#define _nombre_complexe \
STRU(nombre_complexe) \
/* Definition d'un type intermediaire pour faciliter la parametrisation de la taille... */
Typedef(complexe,_nombre_complexe)
TypedefS(A___complexe,complexe)
TypedefS(E___complexe,complexe)
#define size_complexe \
SIZP(_nombre_complexe) \
/* Taille des nombres complexes... */
#define _nombre_complexe_etendu \
STRU(nombre_complexe_etendu) \
/* Definition d'un type intermediaire pour faciliter la parametrisation de la taille */ \
/* (introduit le 20091119085332). */
Typedef(complexe_etendu,_nombre_complexe_etendu)
TypedefS(A___complexe_etendu,complexe_etendu)
TypedefS(E___complexe_etendu,complexe_etendu)
#define size_complexe_etendu \
SIZP(_nombre_complexe_etendu) \
/* Taille des nombres complexes etendus (introduit le 20091119085332). */
#define Carre_de_i__Complexe \
NEGA(FU) \
/* Carre de 'i' (introduit le 20200321152406). */
#define Rho1_Complexe \
FU \
/* Module unite des nombres complexes (introduit le 20061209102141). */
#define R0_Complexe \
FZERO
#define R1_Complexe \
FU
/* Definition d'une partie Reelle valant 0 ou 1. */
#define I0_Complexe \
FZERO
#define I1_Complexe \
FU
/* Definition d'une partie Imaginaire valant 0 ou 1. */
#define Reelle(z) \
ASD1(PARE(z),reelle) \
/* Acces a la partie reelle du nombre complexe 'z', */
#define Imaginaire(z) \
ASD1(PARE(z),imaginaire) \
/* Acces a la partie imaginaire du nombre complexe 'z'. */
#define CP_Rho(z_etendu) \
ASD1(PARE(z_etendu),rho) \
/* Acces a la partie 'rho' du nombre complexe 'z' (introduite le 20061211113711). */ \
/* */ \
/* On notera le nom 'CP_Rho' (pour "Coordonnees Polaires") et non pas 'Rho' afin de ne */ \
/* pas perturber les autres utilisations possibles de 'Rho'... */ \
/* */ \
/* ATTENTION : cela ne concerne que les 'complexe_etendu's... */
#define CP_Theta(z_etendu) \
ASD1(PARE(z_etendu),theta) \
/* Acces a la partie 'theta' du nombre complexe 'z' (introduite le 20061211113711). */ \
/* */ \
/* On notera le nom 'CP_Theta' (pour "Coordonnees Polaires") et non pas 'Theta' afin de ne */ \
/* pas perturber les autres utilisations possibles de 'Theta'... */ \
/* */ \
/* ATTENTION : cela ne concerne que les 'complexe_etendu'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 dReelle(z) \
Reelle(z) \
/* Acces a la partie reelle du nombre complexe 'z', */
# define dImaginaire(z) \
Imaginaire(z) \
/* Acces a la partie imaginaire du nombre complexe 'z'. */
#Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02
#Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02
#define ConjugaisonReelle(composante) \
NEUT(composante)
#define ConjugaisonImaginaire_s(composante) \
NEGA(composante)
/* Operateurs de conjugaison des parties Reelle et Imaginaire(s) (le 's' de 'Imaginaire' */
/* etant lie aux nombres Hyper-Complexes et aux nombres Hyper-Hyper-Complexes). Ceci fut */
/* introduit le 20030430165703. */
#define CReelle(z) \
ConjugaisonReelle(Reelle(z)) \
/* Acces a la partie reelle du conjugue du nombre complexe 'z', */
#define CImaginaire(z) \
ConjugaisonImaginaire_s(Imaginaire(z)) \
/* Acces a la partie imaginaire du conjugue du nombre complexe 'z'. */
/*===================================================================================================================================*/
/* :Debut_listMN_DEFINITION_NOMBRES_HYPER_COMPLEXES_11: */
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S N O M B R E S H Y P E R - C O M P L E X E S */
/* ( O U " Q U A T E R N I O N S " ) : */
/* */
/* */
/* Definition : */
/* */
/* Soit 'C' le corps des nombres Complexes, le corps */
/* 'Q' des nombres Hyper-Complexes (ou "quaternions" de */
/* Hamilton) peut alors se definir par : */
/* */
/* Q = (C.1) + (C.j) */
/* */
/* la conjugaison '-' pouvant se definir par : */
/* */
/* - - */
/* Q = (C.1) - (C.j) */
/* */
/* avec : */
/* */
/* 2 */
/* j = -1 */
/* */
/* i.j = -j.i ('i' definissant 'C', et 'j' definissant 'Q') */
/* */
/* d'ou l'on tire ('1' etant l'element neutre de la multiplication dans 'R' et 'C') : */
/* */
/* Q = (C.1) + (C.j) */
/* Q = (((R.1) + (R.i)).1) + (((R.1) + (R.i)).j) */
/* Q = ((R.1).1) + ((R.i).1) + ((R.1).j) + ((R.i).j) */
/* */
/* | | | | */
/* | | | | */
/* ------- | | | */
/* | | | | */
/* | | | | */
/* 1 = (1).1 <-- | | | */
/* i = (i).1 <------ | | */
/* | | */
/* j = (1).j <------------------ | */
/* k = (i).j <------------------------------ */
/* */
/* d'ou : */
/* */
/* 1 = 1.1 */
/* i = i.1 */
/* */
/* j = 1.j */
/* k = i.j */
/* */
/* | | */
/* | | */
/* | --------> (1,j) definit 'Q' */
/* ----------> (1,i) est la base de 'C' */
/* */
/* */
/* Notation : */
/* */
/* Un nombre hyper-complexe 'q' (ou "quaternion") */
/* est compose d'une partie reelle 'a' et de trois */
/* parties imaginaires 'b', 'c' et 'd' ; on le notera : */
/* */
/* q = (a,b,c,d) */
/* */
/* ou : */
/* */
/* q = (a.1) + (b.i) + (c.j) + (d.k) */
/* */
/* ou : */
/* */
/* q = a + b.i + c.j + d.k */
/* */
/* avec : */
/* */
/* 2 2 2 */
/* i = j = k = -1 */
/* */
/* i.j = k = -j.i */
/* j.k = i = -k.j */
/* k.i = j = -i.k */
/* */
/* */
/* on a donc la table de multiplication (v1.v2) : */
/* */
/* */
/* + | | | | | */
/* | | | | | */
/* + v1 | +1 | +i | +j | +k | */
/* | | | | | */
/* + | | | | | */
/* v2 | | | | | */
/* +| | | | | */
/* -------------+-------------------| */
/* +1 | +1 +i | +j +k | */
/* -------------| * | * | */
/* +i | +i -1 | -k +j | */
/* -------------|----+----+----+----| */
/* +j | +j +k | -1 -i | */
/* -------------| * | * | */
/* +k | +k -j | +i -1 | */
/* --------------------------------- */
/* */
/* */
/* (ce resultat a ete obtenu grace au programme 'v $xtKg/quaternions$K') */
/* */
/* */
/* Le produit de deux quaternions 'q1' et 'q2' se definit par : */
/* */
/* q1 = z11.1 + z12.j */
/* q2 = z21.1 + z22.j */
/* */
/* (ou 'z11', 'z12', 'z21' et 'z22' sont quatre nombres complexes) */
/* */
/* q1.q2 = (z11.1 + z12.j).(z21.1 + z22.j) */
/* */
/* --- --- */
/* q1.q2 = (z11.z21 - z22.z12).1 + (z22.z11 + z12.z21).j */
/* */
/* La multiplication n'est pas commutative... */
/* */
/* */
/* Une autre definition peut etre donnee, en rappelant le */
/* produit de deux nombres complexes 'z1' et 'z2' : */
/* */
/* z1 = (a,b) */
/* z2 = (c,d) */
/* */
/* (ou 'a', 'b', 'c' et 'd' sont quatre nombres reels) */
/* */
/* on a : */
/* */
/* z1.z2 = (a,b)(c,d) = (ac - bd , ad + bc) */
/* */
/* ecrivons alors les deux quaternions 'q1' et 'q2' sous la forme : */
/* */
/* --> */
/* q1 = (a, B ) */
/* */
/* --> */
/* q2 = (c, D ) */
/* */
/* --> --> */
/* (ou 'a' et 'c' sont deux nombres reels, alors que ' B ' et ' D ' sont deux 3-vecteurs) */
/* */
/* Le produit de 'q1' et 'q2' sera defini par : */
/* */
/* --> --> --> --> --> --> --> --> */
/* q1.q2 = (a, B )(c, D ) = (ac - B . D , a D + B c + B /\ D ) */
/* */
/* --> --> */
/* ou est donc ajoute le produit vectoriel ' B /\ D '. */
/* */
/* ---> */
/* Une application de cela ; soit donc ' \/ ' l'operateur */
/* 'del' defini par : */
/* */
/* ---> d d d */
/* \/ = ---- + ---- + ---- */
/* dx dy dz */
/* */
/* on a alors : */
/* */
/* --> */
/* d ---> --> dc ---> --> d D ---> ---> --> */
/* (----, \/ )(c, D ) = (---- - \/ . D , ------ + \/ c + \/ /\ D ) */
/* dt dt dt */
/* */
/* --->--> --> ---> ---> --> --> */
/* ou ' \/ D ' est la divergence de ' D ', ' \/ c' le gradient de 'c' et ' \/ /\ D ' le rotationnel de ' D '). */
/* */
/* */
/* Remarque : */
/* */
/* Le corps des quaternions 'q' */
/* defini par : */
/* */
/* q = a.1 + b.i + c.j + d.k */
/* */
/* est isomorphe a l'ensemble des matrices */
/* du type : */
/* */
/* | +z +z | */
/* | 1 2 | */
/* | _ _ | */
/* | -z +z | */
/* | 2 1 | */
/* */
/* ou 'z1' et 'z2' sont les deux nombres Complexes : */
/* */
/* z = a.1 + b.i */
/* 1 */
/* */
/* z = c.1 + d.i */
/* 2 */
/* */
/* en notant que : */
/* */
/* q = z .1 + z .j */
/* 1 2 */
/* */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_DEFINITION_NOMBRES_HYPER_COMPLEXES_11: */
/*===================================================================================================================================*/
/* :Debut_listMN_DEFINITION_NOMBRES_PSEUDO_HYPER_COMPLEXES_11: */
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S N O M B R E S P S E U D O - H Y P E R - C O M P L E X E S */
/* ( O U " P S E U D O - Q U A T E R N I O N S " ) : */
/* */
/* */
/* Definition : */
/* */
/* Les nombres complexes peuvent etre representes */
/* de deux facons differentes comme couple de nombres */
/* reels : {x,y} en coordonnees cartesiennes et {rho,theta} */
/* en coordonnees polaires. */
/* */
/* L'addition de deux nombres complexes 'z1' et 'Z2' */
/* est facile a exprimer en coordonnees cartesiennes : */
/* */
/* z = z + z = (x ,y ) + (x ,y ) */
/* 1 2 1 1 2 2 */
/* */
/* = (x + x ,y + y ) */
/* 1 2 1 2 */
/* */
/* alors que la multiplication est plus facile a exprimer */
/* en coordonnees polaires : */
/* */
/* z = z . z = (rho ,theta ) . (rho ,theta ) */
/* 1 2 1 1 2 2 */
/* */
/* = (rho . rho ,theta + theta ) */
/* 1 2 1 2 */
/* */
/* Les pseudo-nombres baptises "pseudo-hyper-complexes" */
/* (ou "pseudo-quaternions") seront representes de deux */
/* facons differentes comme quadruplets de nombres reels : */
/* {x,y,z,t} en coordonnees cartesiennes et {rho,theta,phi,alpha} */
/* en coordonnees hyper-spheriques. */
/* */
/* L'addition de deux "pseudo-quaternions" 'q1' et 'q2' */
/* sera definie en coordonnees cartesiennes par : */
/* */
/* q = q + q = (x ,y ,z ,t ) + (x ,y ,z ,t ) */
/* 1 2 1 1 1 1 2 2 2 2 */
/* */
/* = (x + x ,y + y ,z + z ,t + t ) */
/* 1 2 1 2 1 2 1 2 */
/* */
/* alors que seront utilisees les coordonnees hyper-spheriques */
/* pour definir la multiplication : */
/* */
/* q = q . q = (rho ,theta ,phi ,alpha ) . (rho ,theta ,phi ,alpha ) */
/* 1 2 1 1 1 1 2 2 2 2 */
/* */
/* = (rho . rho ,theta + theta ,phi + phi ,alpha + alpha ) */
/* 1 2 1 2 1 2 1 2 */
/* */
/* Par soucis de generalite, les combinaisons entre les quatre */
/* composantes {rho,theta,phi,alpha} des deux "pseudo-quaternions" */
/* seront en fait effectuees via des polynomes 'P' du quatrieme */
/* degre a deux variables initialises par defaut de facon a ce que : */
/* */
/* P(rho ,rho ) = rho . rho */
/* 1 2 1 2 */
/* */
/* P(theta ,theta ) = theta + theta */
/* 1 2 1 2 */
/* */
/* P(phi ,phi ) = phi + phi */
/* 1 2 1 2 */
/* */
/* P(alpha ,alpha ) = alpha + alpha */
/* 1 2 1 2 */
/* */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_DEFINITION_NOMBRES_PSEUDO_HYPER_COMPLEXES_11: */
TypedefS(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Float PGPD)
/* Precision ('Float' ou 'Double') des nombres hyper-complexes. */
#ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01
Dstruct04(nombre_hyper_complexe
,DEFV(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Hreelle)
,DEFV(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Himaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Hjmaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Hkmaginaire)
,NOM_VIDE
);
Dstruct08(nombre_hyper_complexe_etendu
,DEFV(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Hreelle)
,DEFV(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Himaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Hjmaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Hkmaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Hrho)
,DEFV(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Htheta)
,DEFV(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Hphi)
,DEFV(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Halpha)
,NOM_VIDE
);
/* Definition du type "nombre hyper-complexe". */
/* */
/* Le 20061211113711 furent introduits {rho,theta,phi,alpha} inutiles a cette date, mais */
/* on ne sait jamais : mieux vaut prevenir que guerir... */
/* */
/* Aux environs du 20061223122047, cela a cree une sacree "crise" de : */
/* */
/* Segmentation fault */
/* */
/* et autres phenomenes bizarres sur '$LACT15'. La solution fut evidemment de tout */
/* recompiler... */
/* */
/* En fait, le 20061223125559 je decide que cette extension etant d'une part inutile a */
/* cette date et d'autre part doublant la memoire necessaire, je la supprime, tout en */
/* conservant sa definition sous le nom 'nombre_hyper_complexe_etendu'... */
/* */
/* Le 20110811162718, le type de {Hrho,Htheta,Hphi,Halpha} est passe de */
/* 'PRECISION_DES_NOMBRES_COMPLEXES' a 'PRECISION_DES_NOMBRES_HYPER_COMPLEXES'... */
#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
Dstruct02(nombre_hyper_complexe
,DEFV(complexe,Hreelle)
,DEFV(complexe,Hjmaginaire)
,NOM_VIDE
);
Dstruct06(nombre_hyper_complexe_etendu
,DEFV(complexe,Hreelle)
,DEFV(complexe,Hjmaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Hrho)
,DEFV(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Htheta)
,DEFV(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Hphi)
,DEFV(PRECISION_DES_NOMBRES_HYPER_COMPLEXES,Halpha)
,NOM_VIDE
);
/* Definition du type "nombre hyper-complexe". */
/* */
/* Le 20061211113711 furent introduits {rho,theta,phi,alpha} inutiles a cette date, mais */
/* on ne sait jamais : mieux vaut prevenir que guerir... */
/* */
/* Aux environs du 20061223122047, cela a cree une sacree "crise" de : */
/* */
/* Segmentation fault */
/* */
/* et autres phenomenes bizarres sur '$LACT15'. La solution fut evidemment de tout */
/* recompiler... */
/* */
/* En fait, le 20061223125559 je decide que cette extension etant d'une part inutile a */
/* cette date et d'autre part doublant la memoire necessaire, je la supprime, tout en */
/* conservant sa definition sous le nom 'nombre_hyper_complexe_etendu'... */
/* */
/* Le 20110811162718, le type de {Hrho,Htheta,Hphi,Halpha} est passe de */
/* 'PRECISION_DES_NOMBRES_COMPLEXES' a 'PRECISION_DES_NOMBRES_HYPER_COMPLEXES'... */
#Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02
#Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02
#define _nombre_hyper_complexe \
STRU(nombre_hyper_complexe) \
/* Definition d'un type intermediaire pour faciliter la parametrisation de la taille... */
Typedef(hyper_complexe,_nombre_hyper_complexe)
TypedefS(A___hyper_complexe,hyper_complexe)
TypedefS(E___hyper_complexe,hyper_complexe)
#define size_hyper_complexe \
SIZP(_nombre_hyper_complexe) \
/* Taille des nombres hyper-complexes... */
#define _nombre_hyper_complexe_etendu \
STRU(nombre_hyper_complexe_etendu) \
/* Definition d'un type intermediaire pour faciliter la parametrisation de la taille */ \
/* (introduit le 20091119085332). */
Typedef(hyper_complexe_etendu,_nombre_hyper_complexe_etendu)
TypedefS(A___hyper_complexe_etendu,hyper_complexe_etendu)
TypedefS(E___hyper_complexe_etendu,hyper_complexe_etendu)
#define size_hyper_complexe_etendu \
SIZP(_nombre_hyper_complexe_etendu) \
/* Taille des nombres hyper-complexes (introduit le 20091119085332). */
#define Carre_de_i__Quaternion \
Carre_de_i__Complexe
#define Carre_de_j__Quaternion \
Carre_de_i__Complexe
#define Carre_de_k__Quaternion \
Carre_de_i__Complexe
/* Carre de {i,j,k} (introduit le 20200321152406). */
#define Rho1_Quaternion \
Rho1_Complexe \
/* Module unite des nombres hyper-complexes (introduit le 20061209102141). */
#define R0_Quaternion \
R0_Complexe
#define I0_Quaternion \
I0_Complexe
#define J0_Quaternion \
FZERO
#define K0_Quaternion \
FZERO
/* Definition du nombre {0,0,0,0}. */
#define R1_Quaternion \
R1_Complexe
#define I1_Quaternion \
I1_Complexe
#define J1_Quaternion \
FU
#define K1_Quaternion \
FU
/* Definition du nombre {1,1,1,1} (introduit le 20060425154031). */
#ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01
# define HReelle(q) \
ASD1(PARE(q),Hreelle) \
/* Acces a la partie reelle du nombre hyper-complexe 'q', */
# define HImaginaire(q) \
ASD1(PARE(q),Himaginaire) \
/* Acces a la partie imaginaire du nombre hyper-complexe 'q', */
# define HJmaginaire(q) \
ASD1(PARE(q),Hjmaginaire) \
/* Acces a la partie jmaginaire du nombre hyper-complexe 'q', */
# define HKmaginaire(q) \
ASD1(PARE(q),Hkmaginaire) \
/* Acces a la partie kmaginaire du nombre hyper-complexe 'q'. */
# define CHReelle(q) \
ConjugaisonReelle(HReelle(q)) \
/* Acces a la partie reelle du conjugue du nombre hyper-complexe 'q', */
# define CHImaginaire(q) \
ConjugaisonImaginaire_s(HImaginaire(q)) \
/* Acces a la partie imaginaire du conjugue du nombre hyper-complexe 'q', */
# define CHJmaginaire(q) \
ConjugaisonImaginaire_s(HJmaginaire(q)) \
/* Acces a la partie jmaginaire du conjugue du nombre hyper-complexe 'q', */
# define CHKmaginaire(q) \
ConjugaisonImaginaire_s(HKmaginaire(q)) \
/* Acces a la partie kmaginaire du conjugue du nombre hyper-complexe 'q'. */
#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 dHReelle(q) \
ASD1(PARE(q),Hreelle) \
/* Acces a la partie 'Hreelle' du nombre hyper-complexe 'q' ou "decomposistion", */
# define dHImaginaire(q) \
ASD1(PARE(q),Hjmaginaire) \
/* Acces a la partie 'Hjmaginaire' du nombre hyper-complexe 'q' ou "decomposistion". */
# define HReelle(q) \
Reelle(dHReelle(q)) \
/* Acces a la partie reelle du nombre hyper-complexe 'q', */
# define HImaginaire(q) \
Imaginaire(dHReelle(q)) \
/* Acces a la partie imaginaire du nombre hyper-complexe 'q', */
# define HJmaginaire(q) \
Reelle(dHImaginaire(q)) \
/* Acces a la partie jmaginaire du nombre hyper-complexe 'q', */
# define HKmaginaire(q) \
Imaginaire(dHImaginaire(q)) \
/* Acces a la partie kmaginaire du nombre hyper-complexe 'q'. */
#Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02
#Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02
#define HCHS_Rho(q_etendu) \
ASD1(PARE(q_etendu),Hrho) \
/* Acces a la partie 'Hrho' du nombre hyper-complexe 'q' (introduite le 20061211113711). */ \
/* */ \
/* On notera le nom 'HCHS_Rho' (pour "Coordonnees Hyper-Spheriques") et non pas 'HRho' */ \
/* afin de ne pas perturber les autres utilisations possibles de 'HRho'... */ \
/* */ \
/* ATTENTION : cela ne concerne que les 'hyper_complexe_etendu's... */
#define HCHS_Theta(q_etendu) \
ASD1(PARE(q_etendu),Htheta) \
/* Acces a la partie 'Htheta' du nombre hyper-complexe 'q' (introduite le 20061211113711). */ \
/* */ \
/* On notera le nom 'HCHS_Theta' (pour "Coordonnees Hyper-Spheriques") et non pas 'HTheta' */ \
/* afin de ne pas perturber les autres utilisations possibles de 'HTheta'... */ \
/* */ \
/* ATTENTION : cela ne concerne que les 'hyper_complexe_etendu's... */
#define HCHS_Phi(q_etendu) \
ASD1(PARE(q_etendu),Hphi) \
/* Acces a la partie 'Hphi' du nombre hyper-complexe 'q' (introduite le 20061211113711). */ \
/* */ \
/* On notera le nom 'HCHS_Phi' (pour "Coordonnees Hyper-Spheriques") et non pas 'HPhi' */ \
/* afin de ne pas perturber les autres utilisations possibles de 'HPhi'... */ \
/* */ \
/* ATTENTION : cela ne concerne que les 'hyper_complexe_etendu's... */
#define HCHS_Alpha(q_etendu) \
ASD1(PARE(q_etendu),Halpha) \
/* Acces a la partie 'Halpha' du nombre hyper-complexe 'q' (introduite le 20061211113711). */ \
/* */ \
/* On notera le nom 'HCHS_Alpha' (pour "Coordonnees Hyper-Spheriques") et non pas 'HAlpha' */ \
/* afin de ne pas perturber les autres utilisations possibles de 'HAlpha'... */ \
/* */ \
/* ATTENTION : cela ne concerne que les 'hyper_complexe_etendu's... */
/*===================================================================================================================================*/
/* :Debut_listMN_DEFINITION_NOMBRES_HYPER_HYPER_COMPLEXES_11: */
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D 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 */
/* ( O U " O C T O N I O N S " ) : */
/* */
/* */
/* Definition : */
/* */
/* Soit 'Q' le corps des nombres Hyper-Complexes (ou "quaternions"), */
/* le corps 'O' des nombres Hyper-Hyper-Complexes (ou "octonions" ou */
/* encore "octaves" de Cayley) peut alors se definir par : */
/* */
/* O = (Q.1) + (Q.s) */
/* */
/* la conjugaison '-' pouvant se definir par : */
/* */
/* - - */
/* O = (Q.1) - (Q.s) */
/* */
/* avec : */
/* */
/* 2 */
/* s = -1 */
/* */
/* j.s = -s.j ('j' definissant 'Q', et 's' definissant 'O') */
/* */
/* d'ou l'on tire ('1' etant l'element neutre de la multiplication dans 'R', 'C' et 'Q') : */
/* */
/* O = (Q.1) + (Q.s) */
/* O = (((C.1) + (C.j)).1) + (((C.1) + (C.j)).s) */
/* O = ((C.1).1) + ((C.j).1) + ((C.1).s) + ((C.j).s) */
/* = ((((R.1) + (R.i)).1).1) + ((((R.1) + (R.i)).j).1) + ((((R.1) + (R.i)).1).s) + ((((R.1) + (R.i)).j).s) */
/* = (((R.1).1).1) + (((R.i).1).1) + (((R.1).j).1) + (((R.i).j).1) + (((R.1).1).s) + (((R.i).1).s) + (((R.1).j).s) + (((R.i).j).s) */
/* */
/* | | | | | | | | */
/* | | | | | | | | */
/* | | ------------- | | | | | */
/* | --------------------------- | | | | | | */
/* ----------------------------------------- | | | | | | | */
/* | | | | | | | | */
/* | | | | | | | | */
/* 1 = ((1).1).1 <- | | | | | | | */
/* i = ((i).1).1 <--- | | | | | | */
/* j = ((1).j).1 <----- | | | | | */
/* k = ((i).j).1 <------- | | | | */
/* | | | | */
/* s = ((1).1).s <----------------------- | | | */
/* t = ((i).1).s <--------------------------------------- | | */
/* u = ((1).j).s <------------------------------------------------------- | */
/* v = ((i).j).s <----------------------------------------------------------------------- */
/* */
/* d'ou, avec k = (i).j : */
/* */
/* 1 = 1.1 */
/* i = i.1 */
/* j = j.1 */
/* k = k.1 */
/* */
/* s = 1.s */
/* t = i.s */
/* u = j.s */
/* v = k.s */
/* */
/* | | */
/* | | */
/* | --------> (1,s) definit 'O' */
/* ----------> (1,i,j,k) est la base de 'Q' */
/* */
/* */
/* Notation : */
/* */
/* Un octonion 'o' est compose d'une partie reelle 'a' */
/* et de sept parties parties imaginaires 'b', 'c', 'd', */
/* 'e' 'f', 'g' et 'h' ; on le notera : */
/* */
/* o = (a,b,c,d,e,f,g,h) */
/* */
/* ou : */
/* */
/* o = a.1 + b.i + c.j + d.k + e.s + f.t + g.u + h.v */
/* */
/* ou : */
/* */
/* o = a + b.i + c.j + d.k + e.s + f.t + g.u + h.v */
/* */
/* avec : */
/* */
/* 2 2 2 2 2 2 2 */
/* i = j = k = s = t = u = v = -1 */
/* */
/* i.j = -j.i */
/* j.k = -k.j */
/* k.i = -i.k */
/* */
/* etc, tous les produits de deux vecteurs de base distincts anticommutant (sauf avec '1')... */
/* */
/* */
/* on a donc la table de multiplication (v1.v2) : */
/* */
/* */
/* | | | | | | | | | */
/* + v1 | +1 | +i | +j | +k | +s | +t | +u | +v | */
/* + | | | | | | | | | */
/* + | | | | | | | | | */
/* v2 + | | | | | | | | | */
/* | | | | | | | | | */
/* ---------------|---------|---------|---------|---------| */
/* +1 | +1 +i | +j +k | +s +t | +u +v | */
/* ---------------| * | * | * | * | */
/* +i | +i -1 | -k +j | -t +s | +v -u | */
/* ---------------|---------|---------|---------|---------| */
/* +j | +j +k | -1 -i | -u -v | +s +t | */
/* ---------------| * | * | * | * | */
/* +k | +k -j | +i -1 | -v +u | -t +s | */
/* ---------------|---------|---------|---------|---------| */
/* +s | +s +t | +u +v | -1 -i | -j -k | */
/* ---------------| * | * | * | * | */
/* +t | +t -s | +v -u | +i -1 | +k -j | */
/* ---------------|---------|---------|---------|---------| */
/* +u | +u -v | -s +t | +j -k | -1 +i | */
/* ---------------| * | * | * | * | */
/* +v | +v +u | -t -s | +k +j | -i -1 | */
/* ------------------------------------------------------- */
/* */
/* */
/* (ce resultat a ete obtenu grace au programme 'v $xtKg/octonions$K') */
/* */
/* */
/* Le produit de deux octonions 'o1' et 'o2' se definit par : */
/* */
/* o1 = q11.1 + q12.s */
/* o2 = q21.1 + q22.s */
/* */
/* (ou 'q11', 'q12', 'q21' et 'q22' sont quatre quaternions) */
/* */
/* o1.o2 = (q11.1 + q12.s).(q21.1 + q22.s) */
/* */
/* --- --- */
/* o1.o2 = (q11.q21 - q22.q12).1 + (q22.q11 + q12.q21).s */
/* */
/* La multiplication n'est ni commutative, ni associative... */
/* */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_DEFINITION_NOMBRES_HYPER_HYPER_COMPLEXES_11: */
/*===================================================================================================================================*/
/* :Debut_listMN_DEFINITION_NOMBRES_PSEUDO_HYPER_HYPER_COMPLEXES_11: */
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S N O M B R E S P S E U D O - H Y P E R - H Y P E R - C O M P L E X E S */
/* ( O U " P S E U D O - O C T O N I O N S " ) : */
/* */
/* */
/* Definition : */
/* */
/* Les nombres complexes peuvent etre representes */
/* de deux facons differentes comme couple de nombres */
/* reels : {x,y} en coordonnees cartesiennes et {rho,theta} */
/* en coordonnees polaires. */
/* */
/* L'addition de deux nombres complexes 'z1' et 'Z2' */
/* est facile a exprimer en coordonnees cartesiennes : */
/* */
/* z = z + z = (x ,y ) + (x ,y ) */
/* 1 2 1 1 2 2 */
/* */
/* = (x + x ,y + y ) */
/* 1 2 1 2 */
/* */
/* alors que la multiplication est plus facile a exprimer */
/* en coordonnees polaires : */
/* */
/* z = z . z = (rho ,theta ) . (rho ,theta ) */
/* 1 2 1 1 2 2 */
/* */
/* = (rho . rho ,theta + theta ) */
/* 1 2 1 2 */
/* */
/* Les pseudo-nombres baptises "pseudo-hyper-hyper-complexes" */
/* (ou "pseudo-octonions") seront representes de deux */
/* facons differentes comme octuplets de nombres reels : */
/* {x1,x2,x3,x4,x5,x6,x7,x8} en coordonnees cartesiennes et {rho,A1,A2,A3,A4,A5,A6,A7} */
/* en coordonnees hyper-hyper-spheriques. */
/* */
/* L'addition de deux "pseudo-octonions" 'o1' et 'o2' */
/* sera definie en coordonnees cartesiennes par : */
/* */
/* o = o + o = (x1 ,x2 ,x3 ,x5 ,x5 ,x6 ,x7 ,x8 ) + (x1 ,x2 ,x3 ,x5 ,x5 ,x6 ,x7 ,x8 ) */
/* 1 2 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 */
/* */
/* = (x1 + x1 ,x2 + x2 ,x3 + x3 ,x4 + x4 ,x5 + x5 ,x6 + x6 ,x7 + x7 ,x8 + x8 ) */
/* 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 */
/* */
/* alors que seront utilisees les coordonnees hyper-hyper-spheriques */
/* pour definir la multiplication : */
/* */
/* o = o . o = (rho ,A1 ,A2 ,A3 ,A4 ,A5 ,A6 ,A7 ) . (rho ,A1 ,A2 ,A3 ,A4 ,A5 ,A6 ,A7 ) */
/* 1 2 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 */
/* */
/* = (rho . rho ,A1 + A1 ,A2 + A2 ,A3 + A3 ,A4 + A4 ,A5 + A5 ,A6 + A6 ,A7 + A7 ) */
/* 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 */
/* */
/* Par soucis de generalite, les combinaisons entre les huit */
/* composantes {rho,A1,A2,A3,A4,A5,A6,A7} des deux "pseudo-octonions" */
/* seront en fait effectuees via des polynomes 'P' du quatrieme */
/* degre a deux variables initialises par defaut de facon a ce que : */
/* */
/* P(rho ,rho ) = rho . rho */
/* 1 2 1 2 */
/* */
/* P(A1 ,A1 ) = A1 + A1 */
/* 1 2 1 2 */
/* */
/* P(A2 ,A2 ) = A2 + A2 */
/* 1 2 1 2 */
/* */
/* P(A3 ,A3 ) = A3 + A3 */
/* 1 2 1 2 */
/* */
/* P(A4 ,A4 ) = A4 + A4 */
/* 1 2 1 2 */
/* */
/* P(A5 ,A5 ) = A5 + A5 */
/* 1 2 1 2 */
/* */
/* P(A6 ,A6 ) = A6 + A6 */
/* 1 2 1 2 */
/* */
/* P(A7 ,A7 ) = A7 + A7 */
/* 1 2 1 2 */
/* */
/* */
/* */
/*************************************************************************************************************************************/
/* :Fin_listMN_DEFINITION_NOMBRES_PSEUDO_HYPER_HYPER_COMPLEXES_11: */
TypedefS(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,Float PGPD)
/* Precision ('Float' ou 'Double') des nombres hyper-hyper-complexes. */
#ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01
Dstruct08(nombre_hyper_hyper_complexe
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHreelle)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHimaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHjmaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHkmaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHsmaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHtmaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHumaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHvmaginaire)
,NOM_VIDE
);
/* Definition du type "nombre hyper-hyper-complexes". */
Dstruct16(nombre_hyper_hyper_complexe_etendu
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHreelle)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHimaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHjmaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHkmaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHsmaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHtmaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHumaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHvmaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHrho)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHangle1)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHangle2)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHangle3)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHangle4)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHangle5)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHangle6)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHangle7)
,NOM_VIDE
);
/* Definition du type "nombre hyper-hyper-complexes" etendu. */
#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
Dstruct02(nombre_hyper_hyper_complexe
,DEFV(hyper_complexe,HHreelle)
,DEFV(hyper_complexe,HHsmaginaire)
,NOM_VIDE
);
/* Definition du type "nombre hyper-hyper-complexes". */
Dstruct10(nombre_hyper_hyper_complexe_etendu
,DEFV(hyper_complexe,HHreelle)
,DEFV(hyper_complexe,HHsmaginaire)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHrho)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHangle1)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHangle2)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHangle3)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHangle4)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHangle5)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHangle6)
,DEFV(PRECISION_DES_NOMBRES_HYPER_HYPER_COMPLEXES,HHangle7)
,NOM_VIDE
);
/* Definition du type "nombre hyper-hyper-complexes" etendu. */
#Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02
#Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02
#define _nombre_hyper_hyper_complexe \
STRU(nombre_hyper_hyper_complexe) \
/* Definition d'un type intermediaire pour faciliter la parametrisation de la taille... */
Typedef(hyper_hyper_complexe,_nombre_hyper_hyper_complexe)
TypedefS(A___hyper_hyper_complexe,hyper_hyper_complexe)
TypedefS(E___hyper_hyper_complexe,hyper_hyper_complexe)
#define size_hyper_hyper_complexe \
SIZP(_nombre_hyper_hyper_complexe) \
/* Taille des nombres hyper-hyper-complexes... */
#define _nombre_hyper_hyper_complexe_etendu \
STRU(nombre_hyper_hyper_complexe_etendu) \
/* Definition d'un type intermediaire pour faciliter la parametrisation de la taille */ \
/* (introduit le 20091119085332). */
Typedef(hyper_hyper_complexe_etendu,_nombre_hyper_hyper_complexe_etendu)
TypedefS(A___hyper_hyper_complexe_etendu,hyper_hyper_complexe_etendu)
TypedefS(E___hyper_hyper_complexe_etendu,hyper_hyper_complexe_etendu)
#define size_hyper_hyper_complexe_etendu \
SIZP(_nombre_hyper_hyper_complexe_etendu) \
/* Taille des nombres hyper-hyper-complexes (introduit le 20110811162718). */
#define Carre_de_i__Octonion \
Carre_de_i__Complexe
#define Carre_de_j__Octonion \
Carre_de_i__Complexe
#define Carre_de_k__Octonion \
Carre_de_i__Complexe
#define Carre_de_s__Octonion \
Carre_de_i__Complexe
#define Carre_de_t__Octonion \
Carre_de_i__Complexe
#define Carre_de_u__Octonion \
Carre_de_i__Complexe
#define Carre_de_v__Octonion \
Carre_de_i__Complexe
/* Carre de {i,j,k,s,t,u,v} (introduit le 20200321152406). */
#define Rho1_Octonion \
Rho1_Complexe \
/* Module unite des nombres hyper-hyper-complexes (introduit le 20110829151249). */
#define R0_Octonion \
R0_Quaternion
#define I0_Octonion \
I0_Quaternion
#define J0_Octonion \
J0_Quaternion
#define K0_Octonion \
K0_Quaternion
#define S0_Octonion \
FZERO
#define T0_Octonion \
FZERO
#define U0_Octonion \
FZERO
#define V0_Octonion \
FZERO
/* Definition du nombre {0,0,0,0,0,0,0,0} (introduit le 20060425155739). */
#define R1_Octonion \
R1_Quaternion
#define I1_Octonion \
I1_Quaternion
#define J1_Octonion \
K1_Quaternion
#define K1_Octonion \
K1_Quaternion
#define S1_Octonion \
FU
#define T1_Octonion \
FU
#define U1_Octonion \
FU
#define V1_Octonion \
FU
/* Definition du nombre {1,1,1,1,1,1,1,1} (introduit le 20060425155739). */
#ifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_01
# define HHReelle(o) \
ASD1(PARE(o),HHreelle) \
/* Acces a la partie reelle du nombre hyper-hyper-complexe 'o', */
# define HHImaginaire(o) \
ASD1(PARE(o),HHimaginaire) \
/* Acces a la partie imaginaire du nombre hyper-hyper-complexe 'o', */
# define HHJmaginaire(o) \
ASD1(PARE(o),HHjmaginaire) \
/* Acces a la partie jmaginaire du nombre hyper-hyper-complexe 'o', */
# define HHKmaginaire(o) \
ASD1(PARE(o),HHkmaginaire) \
/* Acces a la partie kmaginaire du nombre hyper-hyper-complexe 'o', */
# define HHSmaginaire(o) \
ASD1(PARE(o),HHsmaginaire) \
/* Acces a la partie smaginaire du nombre hyper-hyper-complexe 'o', */
# define HHTmaginaire(o) \
ASD1(PARE(o),HHtmaginaire) \
/* Acces a la partie tmaginaire du nombre hyper-hyper-complexe 'o', */
# define HHUmaginaire(o) \
ASD1(PARE(o),HHumaginaire) \
/* Acces a la partie umaginaire du nombre hyper-hyper-complexe 'o', */
# define HHVmaginaire(o) \
ASD1(PARE(o),HHvmaginaire) \
/* Acces a la partie vmaginaire du nombre hyper-hyper-complexe 'o'. */
# define CHHReelle(o) \
ConjugaisonReelle(HHReelle(o)) \
/* Acces a la partie reelle du conjugue du nombre hyper-hyper-complexe 'o', */
# define CHHImaginaire(o) \
ConjugaisonImaginaire_s(HHImaginaire(o)) \
/* Acces a la partie imaginaire du conjugue du nombre hyper-hyper-complexe 'o', */
# define CHHJmaginaire(o) \
ConjugaisonImaginaire_s(HHJmaginaire(o)) \
/* Acces a la partie jmaginaire du conjugue du nombre hyper-hyper-complexe 'o', */
# define CHHKmaginaire(o) \
ConjugaisonImaginaire_s(HHKmaginaire(o)) \
/* Acces a la partie kmaginaire du conjugue du nombre hyper-hyper-complexe 'o'. */
# define CHHSmaginaire(o) \
ConjugaisonImaginaire_s(HHSmaginaire(o)) \
/* Acces a la partie smaginaire du conjugue du nombre hyper-hyper-complexe 'o', */
# define CHHTmaginaire(o) \
ConjugaisonImaginaire_s(HHTmaginaire(o)) \
/* Acces a la partie tmaginaire du conjugue du nombre hyper-hyper-complexe 'o'. */
# define CHHUmaginaire(o) \
ConjugaisonImaginaire_s(HHUmaginaire(o)) \
/* Acces a la partie umaginaire du conjugue du nombre hyper-hyper-complexe 'o', */
# define CHHVmaginaire(o) \
ConjugaisonImaginaire_s(HHVmaginaire(o)) \
/* Acces a la partie vmaginaire du conjugue du nombre hyper-hyper-complexe 'o'. */
#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 dHHReelle(o) \
ASD1(PARE(o),HHreelle) \
/* Acces a la partie 'HHreelle' du nombre hyper-hyper-complexe 'o' ou "decomposistion", */
# define dHHImaginaire(o) \
ASD1(PARE(o),HHsmaginaire) \
/* Acces a la partie 'HHsmaginaire' du nombre hyper-hyper-complexe 'o' ou "decomposistion". */
# define HHReelle(o) \
HReelle(dHHReelle(o)) \
/* Acces a la partie reelle du nombre hyper-hyper-complexe 'o', */
# define HHImaginaire(o) \
HImaginaire(dHHReelle(o)) \
/* Acces a la partie imaginaire du nombre hyper-hyper-complexe 'o', */
# define HHJmaginaire(o) \
HJmaginaire(dHHReelle(o)) \
/* Acces a la partie jmaginaire du nombre hyper-hyper-complexe 'o', */
# define HHKmaginaire(o) \
HKmaginaire(dHHReelle(o)) \
/* Acces a la partie kmaginaire du nombre hyper-hyper-complexe 'o', */
# define HHSmaginaire(o) \
HReelle(dHHImaginaire(o)) \
/* Acces a la partie smaginaire du nombre hyper-hyper-complexe 'o', */
# define HHTmaginaire(o) \
HImaginaire(dHHImaginaire(o)) \
/* Acces a la partie tmaginaire du nombre hyper-hyper-complexe 'o', */
# define HHUmaginaire(o) \
HJmaginaire(dHHImaginaire(o)) \
/* Acces a la partie umaginaire du nombre hyper-hyper-complexe 'o', */
# define HHVmaginaire(o) \
HKmaginaire(dHHImaginaire(o)) \
/* Acces a la partie vmaginaire du nombre hyper-hyper-complexe 'o'. */
#Aifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02
#Eifdef DEFINITION_DES_CORPS_BATIS_A_PARTIR_DES_NOMBRES_REELS_VERSION_02
#define HHCHHS_Rho(o_etendu) \
ASD1(PARE(o_etendu),HHrho)
#define HHCHHS_Angle1(o_etendu) \
ASD1(PARE(o_etendu),HHangle1)
#define HHCHHS_Angle2(o_etendu) \
ASD1(PARE(o_etendu),HHangle2)
#define HHCHHS_Angle3(o_etendu) \
ASD1(PARE(o_etendu),HHangle3)
#define HHCHHS_Angle4(o_etendu) \
ASD1(PARE(o_etendu),HHangle4)
#define HHCHHS_Angle5(o_etendu) \
ASD1(PARE(o_etendu),HHangle5)
#define HHCHHS_Angle6(o_etendu) \
ASD1(PARE(o_etendu),HHangle6)
#define HHCHHS_Angle7(o_etendu) \
ASD1(PARE(o_etendu),HHangle7)
/* Acces aux composantes "etendues" d'un nombre hyper-hyper-complexe, le symbole "CHHS" */
/* signifiant "Coordonnees Hyper-Hyper-Spheriques" (introduit le 20110811180011). ' */