/*************************************************************************************************************************************/ /* */ /* 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 ); }