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

char *name = "(+ x (- (tan (+ y z)) (tan a)))";

double f_if(float x, float y, float z, float a) {
        float r11129 = x;
        float r11130 = y;
        float r11131 = z;
        float r11132 = r11130 + r11131;
        float r11133 = tan(r11132);
        float r11134 = a;
        float r11135 = tan(r11134);
        float r11136 = r11133 - r11135;
        float r11137 = r11129 + r11136;
        return r11137;
}

double f_id(double x, double y, double z, double a) {
        double r11138 = x;
        double r11139 = y;
        double r11140 = z;
        double r11141 = r11139 + r11140;
        double r11142 = tan(r11141);
        double r11143 = a;
        double r11144 = tan(r11143);
        double r11145 = r11142 - r11144;
        double r11146 = r11138 + r11145;
        return r11146;
}


double f_of(float x, float y, float z, float a) {
        float r11147 = x;
        float r11148 = y;
        float r11149 = tan(r11148);
        float r11150 = z;
        float r11151 = tan(r11150);
        float r11152 = r11149 + r11151;
        float r11153 = 1;
        float r11154 = sin(r11148);
        float r11155 = sin(r11150);
        float r11156 = r11154 * r11155;
        float r11157 = cos(r11148);
        float r11158 = cos(r11150);
        float r11159 = r11157 * r11158;
        float r11160 = r11156 / r11159;
        float r11161 = r11153 - r11160;
        float r11162 = r11152 / r11161;
        float r11163 = a;
        float r11164 = tan(r11163);
        float r11165 = r11162 - r11164;
        float r11166 = r11147 + r11165;
        return r11166;
}

double f_od(double x, double y, double z, double a) {
        double r11167 = x;
        double r11168 = y;
        double r11169 = tan(r11168);
        double r11170 = z;
        double r11171 = tan(r11170);
        double r11172 = r11169 + r11171;
        double r11173 = 1;
        double r11174 = sin(r11168);
        double r11175 = sin(r11170);
        double r11176 = r11174 * r11175;
        double r11177 = cos(r11168);
        double r11178 = cos(r11170);
        double r11179 = r11177 * r11178;
        double r11180 = r11176 / r11179;
        double r11181 = r11173 - r11180;
        double r11182 = r11172 / r11181;
        double r11183 = a;
        double r11184 = tan(r11183);
        double r11185 = r11182 - r11184;
        double r11186 = r11167 + r11185;
        return r11186;
}

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 r11187, r11188, r11189, r11190, r11191, r11192, r11193, r11194, r11195;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11187);
        mpfr_init(r11188);
        mpfr_init(r11189);
        mpfr_init(r11190);
        mpfr_init(r11191);
        mpfr_init(r11192);
        mpfr_init(r11193);
        mpfr_init(r11194);
        mpfr_init(r11195);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r11187, x, MPFR_RNDN);
        mpfr_set_d(r11188, y, MPFR_RNDN);
        mpfr_set_d(r11189, z, MPFR_RNDN);
        mpfr_add(r11190, r11188, r11189, MPFR_RNDN);
        mpfr_tan(r11191, r11190, MPFR_RNDN);
        mpfr_set_d(r11192, a, MPFR_RNDN);
        mpfr_tan(r11193, r11192, MPFR_RNDN);
        mpfr_sub(r11194, r11191, r11193, MPFR_RNDN);
        mpfr_add(r11195, r11187, r11194, MPFR_RNDN);
        return mpfr_get_d(r11195, MPFR_RNDN);
}

