fork(3) download
  1. # include <stdio.h>
  2.  
  3. int m, mm1;
  4. double mf, mf0;
  5. double mf1, mf2;
  6.  
  7. double qc( int f , int t ){
  8. int s[4], z;
  9. z = s[3]=(( s[2]=(( s[1]=( s[0]=0 )+t )*f+t)&mm1 )*f+t)&mm1;
  10. double dd[3]={0,0,0};
  11. do {
  12. double w=(( s[0]=s[1] )+0.5)*mf ;
  13. double x=(( s[1]=s[2] )+0.5)*mf ;
  14. double y=(( s[2]=s[3] )+0.5)*mf ;
  15. double z=(( s[3]=(s[3]*f+t)&mm1 )+0.5)*mf ;
  16. double t = 11*z - 18*y + 9*x - 2*w;
  17. dd[0] += ( t<0 ? -t : t );
  18. t = 2*z - 5*y + 4*x - w;
  19. dd[1] += ( t<0 ? -t : t );
  20. t = z - 3*y + 3*x - w;
  21. dd[2] += ( t<0 ? -t : t );
  22. } while( s[3]-z );
  23. double p = dd[0]*mf0;
  24. dd[0] = p > 1 ? 2-p : p ;
  25. p = dd[1]*mf1 ;
  26. dd[1] = p > 1 ? 2-p : p ;
  27. p = dd[2]*mf2 ;
  28. dd[2] = p > 1 ? 2-p : p ;
  29. dd[0] = ( dd[0] < dd[1] ? dd[0] : dd[1] ) ;
  30. return dd[0] < dd[2] ? dd[0] : dd[2] ;
  31. }
  32.  
  33. int main(void) {
  34. int b;
  35. for( b=3 ; b<=8 ; b++ ){
  36. int f, t, bc , bf[99], bt[99];
  37. double q, bq=0;
  38. mm1 = ( m=1<<b )-1;
  39. mf = 1./m;
  40. mf0 = mf/5.4534 ;
  41. mf1 = mf/1.59917 ;
  42. mf2 = mf/1.05185 ;
  43. for( f=1 ; f<m ; f+=4 ){
  44. for( t=1 ; t<m ; t+=2 ){
  45. q = (1.0/(1LL<<40))*(long long)(qc(f,t)*(1LL<<40));
  46. if( q >= bq ){
  47. if( q > bq ){
  48. bc = 0;
  49. bq = q;
  50. }
  51. bf[bc] = f;
  52. bt[bc++] = t;
  53. }
  54. }
  55. }
  56. printf("Bits=%i Quality=%.2f%%\n",b,bq*100);
  57. for( f=0 ; f<bc ; f++ )
  58. printf("F=%i T=%i\n",bf[f],bt[f]);
  59. }
  60. return 0;
  61. }
  62.  
Success #stdin #stdout 0.03s 5436KB
stdin
Standard input is empty
stdout
Bits=3 Quality=71.64%
F=5 T=5
F=5 T=7
Bits=4 Quality=89.98%
F=9 T=3
F=9 T=5
Bits=5 Quality=98.99%
F=29 T=5
F=29 T=23
Bits=6 Quality=99.15%
F=37 T=3
F=37 T=33
Bits=7 Quality=99.85%
F=21 T=49
F=21 T=99
F=101 T=49
F=101 T=51
Bits=8 Quality=99.96%
F=149 T=63
F=149 T=85