08/01/15 05:41:06
スレリンク(tech板:985番)
もっときれいな方法がありそうだが
#include <stdio.h>
#include <math.h>
typedef unsigned int uint;
int main( int argc, char ** args ){
uint a, b, ma, mb;
double dif = 4., l = 3., u = 4.;
for ( b = 1; b < (0xFFFFFFFF / 3); ++b ){
for ( a = (uint)(b * l - 1); a < (uint)( b * u + 1 ); ++a ){
if ( dif > fabs( M_PI - (double)a / b ) ) {
ma = a; mb = b;
dif = fabs( M_PI - (double)a / b );
l = M_PI - dif; u = M_PI + dif;
printf ( "a:%u, b:%u, a/b:%.20lf, dif:%.20lf\n", a, b, (double)a/b, dif );
}
}
}
printf ( "a:%u, b:%u, a/b:%.20lf, dif:%.20lf\n", ma, mb, (double)ma/mb, dif );
return 0;
}