/*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C C
C CHECK RESULTS GIVEN BY FAREY SERIES ALGORITHM C
C 06/11/07 (DKC) C
C C
C This program checks the results given by the algorithm for generating the C
C fractions in a Farey series after two given successive fractions in the C
C series. (This algorithm uses the theorem that if h/k and h'/k' are C
C successive fractions in a Farey series and k' > k, then the fraction in C
C the series after the fractions corresponding to the points on the line C
C between (h,k) and (h',k') is (h' - h)/(k' - k).) C
C C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/
#include <stdio.h>
#include <math.h>
unsigned int lagrange(unsigned int N, unsigned int *R);
void haros(unsigned int N, unsigned int M, unsigned int *R,
unsigned int OLDNUM, unsigned int OLDDEN, unsigned int NUM,
unsigned int DEN);
void main() {
unsigned int N,R[30000],S[30000],NUM,DEN,OLDNUM,OLDDEN,MAXN;
unsigned int L,M,I,J;
//
// ORDER OF FAREY SERIES
//
MAXN=200;
/***************/
/* BEGIN LOOP */
/***************/
for (N=2; N<=MAXN; N++) {
//
// GENERATE FAREY SERIES (USING HAROS' THEOREM AND LAGRANGE'S ALGORITHM)
//
L=lagrange(N,S);
printf("order=%d, size=%d \n",N,L);
//
// GENERATE FAREY SERIES USING ALGORITHM AND COMPARE RESULTS
//
for (J=0; J<L-2; J++) {
M=J;
OLDNUM=S[2*J];
OLDDEN=S[2*J+1];
NUM=S[2*J+2];
DEN=S[2*J+3];
for (I=J; I<L; I++) {
R[2*I]=0;
R[2*I+1]=0;
}
haros(N,M,R,OLDNUM,OLDDEN,NUM,DEN);
for (I=J; I<L; I++) {
if((R[2*I]!=S[2*I])||(R[2*I+1]!=S[2*I+1])) {
printf("error: I=%d, NUMS=%d, %d \n",I,R[2*I], S[2*I]);
printf("error: I=%d, DENS=%d, %d \n",I,R[2*I+1], S[2*I+1]);
goto L400;
}
}
}
}
/***************/
/* END LOOP */
/***************/
L400: return;
}