#include <iostream>
#include <cmath>
int fact( int i )
{
int ret = 1;
while( i )
{
ret *= i--;
}
return ret;
}
double mycos( double x )
{
const double eps = 1e-5;
double res = 0;
int i = 0;
double term = 0;
do
{
term = std::pow( x, i*2 ) / fact( 2*i );
term = i & 1 ? -term : term;
res += term;
//std::cout << term << std::endl;
i++;
}
while( std::abs(term) > eps );
return res;
}
int main() {
double x = 0.5;
std::cout << "mycos( " << x << " ) = " << mycos(x) << std::endl;
std::cout << "std::cos( " << x << " ) = " << std::cos(x) << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CgppbnQgZmFjdCggaW50IGkgKQp7CglpbnQgcmV0ID0gMTsKCXdoaWxlKCBpICkKCXsKCQlyZXQgKj0gaS0tOwoJfQoJcmV0dXJuIHJldDsKfQoKZG91YmxlIG15Y29zKCBkb3VibGUgeCApCnsKCWNvbnN0IGRvdWJsZSBlcHMgPSAxZS01OwoJZG91YmxlIHJlcyA9IDA7CglpbnQgaSA9IDA7Cglkb3VibGUgdGVybSA9IDA7CglkbwoJewoJCXRlcm0gPSBzdGQ6OnBvdyggeCwgaSoyICkgLyBmYWN0KCAyKmkgKTsKCQl0ZXJtID0gaSAmIDEgPyAtdGVybSA6IHRlcm07CgkJcmVzICs9IHRlcm07CgkJLy9zdGQ6OmNvdXQgPDwgdGVybSA8PCBzdGQ6OmVuZGw7CgkJaSsrOwoJfQoJd2hpbGUoIHN0ZDo6YWJzKHRlcm0pID4gZXBzICk7CglyZXR1cm4gcmVzOwp9CgppbnQgbWFpbigpIHsKCQoJZG91YmxlIHggPSAwLjU7CglzdGQ6OmNvdXQgPDwgIm15Y29zKCAiIDw8IHggPDwgIiApID0gIiA8PCBteWNvcyh4KSA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgInN0ZDo6Y29zKCAiIDw8IHggPDwgIiApID0gIiA8PCBzdGQ6OmNvcyh4KSA8PCBzdGQ6OmVuZGw7CgoJcmV0dXJuIDA7Cn0=