static mpfr_t r11196, r11197, r11198, r11199, r11200, r11201, r11202, r11203, r11204, r11205, r11206, r11207, r11208, r11209, r11210, r11211, r11212, r11213, r11214, r11215;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11196);
        mpfr_init(r11197);
        mpfr_init(r11198);
        mpfr_init(r11199);
        mpfr_init(r11200);
        mpfr_init(r11201);
        mpfr_init_set_str(r11202, "1", 10, MPFR_RNDN);
        mpfr_init(r11203);
        mpfr_init(r11204);
        mpfr_init(r11205);
        mpfr_init(r11206);
        mpfr_init(r11207);
        mpfr_init(r11208);
        mpfr_init(r11209);
        mpfr_init(r11210);
        mpfr_init(r11211);
        mpfr_init(r11212);
        mpfr_init(r11213);
        mpfr_init(r11214);
        mpfr_init(r11215);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r11196, x, MPFR_RNDN);
        mpfr_set_d(r11197, y, MPFR_RNDN);
        mpfr_tan(r11198, r11197, MPFR_RNDN);
        mpfr_set_d(r11199, z, MPFR_RNDN);
        mpfr_tan(r11200, r11199, MPFR_RNDN);
        mpfr_add(r11201, r11198, r11200, MPFR_RNDN);
        ;
        mpfr_sin(r11203, r11197, MPFR_RNDN);
        mpfr_sin(r11204, r11199, MPFR_RNDN);
        mpfr_mul(r11205, r11203, r11204, MPFR_RNDN);
        mpfr_cos(r11206, r11197, MPFR_RNDN);
        mpfr_cos(r11207, r11199, MPFR_RNDN);
        mpfr_mul(r11208, r11206, r11207, MPFR_RNDN);
        mpfr_div(r11209, r11205, r11208, MPFR_RNDN);
        mpfr_sub(r11210, r11202, r11209, MPFR_RNDN);
        mpfr_div(r11211, r11201, r11210, MPFR_RNDN);
        mpfr_set_d(r11212, a, MPFR_RNDN);
        mpfr_tan(r11213, r11212, MPFR_RNDN);
        mpfr_sub(r11214, r11211, r11213, MPFR_RNDN);
        mpfr_add(r11215, r11196, r11214, MPFR_RNDN);
        return mpfr_get_d(r11215, MPFR_RNDN);
}

static mpfr_t r11216, r11217, r11218, r11219, r11220, r11221, r11222, r11223, r11224, r11225, r11226, r11227, r11228, r11229, r11230, r11231, r11232, r11233, r11234, r11235;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11216);
        mpfr_init(r11217);
        mpfr_init(r11218);
        mpfr_init(r11219);
        mpfr_init(r11220);
        mpfr_init(r11221);
        mpfr_init_set_str(r11222, "1", 10, MPFR_RNDN);
        mpfr_init(r11223);
        mpfr_init(r11224);
        mpfr_init(r11225);
        mpfr_init(r11226);
        mpfr_init(r11227);
        mpfr_init(r11228);
        mpfr_init(r11229);
        mpfr_init(r11230);
        mpfr_init(r11231);
        mpfr_init(r11232);
        mpfr_init(r11233);
        mpfr_init(r11234);
        mpfr_init(r11235);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r11216, x, MPFR_RNDN);
        mpfr_set_d(r11217, y, MPFR_RNDN);
        mpfr_tan(r11218, r11217, MPFR_RNDN);
        mpfr_set_d(r11219, z, MPFR_RNDN);
        mpfr_tan(r11220, r11219, MPFR_RNDN);
        mpfr_add(r11221, r11218, r11220, MPFR_RNDN);
        ;
        mpfr_sin(r11223, r11217, MPFR_RNDN);
        mpfr_sin(r11224, r11219, MPFR_RNDN);
        mpfr_mul(r11225, r11223, r11224, MPFR_RNDN);
        mpfr_cos(r11226, r11217, MPFR_RNDN);
        mpfr_cos(r11227, r11219, MPFR_RNDN);
        mpfr_mul(r11228, r11226, r11227, MPFR_RNDN);
        mpfr_div(r11229, r11225, r11228, MPFR_RNDN);
        mpfr_sub(r11230, r11222, r11229, MPFR_RNDN);
        mpfr_div(r11231, r11221, r11230, MPFR_RNDN);
        mpfr_set_d(r11232, a, MPFR_RNDN);
        mpfr_tan(r11233, r11232, MPFR_RNDN);
        mpfr_sub(r11234, r11231, r11233, MPFR_RNDN);
        mpfr_add(r11235, r11216, r11234, MPFR_RNDN);
        return mpfr_get_d(r11235, MPFR_RNDN);
}

