#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 r11111 = x;
        float r11112 = y;
        float r11113 = z;
        float r11114 = r11112 + r11113;
        float r11115 = tan(r11114);
        float r11116 = a;
        float r11117 = tan(r11116);
        float r11118 = r11115 - r11117;
        float r11119 = r11111 + r11118;
        return r11119;
}

double f_id(double x, double y, double z, double a) {
        double r11120 = x;
        double r11121 = y;
        double r11122 = z;
        double r11123 = r11121 + r11122;
        double r11124 = tan(r11123);
        double r11125 = a;
        double r11126 = tan(r11125);
        double r11127 = r11124 - r11126;
        double r11128 = r11120 + r11127;
        return r11128;
}


double f_of(float x, float y, float z, float a) {
        float r11129 = y;
        float r11130 = tan(r11129);
        float r11131 = z;
        float r11132 = tan(r11131);
        float r11133 = r11130 + r11132;
        float r11134 = 1.0f;
        float r11135 = r11132 * r11130;
        float r11136 = sin(r11131);
        float r11137 = r11136 * r11130;
        float r11138 = r11137 * r11137;
        float r11139 = cos(r11131);
        float r11140 = r11139 * r11139;
        float r11141 = r11138 / r11140;
        float r11142 = r11135 * r11141;
        float r11143 = cbrt(r11142);
        float r11144 = r11134 - r11143;
        float r11145 = r11133 / r11144;
        float r11146 = a;
        float r11147 = tan(r11146);
        float r11148 = r11145 - r11147;
        float r11149 = x;
        float r11150 = r11148 + r11149;
        return r11150;
}

double f_od(double x, double y, double z, double a) {
        double r11151 = y;
        double r11152 = tan(r11151);
        double r11153 = z;
        double r11154 = tan(r11153);
        double r11155 = r11152 + r11154;
        double r11156 = 1.0;
        double r11157 = r11154 * r11152;
        double r11158 = sin(r11153);
        double r11159 = r11158 * r11152;
        double r11160 = r11159 * r11159;
        double r11161 = cos(r11153);
        double r11162 = r11161 * r11161;
        double r11163 = r11160 / r11162;
        double r11164 = r11157 * r11163;
        double r11165 = cbrt(r11164);
        double r11166 = r11156 - r11165;
        double r11167 = r11155 / r11166;
        double r11168 = a;
        double r11169 = tan(r11168);
        double r11170 = r11167 - r11169;
        double r11171 = x;
        double r11172 = r11170 + r11171;
        return r11172;
}

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 r11173, r11174, r11175, r11176, r11177, r11178, r11179, r11180, r11181;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11173);
        mpfr_init(r11174);
        mpfr_init(r11175);
        mpfr_init(r11176);
        mpfr_init(r11177);
        mpfr_init(r11178);
        mpfr_init(r11179);
        mpfr_init(r11180);
        mpfr_init(r11181);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r11173, x, MPFR_RNDN);
        mpfr_set_d(r11174, y, MPFR_RNDN);
        mpfr_set_d(r11175, z, MPFR_RNDN);
        mpfr_add(r11176, r11174, r11175, MPFR_RNDN);
        mpfr_tan(r11177, r11176, MPFR_RNDN);
        mpfr_set_d(r11178, a, MPFR_RNDN);
        mpfr_tan(r11179, r11178, MPFR_RNDN);
        mpfr_sub(r11180, r11177, r11179, MPFR_RNDN);
        mpfr_add(r11181, r11173, r11180, MPFR_RNDN);
        return mpfr_get_d(r11181, MPFR_RNDN);
}

