#include <cstdio>
#include <cmath>
void f(
float phi,
float omega,
float kappa,
unsigned int n)
{
float
c=std::cos(phi),
s=std::sin(phi),
a=std::cos(omega+0.5f*kappa),
b=std::sin(omega+0.5f*kappa),
u=std::cos(kappa),
v=std::sin(kappa);
float c0,s0,a0,b0,u0,v0;
float d=0.0f;
for(unsigned int i=0;i<n;++i)
{
c0=c;
s0=s;
a0=a;
b0=b;
c=a0*c0-b0*s0;
s=a0*s0+b0*c0;
a=u*a0-v*b0;
b=v*a0+u*b0;
if(i%64==0)
{
float n=1.5f-0.5f*(c*c+s*s);
c*=n;
s*=n;
}
float e=std::fabs(std::cos(phi+omega*float(i)+0.5f*kappa*float(i*i))-c0);
if(d<e) d=e;
}
printf("%f\n",d);
}
int main()
{
float dt=1.0f/44100.0f;
f(1.0f,1000.0f*dt,1000.0f*dt*dt,10000);
f(0.0f,1000.0f*dt,1000.0f*dt*dt,10000);
f(-2.0f,100.0f*dt,1000.0f*dt*dt,10000);
f(-5.0f,10000.0f*dt,10.0f*dt*dt,10000);
f(-5.0f,100.0f*dt,100.0f*dt*dt,10000);
f(-5.0f,10.0f*dt,1000.0f*dt*dt,10000);
f(-5.0f,1000.0f*dt,1.0f*dt*dt,10000);
f(1.0f,440.0f*dt,0.0f*dt*dt,10000);
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNtYXRoPgoKdm9pZCBmKAoJZmxvYXQgcGhpLAoJZmxvYXQgb21lZ2EsCglmbG9hdCBrYXBwYSwKCXVuc2lnbmVkIGludCBuKQp7CglmbG9hdAoJCWM9c3RkOjpjb3MocGhpKSwKCQlzPXN0ZDo6c2luKHBoaSksCgkJYT1zdGQ6OmNvcyhvbWVnYSswLjVmKmthcHBhKSwKCQliPXN0ZDo6c2luKG9tZWdhKzAuNWYqa2FwcGEpLAoJCXU9c3RkOjpjb3Moa2FwcGEpLAoJCXY9c3RkOjpzaW4oa2FwcGEpOwoJZmxvYXQgYzAsczAsYTAsYjAsdTAsdjA7CgoJZmxvYXQgZD0wLjBmOwoKCWZvcih1bnNpZ25lZCBpbnQgaT0wO2k8bjsrK2kpCgl7CgkJYzA9YzsKCQlzMD1zOwoJCWEwPWE7CgkJYjA9YjsKCQljPWEwKmMwLWIwKnMwOwoJCXM9YTAqczArYjAqYzA7CgkJYT11KmEwLXYqYjA7CgkJYj12KmEwK3UqYjA7CgkJaWYoaSU2ND09MCkKCQl7CgkJCWZsb2F0IG49MS41Zi0wLjVmKihjKmMrcypzKTsKCQkJYyo9bjsKCQkJcyo9bjsKCQl9CgkJZmxvYXQgZT1zdGQ6OmZhYnMoc3RkOjpjb3MocGhpK29tZWdhKmZsb2F0KGkpKzAuNWYqa2FwcGEqZmxvYXQoaSppKSktYzApOwoJCWlmKGQ8ZSkJZD1lOwoJfQoJcHJpbnRmKCIlZlxuIixkKTsKfQoKaW50IG1haW4oKQp7CglmbG9hdCBkdD0xLjBmLzQ0MTAwLjBmOwoJZigxLjBmLDEwMDAuMGYqZHQsMTAwMC4wZipkdCpkdCwxMDAwMCk7CglmKDAuMGYsMTAwMC4wZipkdCwxMDAwLjBmKmR0KmR0LDEwMDAwKTsKCWYoLTIuMGYsMTAwLjBmKmR0LDEwMDAuMGYqZHQqZHQsMTAwMDApOwoJZigtNS4wZiwxMDAwMC4wZipkdCwxMC4wZipkdCpkdCwxMDAwMCk7CglmKC01LjBmLDEwMC4wZipkdCwxMDAuMGYqZHQqZHQsMTAwMDApOwoJZigtNS4wZiwxMC4wZipkdCwxMDAwLjBmKmR0KmR0LDEwMDAwKTsKCWYoLTUuMGYsMTAwMC4wZipkdCwxLjBmKmR0KmR0LDEwMDAwKTsKCWYoMS4wZiw0NDAuMGYqZHQsMC4wZipkdCpkdCwxMDAwMCk7CglyZXR1cm4gMDsKfQ==