//cordic
#include <stdio.h>
#include <stdlib.h>
int delta(int ep)
{
return ep>0? 1:-1;
}
void cordic(float *x,float *y,int* ep,int i)
{
float xp=*x;
float yp=*y;
float e=*ep;
float xt,yt;
xt
=xp
-delta
(ep
)*yp
*pow(2,-i
); yt
=delta
(ep
)*xp
*pow(2,-i
)+yp
; *x=xt;
*y=yt;
}
int main()
{
float alphai[15];
for(int i=0;i<15;i++)
{
alphai
[i
]=atan(pow(2,-i
))*180*7/22; //printf("%f\n",alphai[i]);
}
int x=0.607;
int y=0;
int ep=50;
for(int i=0;i<16;i++)
{
cordic(&x,&y,&ep,i);
ep=ep-delta(ep)*alphai[i];
}
}
Ly9jb3JkaWMKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KaW50IGRlbHRhKGludCBlcCkKewoJcmV0dXJuIGVwPjA/IDE6LTE7Cn0Kdm9pZCBjb3JkaWMoZmxvYXQgKngsZmxvYXQgKnksaW50KiBlcCxpbnQgaSkKewoJZmxvYXQgeHA9Kng7CglmbG9hdCB5cD0qeTsKCWZsb2F0IGU9KmVwOwoJZmxvYXQgeHQseXQ7Cgl4dD14cC1kZWx0YShlcCkqeXAqcG93KDIsLWkpOwoJeXQ9ZGVsdGEoZXApKnhwKnBvdygyLC1pKSt5cDsKCSp4PXh0OwoJKnk9eXQ7Cgp9CmludCBtYWluKCkKewoJZmxvYXQgYWxwaGFpWzE1XTsKCWZvcihpbnQgaT0wO2k8MTU7aSsrKQoJewoJCWFscGhhaVtpXT1hdGFuKHBvdygyLC1pKSkqMTgwKjcvMjI7CgkJLy9wcmludGYoIiVmXG4iLGFscGhhaVtpXSk7Cgl9CglpbnQgeD0wLjYwNzsKCWludCB5PTA7CglpbnQgZXA9NTA7Cglmb3IoaW50IGk9MDtpPDE2O2krKykKCXsKCQljb3JkaWMoJngsJnksJmVwLGkpOwoJCXByaW50ZigiXG4lZCIsZGVsdGEoZXApKTsKCQllcD1lcC1kZWx0YShlcCkqYWxwaGFpW2ldOwoJCXByaW50ZigiJWZcbiIsZXApOwoJfQoJcHJpbnRmKCIlZiAlZiIseCx5KTsKfQo=