_______________________________________________________________________________________________________________________________________
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   T R I G O N O M E T R I Q U E S   C I R C U L A I R E S  :                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Dans ce fichier se trouvent toutes                                                                             */
/*                  les fonctions de base de la trigo-                                                                               */
/*                  nometrie circulaire en simple                                                                                    */
/*                  precision.                                                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Malgre tout, le resultat est                                                                                   */
/*                  renvoye en double-precision,                                                                                     */
/*                  mais on a applique la fonction                                                                                   */
/*                  'PETI' qui evitera les underflows...                                                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$ximf/trigoc$FON' :                                                                                             */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 19870000000000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O S I N U S  :                                                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,Fcosinus(angle_en_radians)))
DEFV(Argument,DEFV(Double,angle_en_radians));
                                        /* Angle argument exprime en radians.                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Double,INIT(cosinus,COSD(angle_en_radians)));
                                        /* Pour memoriser la valeur du cosinus en double-precision.                                  */
     /*..............................................................................................................................*/
     RETU(PETI(cosinus));
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S I N U S  :                                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,Fsinus(angle_en_radians)))
DEFV(Argument,DEFV(Double,angle_en_radians));
                                        /* Angle argument exprime en radians.                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Double,INIT(sinus,SIND(angle_en_radians)));
                                        /* Pour memoriser la valeur du sinus en double-precision.                                    */
     /*..............................................................................................................................*/
     RETU(PETI(sinus));
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A R C - T A N G E N T E  :                                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,Farc_tangente(y,x)))
                                        /* Cela fut introduit le 20161202134801 pour 'v $xrs/huit.11$I ATAN' afin de simplificatier  */
                                        /* la definition de 'ATAN(...)' et donc accelerer la compilation...                          */
DEFV(Argument,DEFV(Float,y));
DEFV(Argument,DEFV(Float,x));
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(gATAN(y,x));
     Eblock

EFonctionF

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O S I N U S   A C C E L E R E  :                                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   GENERATION_DE_L_ACCELERATEUR__COSINUS_ACCELERE                                                                                \
                    GENERATION_DE_L_ACCELERATEUR_DE_FONCTIONS_A_N_ARGUMENTS                                                             \
                        (S_ACCELERATEUR__COSINUS_ACCELERE                                                                               \
                                        /* On notera que l'on utilise le nom 'S_ACCELERATEUR__COSINUS_ACCELERE' pour                 */ \
                                        /* les donnees de l'accelerateur et non pas 'ACCELERATEUR__COSINUS_ACCELERE'                 */ \
                                        /* car, en effet, ce dernier nom est aussi celui de la procedure d'acceleration et donc      */ \
                                        /* si ce nom etait utilise, il y aurait substitution par la definition de l'accelerateur     */ \
                                        /* a suivre...                                                                               */ \
                        ,ACCELERATEUR__COSINUS_ACCELERE__NOMBRE_D_ENTREES                                                               \
                        ,DEFV(Local,DEFV(Float,DdTb1(POINTERf                                                                           \
                                                    ,S_ACCELERATEUR__COSINUS_ACCELERE_____Argument                                      \
                                                    ,ACCELERATEUR__COSINUS_ACCELERE__NOMBRE_D_ENTREES                                   \
                                                    ,ADRESSE_NON_ENCORE_DEFINIE                                                         \
                                                     )                                                                                  \
                                         )                                                                                              \
                              );                                                                                                        \
                                        /* Donne les trois arguments de l'entree courante (si elle est valide...).                   */ \
                         )                                                                                                              \
                                        /* Donnees de l'accelerateur a trois arguments...                                            */

#define   ACCELERATEUR__COSINUS_ACCELERE__NOMBRE_D_ENTREES                                                                              \
                    MILLE
#define   ACCELERATEUR__COSINUS_ACCELERE__PREMIERE_ENTREE                                                                               \
                    ACCELERATEUR_DE_FONCTIONS_A_N_ARGUMENTS__PREMIERE_ENTREE
