#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 r11117 = x;
        float r11118 = y;
        float r11119 = z;
        float r11120 = r11118 + r11119;
        float r11121 = tan(r11120);
        float r11122 = a;
        float r11123 = tan(r11122);
        float r11124 = r11121 - r11123;
        float r11125 = r11117 + r11124;
        return r11125;
}

double f_id(double x, double y, double z, double a) {
        double r11126 = x;
        double r11127 = y;
        double r11128 = z;
        double r11129 = r11127 + r11128;
        double r11130 = tan(r11129);
        double r11131 = a;
        double r11132 = tan(r11131);
        double r11133 = r11130 - r11132;
        double r11134 = r11126 + r11133;
        return r11134;
}


double f_of(float x, float y, float z, float a) {
        float r11135 = y;
        float r11136 = tan(r11135);
        float r11137 = r11136 * r11136;
        float r11138 = z;
        float r11139 = tan(r11138);
        float r11140 = r11139 * r11139;
        float r11141 = r11137 - r11140;
        float r11142 = r11136 - r11139;
        float r11143 = r11141 / r11142;
        float r11144 = 1.0f;
        float r11145 = r11136 * r11139;
        float r11146 = r11144 - r11145;
        float r11147 = r11143 / r11146;
        float r11148 = a;
        float r11149 = tan(r11148);
        float r11150 = r11147 - r11149;
        float r11151 = x;
        float r11152 = r11150 + r11151;
        return r11152;
}

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

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

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

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

static mpfr_t r11180, r11181, r11182, r11183, r11184, r11185, r11186, r11187, r11188, r11189, r11190, r11191, r11192, r11193, r11194, r11195, r11196, r11197;

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

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r11180, y, MPFR_RNDN);
        mpfr_tan(r11181, r11180, MPFR_RNDN);
        mpfr_mul(r11182, r11181, r11181, MPFR_RNDN);
        mpfr_set_d(r11183, z, MPFR_RNDN);
        mpfr_tan(r11184, r11183, MPFR_RNDN);
        mpfr_mul(r11185, r11184, r11184, MPFR_RNDN);
        mpfr_sub(r11186, r11182, r11185, MPFR_RNDN);
        mpfr_sub(r11187, r11181, r11184, MPFR_RNDN);
        mpfr_div(r11188, r11186, r11187, MPFR_RNDN);
        ;
        mpfr_mul(r11190, r11181, r11184, MPFR_RNDN);
        mpfr_sub(r11191, r11189, r11190, MPFR_RNDN);
        mpfr_div(r11192, r11188, r11191, MPFR_RNDN);
        mpfr_set_d(r11193, a, MPFR_RNDN);
        mpfr_tan(r11194, r11193, MPFR_RNDN);
        mpfr_sub(r11195, r11192, r11194, MPFR_RNDN);
        mpfr_set_d(r11196, x, MPFR_RNDN);
        mpfr_add(r11197, r11195, r11196, MPFR_RNDN);
        return mpfr_get_d(r11197, MPFR_RNDN);
}

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

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11198);
        mpfr_init(r11199);
        mpfr_init(r11200);
        mpfr_init(r11201);
        mpfr_init(r11202);
        mpfr_init(r11203);
        mpfr_init(r11204);
        mpfr_init(r11205);
        mpfr_init(r11206);
        mpfr_init_set_str(r11207, "1", 10, MPFR_RNDN);
        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_dm(double x, double y, double z, double a) {
        mpfr_set_d(r11198, y, MPFR_RNDN);
        mpfr_tan(r11199, r11198, MPFR_RNDN);
        mpfr_mul(r11200, r11199, r11199, MPFR_RNDN);
        mpfr_set_d(r11201, z, MPFR_RNDN);
        mpfr_tan(r11202, r11201, MPFR_RNDN);
        mpfr_mul(r11203, r11202, r11202, MPFR_RNDN);
        mpfr_sub(r11204, r11200, r11203, MPFR_RNDN);
        mpfr_sub(r11205, r11199, r11202, MPFR_RNDN);
        mpfr_div(r11206, r11204, r11205, MPFR_RNDN);
        ;
        mpfr_mul(r11208, r11199, r11202, MPFR_RNDN);
        mpfr_sub(r11209, r11207, r11208, MPFR_RNDN);
        mpfr_div(r11210, r11206, r11209, MPFR_RNDN);
        mpfr_set_d(r11211, a, MPFR_RNDN);
        mpfr_tan(r11212, r11211, MPFR_RNDN);
        mpfr_sub(r11213, r11210, r11212, MPFR_RNDN);
        mpfr_set_d(r11214, x, MPFR_RNDN);
        mpfr_add(r11215, r11213, r11214, MPFR_RNDN);
        return mpfr_get_d(r11215, MPFR_RNDN);
}

