#include <stdio.h>
#include <math.h>

int	i,j,k,l,m,bt;
char	s[24],ss[3],tt[2];
double	p[12],v[11],tg,xt,zz;

main(){
	for(i=0;i<9;i++) p[i]=1.0/pow(2.0,(1.0/12.0)*(double)(9-i));
	p[9]=1.0;
	for(i=10;i<12;i++) p[i]=pow(2.0,(1.0/12.0)*(double)(i-9));
	v[0]=0.03125; v[1]=0.0625; v[2]=0.125; v[3]=0.25;
	v[4]=0.5; v[5]=1.0; v[6]=2.0; v[7]=4.0; v[8]=8.0;
	v[9]=16.0; v[10]=32.0;
	strcpy(s,"C C#D EbE F F#G G#A BbB ");
	ss[2]=0; tt[0]=0x25;  tt[1]=0;

	bt=8; xt=400000.0;
	calc_2();
	bt=9; xt=800000.0;
	calc_3();
	bt=10; xt=1800000.0;
	calc_3();
	bt=11; xt=3500000.0;
	calc_3();
	bt=12; xt=7000000.0;
	calc_3();
}

calc_2(){
	printf("\n\nDiv. Data = %dbit : Standard X'tal Freq. = %f Hz",bt,xt);
	for(j=-1;j<10;j++){
		for(i=0;i<12;i++){
			k=12*(j+1)+i;
			if((k>92)&&(k<105)){
				ss[0]=s[i*2]; ss[1]=s[i*2+1];
				printf("\n     %s%2d  %3d  [%02x]",ss,j,k,k);
				tg=440.0*v[j+1]*p[i];
				printf("  %9.3fHz ",tg);
				l=(int)(xt/tg);
				printf("  data= %02x",l);
				zz=(xt/(double)l - tg)/tg*100.0;
				printf(" (%5.3f%s)",zz,tt);
				m=l+1;
				printf("  data= %02x",m);
				zz=(tg - xt/(double)m)/tg*100.0;
				printf(" (%5.3f%s)",zz,tt);
			}
		}
	}
}

calc_3(){
	printf("\n\nDiv. Data = %dbit : Standard X'tal Freq. = %f Hz",bt,xt);
	for(j=-1;j<10;j++){
		for(i=0;i<12;i++){
			k=12*(j+1)+i;
			if((k>92)&&(k<105)){
				ss[0]=s[i*2]; ss[1]=s[i*2+1];
				printf("\n     %s%2d  %3d  [%02x]",ss,j,k,k);
				tg=440.0*v[j+1]*p[i];
				printf("  %9.3fHz ",tg);
				l=(int)(xt/tg);
				printf("  data= %03x",l);
				zz=(xt/(double)l - tg)/tg*100.0;
				printf(" (%5.3f%s)",zz,tt);
				m=l+1;
				printf("  data= %03x",m);
				zz=(tg - xt/(double)m)/tg*100.0;
				printf(" (%5.3f%s)",zz,tt);
			}
		}
	}
}

