#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "r*sin(b)/cos(a+b), A";

double f_if(float r, float a, float b) {
        float r8177 = r;
        float r8178 = b;
        float r8179 = sin(r8178);
        float r8180 = r8177 * r8179;
        float r8181 = a;
        float r8182 = r8181 + r8178;
        float r8183 = cos(r8182);
        float r8184 = r8180 / r8183;
        return r8184;
}

double f_id(double r, double a, double b) {
        double r8185 = r;
        double r8186 = b;
        double r8187 = sin(r8186);
        double r8188 = r8185 * r8187;
        double r8189 = a;
        double r8190 = r8189 + r8186;
        double r8191 = cos(r8190);
        double r8192 = r8188 / r8191;
        return r8192;
}


double f_of(float r, float a, float b) {
        float r8193 = r;
        float r8194 = b;
        float r8195 = sin(r8194);
        float r8196 = r8193 * r8195;
        float r8197 = a;
        float r8198 = cos(r8197);
        float r8199 = cos(r8194);
        float r8200 = r8198 * r8199;
        float r8201 = sin(r8197);
        float r8202 = r8195 * r8201;
        float r8203 = 3;
        float r8204 = pow(r8202, r8203);
        float r8205 = cbrt(r8204);
        float r8206 = r8200 - r8205;
        float r8207 = r8196 / r8206;
        return r8207;
}

double f_od(double r, double a, double b) {
        double r8208 = r;
        double r8209 = b;
        double r8210 = sin(r8209);
        double r8211 = r8208 * r8210;
        double r8212 = a;
        double r8213 = cos(r8212);
        double r8214 = cos(r8209);
        double r8215 = r8213 * r8214;
        double r8216 = sin(r8212);
        double r8217 = r8210 * r8216;
        double r8218 = 3;
        double r8219 = pow(r8217, r8218);
        double r8220 = cbrt(r8219);
        double r8221 = r8215 - r8220;
        double r8222 = r8211 / r8221;
        return r8222;
}

void mpfr_fmod2(mpfr_t r, mpfr_t n, mpfr_t d, mpfr_rnd_t rmd) {
        mpfr_fmod(r, n, d, rmd);
        if (mpfr_cmp_ui(r, 0) < 0) mpfr_add(r, r, d, rmd);
}


static mpfr_t r8223, r8224, r8225, r8226, r8227, r8228, r8229, r8230;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8223);
        mpfr_init(r8224);
        mpfr_init(r8225);
        mpfr_init(r8226);
        mpfr_init(r8227);
        mpfr_init(r8228);
        mpfr_init(r8229);
        mpfr_init(r8230);
}

double f_im(double r, double a, double b) {
        mpfr_set_d(r8223, r, MPFR_RNDN);
        mpfr_set_d(r8224, b, MPFR_RNDN);
        mpfr_sin(r8225, r8224, MPFR_RNDN);
        mpfr_mul(r8226, r8223, r8225, MPFR_RNDN);
        mpfr_set_d(r8227, a, MPFR_RNDN);
        mpfr_add(r8228, r8227, r8224, MPFR_RNDN);
        mpfr_cos(r8229, r8228, MPFR_RNDN);
        mpfr_div(r8230, r8226, r8229, MPFR_RNDN);
        return mpfr_get_d(r8230, MPFR_RNDN);
}

static mpfr_t r8231, r8232, r8233, r8234, r8235, r8236, r8237, r8238, r8239, r8240, r8241, r8242, r8243, r8244, r8245;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8231);
        mpfr_init(r8232);
        mpfr_init(r8233);
        mpfr_init(r8234);
        mpfr_init(r8235);
        mpfr_init(r8236);
        mpfr_init(r8237);
        mpfr_init(r8238);
        mpfr_init(r8239);
        mpfr_init(r8240);
        mpfr_init_set_str(r8241, "3", 10, MPFR_RNDN);
        mpfr_init(r8242);
        mpfr_init(r8243);
        mpfr_init(r8244);
        mpfr_init(r8245);
}

double f_fm(double r, double a, double b) {
        mpfr_set_d(r8231, r, MPFR_RNDN);
        mpfr_set_d(r8232, b, MPFR_RNDN);
        mpfr_sin(r8233, r8232, MPFR_RNDN);
        mpfr_mul(r8234, r8231, r8233, MPFR_RNDN);
        mpfr_set_d(r8235, a, MPFR_RNDN);
        mpfr_cos(r8236, r8235, MPFR_RNDN);
        mpfr_cos(r8237, r8232, MPFR_RNDN);
        mpfr_mul(r8238, r8236, r8237, MPFR_RNDN);
        mpfr_sin(r8239, r8235, MPFR_RNDN);
        mpfr_mul(r8240, r8233, r8239, MPFR_RNDN);
        ;
        mpfr_pow(r8242, r8240, r8241, MPFR_RNDN);
        mpfr_cbrt(r8243, r8242, MPFR_RNDN);
        mpfr_sub(r8244, r8238, r8243, MPFR_RNDN);
        mpfr_div(r8245, r8234, r8244, MPFR_RNDN);
        return mpfr_get_d(r8245, MPFR_RNDN);
}

static mpfr_t r8246, r8247, r8248, r8249, r8250, r8251, r8252, r8253, r8254, r8255, r8256, r8257, r8258, r8259, r8260;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8246);
        mpfr_init(r8247);
        mpfr_init(r8248);
        mpfr_init(r8249);
        mpfr_init(r8250);
        mpfr_init(r8251);
        mpfr_init(r8252);
        mpfr_init(r8253);
        mpfr_init(r8254);
        mpfr_init(r8255);
        mpfr_init_set_str(r8256, "3", 10, MPFR_RNDN);
        mpfr_init(r8257);
        mpfr_init(r8258);
        mpfr_init(r8259);
        mpfr_init(r8260);
}

double f_dm(double r, double a, double b) {
        mpfr_set_d(r8246, r, MPFR_RNDN);
        mpfr_set_d(r8247, b, MPFR_RNDN);
        mpfr_sin(r8248, r8247, MPFR_RNDN);
        mpfr_mul(r8249, r8246, r8248, MPFR_RNDN);
        mpfr_set_d(r8250, a, MPFR_RNDN);
        mpfr_cos(r8251, r8250, MPFR_RNDN);
        mpfr_cos(r8252, r8247, MPFR_RNDN);
        mpfr_mul(r8253, r8251, r8252, MPFR_RNDN);
        mpfr_sin(r8254, r8250, MPFR_RNDN);
        mpfr_mul(r8255, r8248, r8254, MPFR_RNDN);
        ;
        mpfr_pow(r8257, r8255, r8256, MPFR_RNDN);
        mpfr_cbrt(r8258, r8257, MPFR_RNDN);
        mpfr_sub(r8259, r8253, r8258, MPFR_RNDN);
        mpfr_div(r8260, r8249, r8259, MPFR_RNDN);
        return mpfr_get_d(r8260, MPFR_RNDN);
}

