- # include <stdio.h> 
-   
- int m, mm1; 
- double mf, mf0; 
- double mf1, mf2; 
-   
- double qc( int f , int t ){ 
- 	int s[4], z; 
- 	z = s[3]=(( s[2]=(( s[1]=( s[0]=0 )+t )*f+t)&mm1 )*f+t)&mm1; 
- 	double dd[3]={0,0,0}; 
- 	do { 
- 		double w=(( s[0]=s[1] )+0.5)*mf ; 
- 		double x=(( s[1]=s[2] )+0.5)*mf ; 
- 		double y=(( s[2]=s[3] )+0.5)*mf ; 
- 		double z=(( s[3]=(s[3]*f+t)&mm1 )+0.5)*mf ; 
- 		double t = 11*z - 18*y + 9*x - 2*w; 
- 		dd[0] += ( t<0 ? -t : t ); 
- 		t = 2*z - 5*y + 4*x - w; 
- 		dd[1] += ( t<0 ? -t : t ); 
- 		t = z - 3*y + 3*x - w; 
- 		dd[2] += ( t<0 ? -t : t ); 
- 	} while( s[3]-z ); 
- 	double p = dd[0]*mf0; 
- 	dd[0] = p > 1 ? 2-p : p ; 
- 	p = dd[1]*mf1 ; 
- 	dd[1] = p > 1 ? 2-p : p ; 
- 	p = dd[2]*mf2 ; 
- 	dd[2] = p > 1 ? 2-p : p ; 
- 	dd[0] = ( dd[0] < dd[1] ? dd[0] : dd[1] ) ; 
- 	return dd[0] < dd[2] ? dd[0] : dd[2] ; 
- } 
-   
- int main(void) { 
- 	int b; 
- 	for( b=3 ; b<=8 ; b++ ){ 
- 		int f, t, bc , bf[99], bt[99]; 
- 		double q, bq=0; 
- 		mm1 = ( m=1<<b )-1; 
- 		mf = 1./m; 
- 		mf0 = mf/5.4534 ; 
- 		mf1 = mf/1.59917 ; 
- 		mf2 = mf/1.05185 ; 
- 		for( f=1 ; f<m ; f+=4 ){ 
- 			for( t=1 ; t<m ; t+=2 ){ 
- 				q = (1.0/(1LL<<40))*(long long)(qc(f,t)*(1LL<<40)); 
- 				if( q >= bq ){ 
- 					if( q > bq ){ 
- 						bc = 0; 
- 						bq = q; 
- 					} 
- 					bf[bc] = f; 
- 					bt[bc++] = t; 
- 				} 
- 			} 
- 		} 
- 		printf("Bits=%i Quality=%.2f%%\n",- b ,- bq *100);
 
- 		for( f=0 ; f<bc ; f++ ) 
- 			printf("F=%i T=%i\n",- bf [- f ],- bt [- f ]);
 
- 	} 
- 	return 0; 
- } 
-   
				IyBpbmNsdWRlIDxzdGRpby5oPgoKaW50IG0sIG1tMTsKZG91YmxlIG1mLCBtZjA7CmRvdWJsZSBtZjEsIG1mMjsKCmRvdWJsZSBxYyggaW50IGYgLCBpbnQgdCApewoJaW50IHNbNF0sIHo7Cgl6ID0gc1szXT0oKCBzWzJdPSgoIHNbMV09KCBzWzBdPTAgKSt0ICkqZit0KSZtbTEgKSpmK3QpJm1tMTsKCWRvdWJsZSBkZFszXT17MCwwLDB9OwoJZG8gewoJCWRvdWJsZSB3PSgoIHNbMF09c1sxXSApKzAuNSkqbWYgOwoJCWRvdWJsZSB4PSgoIHNbMV09c1syXSApKzAuNSkqbWYgOwoJCWRvdWJsZSB5PSgoIHNbMl09c1szXSApKzAuNSkqbWYgOwoJCWRvdWJsZSB6PSgoIHNbM109KHNbM10qZit0KSZtbTEgKSswLjUpKm1mIDsKCQlkb3VibGUgdCA9IDExKnogLSAxOCp5ICsgOSp4IC0gMip3OwoJCWRkWzBdICs9ICggdDwwID8gLXQgOiB0ICk7CgkJdCA9IDIqeiAtIDUqeSArIDQqeCAtIHc7CgkJZGRbMV0gKz0gKCB0PDAgPyAtdCA6IHQgKTsKCQl0ID0geiAtIDMqeSArIDMqeCAtIHc7CgkJZGRbMl0gKz0gKCB0PDAgPyAtdCA6IHQgKTsKCX0gd2hpbGUoIHNbM10teiApOwoJZG91YmxlIHAgPSBkZFswXSptZjA7CglkZFswXSA9IHAgPiAxID8gMi1wIDogcCA7CglwID0gZGRbMV0qbWYxIDsKCWRkWzFdID0gcCA+IDEgPyAyLXAgOiBwIDsKCXAgPSBkZFsyXSptZjIgOwoJZGRbMl0gPSBwID4gMSA/IDItcCA6IHAgOwoJZGRbMF0gPSAoIGRkWzBdIDwgZGRbMV0gPyBkZFswXSA6IGRkWzFdICkgOwoJcmV0dXJuIGRkWzBdIDwgZGRbMl0gPyBkZFswXSA6IGRkWzJdIDsKfQoKaW50IG1haW4odm9pZCkgewoJaW50IGI7Cglmb3IoIGI9MyA7IGI8PTggOyBiKysgKXsKCQlpbnQgZiwgdCwgYmMgLCBiZls5OV0sIGJ0Wzk5XTsKCQlkb3VibGUgcSwgYnE9MDsKCQltbTEgPSAoIG09MTw8YiApLTE7CgkJbWYgPSAxLi9tOwoJCW1mMCA9IG1mLzUuNDUzNCA7CgkJbWYxID0gbWYvMS41OTkxNyA7CgkJbWYyID0gbWYvMS4wNTE4NSA7CgkJZm9yKCBmPTEgOyBmPG0gOyBmKz00ICl7CgkJCWZvciggdD0xIDsgdDxtIDsgdCs9MiApewoJCQkJcSA9ICgxLjAvKDFMTDw8NDApKSoobG9uZyBsb25nKShxYyhmLHQpKigxTEw8PDQwKSk7CgkJCQlpZiggcSA+PSBicSApewoJCQkJCWlmKCBxID4gYnEgKXsKCQkJCQkJYmMgPSAwOwoJCQkJCQlicSA9IHE7CgkJCQkJfQoJCQkJCWJmW2JjXSA9IGY7CgkJCQkJYnRbYmMrK10gPSB0OwoJCQkJfQoJCQl9CgkJfQoJCXByaW50ZigiQml0cz0laSBRdWFsaXR5PSUuMmYlJVxuIixiLGJxKjEwMCk7CgkJZm9yKCBmPTAgOyBmPGJjIDsgZisrICkKCQkJcHJpbnRmKCJGPSVpIFQ9JWlcbiIsYmZbZl0sYnRbZl0pOwoJfQoJcmV0dXJuIDA7Cn0K