/*************************************************************************************************************************************/
/* */
/* A P P R O X I M A T I O N R A T I O N N E L L E D ' U N N O M B R E R E E L : */
/* */
/* */
/* Definition : */
/* */
/* Cette commande (inspiree du programme */
/* 'v $xtc/ApproximationRationnelle.21$c' */
/* et de 'v $xtc/ApproximationRationnelle.11$c' */
/* donne un rationnel approchant au mieux */
/* (en particulier avec le plus petit denominateur) */
/* un reel donne... */
/* */
/* */
/* Author of '$xcg/ApproximationRationnelle.01$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20180828105551). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N T E R F A C E ' listG ' : */
/* */
/* */
/* :Debut_listG: */
/* :Fin_listG: */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_BASE
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define UTILISER_LA_METHODE_DES_FRACTIONS_CONTINUES \
VRAI \
/* Faut-il utiliser une decomposition en fraction continue ('VRAI') ou une methode */ \
/* explorant le debut de l'ensemble des rationnels numerotes ('FAUX') ? */
#define NOMBRE_REEL \
FU \
/* Nombre "reel" (en fait un malheureux nombre flottant...) a approximer par un rationnel. */
#define EPSILON_DE_COINCIDENCE \
tgEPSILON \
/* Epsilon utilise pour savoir si l'approximation est bonne... */
#define DERNIERE_FAMILLE_DE_RATIONNELS_A_TESTER \
CENT \
/* Derniere famille de rationnels {N/1,(N-1)/2,(N-2)/3,...,2/(N-1),1/N} a tester. */
#define EDITER_QUELQUES_VALEURS \
FAUX \
/* Faut-il editer quelques valeurs utiles ('VRAI') ou uniquement l'approximation */ \
/* rationnelle ('FAUX') ? Ceci fut introduit le 20180830075031... */
#define SIMPLIFIER_L_EDITION \
FAUX \
/* Faut-il simplifier l'edition ('VRAI') ou pas ('FAUX') ? Ceci fut introduit le */ \
/* 20221218112609, la valeur par defaut assurant la compatibilite anterieure... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* A P P R O X I M A T I O N R A T I O N N E L L E D ' U N N O M B R E R E E L : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(Logical,INIT(utiliser_la_methode_des_fractions_continues,UTILISER_LA_METHODE_DES_FRACTIONS_CONTINUES));
/* Faut-il utiliser une decomposition en fraction continue ('VRAI') ou une methode */
/* explorant le debut de l'ensemble des rationnels numerotes ('FAUX') ? */
DEFV(Float,INIT(nombre_reel,NOMBRE_REEL));
/* Nombre "reel" (en fait un malheureux nombre flottant...) a approximer par un rationnel. */
DEFV(Float,INIT(epsilon_de_coincidence,EPSILON_DE_COINCIDENCE));
/* Epsilon utilise pour savoir si l'approximation est bonne... */
DEFV(Int,INIT(derniere_famille_de_rationnels_a_tester,DERNIERE_FAMILLE_DE_RATIONNELS_A_TESTER));
/* Derniere famille de rationnels {N/1,(N-1)/2,(N-2)/3,...,2/(N-1),1/N} a tester. */
DEFV(Logical,INIT(editer_quelques_valeurs,EDITER_QUELQUES_VALEURS));
/* Faut-il editer quelques valeurs utiles ('VRAI') ou uniquement l'approximation */
/* rationnelle ('FAUX') ? Ceci fut introduit le 20180830075031... */
DEFV(Logical,INIT(simplifier_l_edition,SIMPLIFIER_L_EDITION));
/* Faut-il simplifier l'edition ('VRAI') ou pas ('FAUX') ? Ceci fut introduit le */
/* 20221218112609, la valeur par defaut assurant la compatibilite anterieure... */
/*..............................................................................................................................*/
GET_ARGUMENTS_(nombre_d_arguments
,BLOC(GET_ARGUMENT_L("fractions_continues=""fc=",utiliser_la_methode_des_fractions_continues);
GET_ARGUMENT_N("numerotage_rationnels=""nr=",utiliser_la_methode_des_fractions_continues);
GET_ARGUMENT_F("nombre_reel=""reel=""n=""x=",nombre_reel);
GET_ARGUMENT_F("epsilon=""eps=""e=",epsilon_de_coincidence);
GET_ARGUMENT_I("derniere_famille=""derniere=""der=",derniere_famille_de_rationnels_a_tester);
GET_ARGUMENT_L("editer=",editer_quelques_valeurs);
/* Argument introduit le 20180830075031... */
GET_ARGUMENT_L("simplifier=""s=",simplifier_l_edition);
/* Argument introduit le 20221218112609... */
)
);
APPROXIMATION_RATIONNELLE_D_UN_REEL(nombre_reel
,utiliser_la_methode_des_fractions_continues
,epsilon_de_coincidence
,derniere_famille_de_rationnels_a_tester
,editer_quelques_valeurs
,simplifier_l_edition
);
/* Introduit sous cette forme le 20180831093737... */
RETU_Commande;
Eblock
ECommande