#define   ACCELERATEUR__COSINUS_ACCELERE__DERNIERE_ENTREE                                                                               \
                    LSTX(ACCELERATEUR__COSINUS_ACCELERE__PREMIERE_ENTREE                                                                \
                        ,ACCELERATEUR__COSINUS_ACCELERE__NOMBRE_D_ENTREES                                                               \
                         )
                                        /* Parametres fondamentaux.                                                                  */

#define   ACCELERATEUR__COSINUS_ACCELERE(valeur_fonction,calcul_fonction,Argument,fonction,objet)                                       \
                    Bblock                                                                                                              \
                    ACCELERATEUR_DE_FONCTIONS_A_N_ARGUMENTS                                                                             \
                        (S_ACCELERATEUR__COSINUS_ACCELERE                                                                               \
                        ,S_ACCELERATEUR__COSINUS_ACCELERE_____utiliser_l_accelerateur                                                   \
                        ,ACCELERATEUR__COSINUS_ACCELERE__NOMBRE_D_ENTREES                                                               \
                        ,ACCELERATEUR__COSINUS_ACCELERE__PREMIERE_ENTREE                                                                \
                        ,ACCELERATEUR__COSINUS_ACCELERE__DERNIERE_ENTREE                                                                \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              MdTb1(S_ACCELERATEUR__COSINUS_ACCELERE_____Argument                                                       \
                                   ,ACCELERATEUR__COSINUS_ACCELERE__NOMBRE_D_ENTREES                                                    \
                                   ,Float,ADRESSE_NON_ENCORE_DEFINIE                                                                    \
                                    );                                                                                                  \
                                        /* Allocation de la memoire des listes d'Arguments.                                          */ \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              EGAL(IdTb1(S_ACCELERATEUR__COSINUS_ACCELERE_____Argument                                                  \
                                        ,INDX(index_d_initialisation,ACCELERATEUR__COSINUS_ACCELERE__PREMIERE_ENTREE)                   \
                                        ,ACCELERATEUR__COSINUS_ACCELERE__NOMBRE_D_ENTREES                                               \
                                         )                                                                                              \
                                  ,FLOT__UNDEF                                                                                          \
                                   );                                                                                                   \
                                        /* Initialisation des listes d'Arguments.                                                    */ \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                        ,NEUT(Argument)                                                                                                 \
                                        /* Calcul d'une fonction de l'Argument.                                                      */ \
                        ,IFEQ(IdTb1(S_ACCELERATEUR__COSINUS_ACCELERE_____Argument                                                       \
                                   ,index_d_acceleration                                                                                \
                                   ,ACCELERATEUR__COSINUS_ACCELERE__NOMBRE_D_ENTREES                                                    \
                                    )                                                                                                   \
                             ,Argument                                                                                                  \
                              )                                                                                                         \
                                        /* Est-ce la liste {Argument} memorisee ?                                                    */ \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              EGAL(IdTb1(S_ACCELERATEUR__COSINUS_ACCELERE_____Argument                                                  \
                                        ,index_d_acceleration                                                                           \
                                        ,ACCELERATEUR__COSINUS_ACCELERE__NOMBRE_D_ENTREES                                               \
                                         )                                                                                              \
                                  ,Argument                                                                                             \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              FdTb1(S_ACCELERATEUR__COSINUS_ACCELERE_____Argument                                                       \
                                   ,ACCELERATEUR__COSINUS_ACCELERE__NOMBRE_D_ENTREES                                                    \
                                   ,Float,ADRESSE_NON_ENCORE_DEFINIE                                                                    \
                                    );                                                                                                  \
                                        /* Desallocation de la memoire des listes d'Arguments.                                       */ \
                                        /*                                                                                           */ \
                                        /* On notera qu'a priori on n'utilisera jamais cette sequence puisqu'en effet, on ne sait    */ \
                                        /* jamais que c'est la derniere fois. C'est introduit malgre tout par "symetrie"...          */ \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                        ,valeur_fonction                                                                                                \
                        ,BLOC(calcul_fonction)                                                                                          \
                        ,fonction                                                                                                       \
                        ,objet                                                                                                          \
                         )                                                                                                              \
                    Eblock

DEFV(Common,DEFV(Logical,PINT(S_ACCELERATEUR__COSINUS_ACCELERE_____utiliser_l_accelerateur,VRAI)));
                                        /* Indique si l'accelerateur doit etre utilise ou pas.                                       */
DEFV(Common,DEFV(Logical,PINT(S_ACCELERATEUR__COSINUS_ACCELERE_____fermer_l_accelerateur,FAUX)));
                                        /* Indique si l'accelerateur doit etre ferme.                                                */
GENERATION_DE_L_ACCELERATEUR__COSINUS_ACCELERE;
                                        /* Generation des donnees utiles a l'accelerateur.                                           */
#define   COSINUS_ACCELERE(angle_en_radians)                                                                                            \
                    Bblock                                                                                                              \
                    ACCELERATEUR__COSINUS_ACCELERE(cosinus                                                                              \
                                                  ,BLOC(                                                                                \
                                                        EGAL(cosinus,COSD(angle_en_radians));                                           \
                                                        )                                                                               \
                                                  ,angle_en_radians                                                                     \
                                                  ,NomDeLaFonctionCourante QD@@__                                                       \
                                                  ,ADRESSE_UNDEF                                                                        \
                                                   );                                                                                   \
                    Eblock                                                                                                              \
                                        /* Procedure referencant l'accelerateur utilisant du "hash-coding"...                        */

BFonctionF

DEFV(Common,DEFV(FonctionF,Fcosinus_accelere(angle_en_radians)))
                                        /* Fonction introduite le 20120319120317...                                                  */
DEFV(Argument,DEFV(Double,angle_en_radians));
                                        /* Angle argument exprime en radians.                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Double,INIT(cosinus,FLOT__UNDEF));
                                        /* Pour memoriser la valeur du cosinus en double-precision.                                  */
     /*..............................................................................................................................*/
     COSINUS_ACCELERE(angle_en_radians);

     RETU(cosinus);
     Eblock

EFonctionF

#undef    COSINUS_ACCELERE

#undef    ACCELERATEUR__COSINUS_ACCELERE

#undef    ACCELERATEUR__COSINUS_ACCELERE__DERNIERE_ENTREE
#undef    ACCELERATEUR__COSINUS_ACCELERE__PREMIERE_ENTREE
#undef    ACCELERATEUR__COSINUS_ACCELERE__NOMBRE_D_ENTREES

#undef    GENERATION_DE_L_ACCELERATEUR__COSINUS_ACCELERE

_______________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S I N U S   A C C E L E R E  :                                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   GENERATION_DE_L_ACCELERATEUR__SINUS_ACCELERE                                                                                  \
                    GENERATION_DE_L_ACCELERATEUR_DE_FONCTIONS_A_N_ARGUMENTS                                                             \
                        (S_ACCELERATEUR__SINUS_ACCELERE                                                                                 \
                                        /* On notera que l'on utilise le nom 'S_ACCELERATEUR__SINUS_ACCELERE' pour                   */ \
                                        /* les donnees de l'accelerateur et non pas 'ACCELERATEUR__SINUS_ACCELERE'                   */ \
                                        /* car, en effet, ce dernier nom est aussi celui de la procedure d'acceleration et donc      */ \
                                        /* si ce nom etait utilise, il y aurait substitution par la definition de l'accelerateur     */ \
                                        /* a suivre...                                                                               */ \
                        ,ACCELERATEUR__SINUS_ACCELERE__NOMBRE_D_ENTREES                                                                 \
                        ,DEFV(Local,DEFV(Float,DdTb1(POINTERf                                                                           \
                                                    ,S_ACCELERATEUR__SINUS_ACCELERE_____Argument                                        \
                                                    ,ACCELERATEUR__SINUS_ACCELERE__NOMBRE_D_ENTREES                                     \
                                                    ,ADRESSE_NON_ENCORE_DEFINIE                                                         \
                                                     )                                                                                  \
                                         )                                                                                              \
                              );                                                                                                        \
                                        /* Donne les trois arguments de l'entree courante (si elle est valide...).                   */ \
                         )                                                                                                              \
                                        /* Donnees de l'accelerateur a trois arguments...                                            */

#define   ACCELERATEUR__SINUS_ACCELERE__NOMBRE_D_ENTREES                                                                                \
                    MILLE
#define   ACCELERATEUR__SINUS_ACCELERE__PREMIERE_ENTREE                                                                                 \
                    ACCELERATEUR_DE_FONCTIONS_A_N_ARGUMENTS__PREMIERE_ENTREE
#define   ACCELERATEUR__SINUS_ACCELERE__DERNIERE_ENTREE                                                                                 \
                    LSTX(ACCELERATEUR__SINUS_ACCELERE__PREMIERE_ENTREE                                                                  \
                        ,ACCELERATEUR__SINUS_ACCELERE__NOMBRE_D_ENTREES                                                                 \
                         )
                                        /* Parametres fondamentaux.                                                                  */

#define   ACCELERATEUR__SINUS_ACCELERE(valeur_fonction,calcul_fonction,Argument,fonction,objet)                                         \
                    Bblock                                                                                                              \
                    ACCELERATEUR_DE_FONCTIONS_A_N_ARGUMENTS                                                                             \
                        (S_ACCELERATEUR__SINUS_ACCELERE                                                                                 \
                        ,S_ACCELERATEUR__SINUS_ACCELERE_____utiliser_l_accelerateur                                                     \
                        ,ACCELERATEUR__SINUS_ACCELERE__NOMBRE_D_ENTREES                                                                 \
                        ,ACCELERATEUR__SINUS_ACCELERE__PREMIERE_ENTREE                                                                  \
                        ,ACCELERATEUR__SINUS_ACCELERE__DERNIERE_ENTREE                                                                  \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              MdTb1(S_ACCELERATEUR__SINUS_ACCELERE_____Argument                                                         \
                                   ,ACCELERATEUR__SINUS_ACCELERE__NOMBRE_D_ENTREES                                                      \
                                   ,Float,ADRESSE_NON_ENCORE_DEFINIE                                                                    \
                                    );                                                                                                  \
                                        /* Allocation de la memoire des listes d'Arguments.                                          */ \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              EGAL(IdTb1(S_ACCELERATEUR__SINUS_ACCELERE_____Argument                                                    \
                                        ,INDX(index_d_initialisation,ACCELERATEUR__SINUS_ACCELERE__PREMIERE_ENTREE)                     \
                                        ,ACCELERATEUR__SINUS_ACCELERE__NOMBRE_D_ENTREES                                                 \
                                         )                                                                                              \
                                  ,FLOT__UNDEF                                                                                          \
                                   );                                                                                                   \
                                        /* Initialisation des listes d'Arguments.                                                    */ \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                        ,NEUT(Argument)                                                                                                 \
                                        /* Calcul d'une fonction de l'Argument.                                                      */ \
                        ,IFEQ(IdTb1(S_ACCELERATEUR__SINUS_ACCELERE_____Argument                                                         \
                                   ,index_d_acceleration                                                                                \
                                   ,ACCELERATEUR__SINUS_ACCELERE__NOMBRE_D_ENTREES                                                      \
                                    )                                                                                                   \
                             ,Argument                                                                                                  \
                              )                                                                                                         \
                                        /* Est-ce la liste {Argument} memorisee ?                                                    */ \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              EGAL(IdTb1(S_ACCELERATEUR__SINUS_ACCELERE_____Argument                                                    \
                                        ,index_d_acceleration                                                                           \
                                        ,ACCELERATEUR__SINUS_ACCELERE__NOMBRE_D_ENTREES                                                 \
                                         )                                                                                              \
                                  ,Argument                                                                                             \
                                   );                                                                                                   \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                        ,BLOC(                                                                                                          \
                              Bblock                                                                                                    \
                              FdTb1(S_ACCELERATEUR__SINUS_ACCELERE_____Argument                                                         \
                                   ,ACCELERATEUR__SINUS_ACCELERE__NOMBRE_D_ENTREES                                                      \
                                   ,Float,ADRESSE_NON_ENCORE_DEFINIE                                                                    \
                                    );                                                                                                  \
                                        /* Desallocation de la memoire des listes d'Arguments.                                       */ \
                                        /*                                                                                           */ \
                                        /* On notera qu'a priori on n'utilisera jamais cette sequence puisqu'en effet, on ne sait    */ \
                                        /* jamais que c'est la derniere fois. C'est introduit malgre tout par "symetrie"...          */ \
                              Eblock                                                                                                    \
                              )                                                                                                         \
                        ,valeur_fonction                                                                                                \
                        ,BLOC(calcul_fonction)                                                                                          \
                        ,fonction                                                                                                       \
                        ,objet                                                                                                          \
                         )                                                                                                              \
                    Eblock

DEFV(Common,DEFV(Logical,PINT(S_ACCELERATEUR__SINUS_ACCELERE_____utiliser_l_accelerateur,VRAI)));
                                        /* Indique si l'accelerateur doit etre utilise ou pas.                                       */
DEFV(Common,DEFV(Logical,PINT(S_ACCELERATEUR__SINUS_ACCELERE_____fermer_l_accelerateur,FAUX)));
                                        /* Indique si l'accelerateur doit etre ferme.                                                */
GENERATION_DE_L_ACCELERATEUR__SINUS_ACCELERE;
                                        /* Generation des donnees utiles a l'accelerateur.                                           */
#define   SINUS_ACCELERE(angle_en_radians)                                                                                              \
                    Bblock                                                                                                              \
                    ACCELERATEUR__SINUS_ACCELERE(sinus                                                                                  \
                                                ,BLOC(                                                                                  \
                                                      EGAL(sinus,SIND(angle_en_radians));                                               \
                                                      )                                                                                 \
                                                ,angle_en_radians                                                                       \
                                                ,NomDeLaFonctionCourante QD@@__                                                         \
                                                ,ADRESSE_UNDEF                                                                          \
                                                 );                                                                                     \
                    Eblock                                                                                                              \
                                        /* Procedure referencant l'accelerateur utilisant du "hash-coding"...                        */

BFonctionF

DEFV(Common,DEFV(FonctionF,Fsinus_accelere(angle_en_radians)))
                                        /* Fonction introduite le 20120319113349...                                                  */
DEFV(Argument,DEFV(Double,angle_en_radians));
                                        /* Angle argument exprime en radians.                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Double,INIT(sinus,FLOT__UNDEF));
                                        /* Pour memoriser la valeur du sinus en double-precision.                                    */
     /*..............................................................................................................................*/
     SINUS_ACCELERE(angle_en_radians);

     RETU(sinus);
     Eblock

EFonctionF

#undef    SINUS_ACCELERE

#undef    ACCELERATEUR__SINUS_ACCELERE

#undef    ACCELERATEUR__SINUS_ACCELERE__DERNIERE_ENTREE
#undef    ACCELERATEUR__SINUS_ACCELERE__PREMIERE_ENTREE
#undef    ACCELERATEUR__SINUS_ACCELERE__NOMBRE_D_ENTREES

#undef    GENERATION_DE_L_ACCELERATEUR__SINUS_ACCELERE

_______________________________________________________________________________________________________________________________________




Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.