static mpfr_t r11182, r11183, r11184, r11185, r11186, r11187, r11188, r11189, r11190, r11191, r11192, r11193, r11194, r11195, r11196, r11197, r11198, r11199, r11200, r11201, r11202, r11203;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11182);
        mpfr_init(r11183);
        mpfr_init(r11184);
        mpfr_init(r11185);
        mpfr_init(r11186);
        mpfr_init_set_str(r11187, "1", 10, MPFR_RNDN);
        mpfr_init(r11188);
        mpfr_init(r11189);
        mpfr_init(r11190);
        mpfr_init(r11191);
        mpfr_init(r11192);
        mpfr_init(r11193);
        mpfr_init(r11194);
        mpfr_init(r11195);
        mpfr_init(r11196);
        mpfr_init(r11197);
        mpfr_init(r11198);
        mpfr_init(r11199);
        mpfr_init(r11200);
        mpfr_init(r11201);
        mpfr_init(r11202);
        mpfr_init(r11203);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r11182, y, MPFR_RNDN);
        mpfr_tan(r11183, r11182, MPFR_RNDN);
        mpfr_set_d(r11184, z, MPFR_RNDN);
        mpfr_tan(r11185, r11184, MPFR_RNDN);
        mpfr_add(r11186, r11183, r11185, MPFR_RNDN);
        ;
        mpfr_mul(r11188, r11185, r11183, MPFR_RNDN);
        mpfr_sin(r11189, r11184, MPFR_RNDN);
        mpfr_mul(r11190, r11189, r11183, MPFR_RNDN);
        mpfr_mul(r11191, r11190, r11190, MPFR_RNDN);
        mpfr_cos(r11192, r11184, MPFR_RNDN);
        mpfr_mul(r11193, r11192, r11192, MPFR_RNDN);
        mpfr_div(r11194, r11191, r11193, MPFR_RNDN);
        mpfr_mul(r11195, r11188, r11194, MPFR_RNDN);
        mpfr_cbrt(r11196, r11195, MPFR_RNDN);
        mpfr_sub(r11197, r11187, r11196, MPFR_RNDN);
        mpfr_div(r11198, r11186, r11197, MPFR_RNDN);
        mpfr_set_d(r11199, a, MPFR_RNDN);
        mpfr_tan(r11200, r11199, MPFR_RNDN);
        mpfr_sub(r11201, r11198, r11200, MPFR_RNDN);
        mpfr_set_d(r11202, x, MPFR_RNDN);
        mpfr_add(r11203, r11201, r11202, MPFR_RNDN);
        return mpfr_get_d(r11203, MPFR_RNDN);
}

static mpfr_t r11204, r11205, r11206, r11207, r11208, r11209, r11210, r11211, r11212, r11213, r11214, r11215, r11216, r11217, r11218, r11219, r11220, r11221, r11222, r11223, r11224, r11225;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11204);
        mpfr_init(r11205);
        mpfr_init(r11206);
        mpfr_init(r11207);
        mpfr_init(r11208);
        mpfr_init_set_str(r11209, "1", 10, MPFR_RNDN);
        mpfr_init(r11210);
        mpfr_init(r11211);
        mpfr_init(r11212);
        mpfr_init(r11213);
        mpfr_init(r11214);
        mpfr_init(r11215);
        mpfr_init(r11216);
        mpfr_init(r11217);
        mpfr_init(r11218);
        mpfr_init(r11219);
        mpfr_init(r11220);
        mpfr_init(r11221);
        mpfr_init(r11222);
        mpfr_init(r11223);
        mpfr_init(r11224);
        mpfr_init(r11225);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r11204, y, MPFR_RNDN);
        mpfr_tan(r11205, r11204, MPFR_RNDN);
        mpfr_set_d(r11206, z, MPFR_RNDN);
        mpfr_tan(r11207, r11206, MPFR_RNDN);
        mpfr_add(r11208, r11205, r11207, MPFR_RNDN);
        ;
        mpfr_mul(r11210, r11207, r11205, MPFR_RNDN);
        mpfr_sin(r11211, r11206, MPFR_RNDN);
        mpfr_mul(r11212, r11211, r11205, MPFR_RNDN);
        mpfr_mul(r11213, r11212, r11212, MPFR_RNDN);
        mpfr_cos(r11214, r11206, MPFR_RNDN);
        mpfr_mul(r11215, r11214, r11214, MPFR_RNDN);
        mpfr_div(r11216, r11213, r11215, MPFR_RNDN);
        mpfr_mul(r11217, r11210, r11216, MPFR_RNDN);
        mpfr_cbrt(r11218, r11217, MPFR_RNDN);
        mpfr_sub(r11219, r11209, r11218, MPFR_RNDN);
        mpfr_div(r11220, r11208, r11219, MPFR_RNDN);
        mpfr_set_d(r11221, a, MPFR_RNDN);
        mpfr_tan(r11222, r11221, MPFR_RNDN);
        mpfr_sub(r11223, r11220, r11222, MPFR_RNDN);
        mpfr_set_d(r11224, x, MPFR_RNDN);
        mpfr_add(r11225, r11223, r11224, MPFR_RNDN);
        return mpfr_get_d(r11225, MPFR_RNDN);
}

