fork download
  1. #include <cstdio>
  2. #include <cmath>
  3.  
  4. void f(
  5. float phi,
  6. float omega,
  7. float kappa,
  8. unsigned int n)
  9. {
  10. float
  11. c=std::cos(phi),
  12. s=std::sin(phi),
  13. a=std::cos(omega+0.5f*kappa),
  14. b=std::sin(omega+0.5f*kappa),
  15. u=std::cos(kappa),
  16. v=std::sin(kappa);
  17. float c0,s0,a0,b0,u0,v0;
  18.  
  19. float d=0.0f;
  20.  
  21. for(unsigned int i=0;i<n;++i)
  22. {
  23. c0=c;
  24. s0=s;
  25. a0=a;
  26. b0=b;
  27. c=a0*c0-b0*s0;
  28. s=a0*s0+b0*c0;
  29. a=u*a0-v*b0;
  30. b=v*a0+u*b0;
  31. if(i%64==0)
  32. {
  33. float n=1.5f-0.5f*(c*c+s*s);
  34. c*=n;
  35. s*=n;
  36. }
  37. float e=std::fabs(std::cos(phi+omega*float(i)+0.5f*kappa*float(i*i))-c0);
  38. if(d<e) d=e;
  39. }
  40. printf("%f\n",d);
  41. }
  42.  
  43. int main()
  44. {
  45. float dt=1.0f/44100.0f;
  46. f(1.0f,1000.0f*dt,1000.0f*dt*dt,10000);
  47. f(0.0f,1000.0f*dt,1000.0f*dt*dt,10000);
  48. f(-2.0f,100.0f*dt,1000.0f*dt*dt,10000);
  49. f(-5.0f,10000.0f*dt,10.0f*dt*dt,10000);
  50. f(-5.0f,100.0f*dt,100.0f*dt*dt,10000);
  51. f(-5.0f,10.0f*dt,1000.0f*dt*dt,10000);
  52. f(-5.0f,1000.0f*dt,1.0f*dt*dt,10000);
  53. f(1.0f,440.0f*dt,0.0f*dt*dt,10000);
  54. return 0;
  55. }
Success #stdin #stdout 0.02s 3140KB
stdin
Standard input is empty
stdout
0.015147
0.014906
0.005380
0.255586
0.001793
0.002093
0.025641
0.000005