#include <stdio.h>
#include <math.h>
#ifndef M_PI
#define M_PI (4*atan(1.0))
#endif
double sqr(double x) { return x*x; } // просто возведение в квадрат
double sinus(double x);
double cosinus(double x);
double sinus(double x) {
if(fabs(x
) < 2.45E-5) { // (2.45E-5)²/6 ≈ 1E-10 return x;
} else {
return 2*sinus(x/2)*cosinus(x/2); // формула синуса двойного угла
}
}
double cosinus(double x) {
if(fabs(x
) < 1.4E-5) { // (1.4E-5)²/2 ≈ 1E-10 return 1.0;
} else {
return sqr
(cos(x
/2)) - sqr
(sin(x
/2)); // формула косинуса двойного угла }
}
int main() {
printf("sin(π/6) = %f\n", sinus
(M_PI
/6)); printf("cos(π/3) = %f\n", cosinus
(M_PI
/3)); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgojaWZuZGVmIE1fUEkKI2RlZmluZSBNX1BJICg0KmF0YW4oMS4wKSkKI2VuZGlmCgpkb3VibGUgc3FyKGRvdWJsZSB4KSB7IHJldHVybiB4Kng7IH0gLy8g0L/RgNC+0YHRgtC+INCy0L7Qt9Cy0LXQtNC10L3QuNC1INCyINC60LLQsNC00YDQsNGCCgpkb3VibGUgc2ludXMoZG91YmxlIHgpOwpkb3VibGUgY29zaW51cyhkb3VibGUgeCk7Cgpkb3VibGUgc2ludXMoZG91YmxlIHgpIHsKICAgIGlmKGZhYnMoeCkgPCAyLjQ1RS01KSB7IC8vICgyLjQ1RS01KcKyLzYg4omIIDFFLTEwCiAgICAgICAgcmV0dXJuIHg7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAyKnNpbnVzKHgvMikqY29zaW51cyh4LzIpOyAvLyDRhNC+0YDQvNGD0LvQsCDRgdC40L3Rg9GB0LAg0LTQstC+0LnQvdC+0LPQviDRg9Cz0LvQsAogICAgfQp9Cgpkb3VibGUgY29zaW51cyhkb3VibGUgeCkgewogICAgaWYoZmFicyh4KSA8IDEuNEUtNSkgeyAvLyAoMS40RS01KcKyLzIg4omIIDFFLTEwCiAgICAgICAgcmV0dXJuIDEuMDsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHNxcihjb3MoeC8yKSkgLSBzcXIoc2luKHgvMikpOyAvLyDRhNC+0YDQvNGD0LvQsCDQutC+0YHQuNC90YPRgdCwINC00LLQvtC50L3QvtCz0L4g0YPQs9C70LAKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBwcmludGYoInNpbijPgC82KSA9ICVmXG4iLCBzaW51cyhNX1BJLzYpKTsKICAgIHByaW50ZigiY29zKM+ALzMpID0gJWZcbiIsIGNvc2ludXMoTV9QSS8zKSk7CiAgICByZXR1cm4gMDsKfQ==