/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   R E E L                                                      */
/*        P A R   L A   M E D I A N T E   D E   F A R E Y  :                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xtc/ApproximationRationnelle.01$c' :                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 20180827162304).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#include  <stdio.h>

#define   N         388423
                                        /* Il est impossible de faire plus de 388423 iterations avec x=0.333333. Au-dela, il y a     */
                                        /* debordement des 'long int's...                                                            */
#define   REEL      0.333333

main()
          {
          int       n;
          double    x=REEL;

          long      int       BorneInferieure,Nunmerateur__BorneInferieure,Denominateur_BorneInferieure;
          long      int       BorneSuperieure,Nunmerateur__BorneSuperieure,Denominateur_BorneSuperieure;
          long      int       Nunmerateur__MedianteDeFarey;
          long      int       Denominateur_MedianteDeFarey;

          BorneInferieure=(int)x;
          BorneSuperieure=BorneInferieure+1;

          Nunmerateur__BorneInferieure=BorneInferieure;
          Denominateur_BorneInferieure=1;
          Nunmerateur__BorneSuperieure=BorneSuperieure;
          Denominateur_BorneSuperieure=1;

          for       (n=1 ; n <= N ; n++)
                    {
                    Nunmerateur__MedianteDeFarey=Nunmerateur__BorneInferieure+Nunmerateur__BorneSuperieure;
                    Denominateur_MedianteDeFarey=Denominateur_BorneInferieure+Denominateur_BorneSuperieure;

                    if        (x < (double)Nunmerateur__MedianteDeFarey/(double)Denominateur_MedianteDeFarey)
                              {
                              Nunmerateur__BorneSuperieure=Nunmerateur__MedianteDeFarey;
                              Denominateur_BorneSuperieure=Denominateur_MedianteDeFarey;
                              }
                    else
                              {
                              Nunmerateur__BorneInferieure=Nunmerateur__MedianteDeFarey;
                              Denominateur_BorneInferieure=Denominateur_MedianteDeFarey;
                              }
                    }

          printf("iterations=%d    x=%.16f     approximation=%.16f = %ld/%ld\n"
                ,N
                ,x
                ,(double)Nunmerateur__MedianteDeFarey/(double)Denominateur_MedianteDeFarey
                ,Nunmerateur__MedianteDeFarey
                ,Denominateur_MedianteDeFarey
                 );
          }



Copyright © Jean-François Colonna, 2021-2023.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2021-2023.