#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 r11042 = x;
        float r11043 = y;
        float r11044 = z;
        float r11045 = r11043 + r11044;
        float r11046 = tan(r11045);
        float r11047 = a;
        float r11048 = tan(r11047);
        float r11049 = r11046 - r11048;
        float r11050 = r11042 + r11049;
        return r11050;
}

double f_id(double x, double y, double z, double a) {
        double r11051 = x;
        double r11052 = y;
        double r11053 = z;
        double r11054 = r11052 + r11053;
        double r11055 = tan(r11054);
        double r11056 = a;
        double r11057 = tan(r11056);
        double r11058 = r11055 - r11057;
        double r11059 = r11051 + r11058;
        return r11059;
}


double f_of(float x, float y, float z, float a) {
        float r11060 = x;
        float r11061 = y;
        float r11062 = tan(r11061);
        float r11063 = z;
        float r11064 = tan(r11063);
        float r11065 = r11062 + r11064;
        float r11066 = 1;
        float r11067 = sin(r11061);
        float r11068 = sin(r11063);
        float r11069 = r11067 * r11068;
        float r11070 = cos(r11061);
        float r11071 = cos(r11063);
        float r11072 = r11070 * r11071;
        float r11073 = r11069 / r11072;
        float r11074 = r11066 - r11073;
        float r11075 = r11065 / r11074;
        float r11076 = a;
        float r11077 = tan(r11076);
        float r11078 = r11075 - r11077;
        float r11079 = r11060 + r11078;
        return r11079;
}

double f_od(double x, double y, double z, double a) {
        double r11080 = x;
        double r11081 = y;
        double r11082 = tan(r11081);
        double r11083 = z;
        double r11084 = tan(r11083);
        double r11085 = r11082 + r11084;
        double r11086 = 1;
        double r11087 = sin(r11081);
        double r11088 = sin(r11083);
        double r11089 = r11087 * r11088;
        double r11090 = cos(r11081);
        double r11091 = cos(r11083);
        double r11092 = r11090 * r11091;
        double r11093 = r11089 / r11092;
        double r11094 = r11086 - r11093;
        double r11095 = r11085 / r11094;
        double r11096 = a;
        double r11097 = tan(r11096);
        double r11098 = r11095 - r11097;
        double r11099 = r11080 + r11098;
        return r11099;
}

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 r11100, r11101, r11102, r11103, r11104, r11105, r11106, r11107, r11108;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11100);
        mpfr_init(r11101);
        mpfr_init(r11102);
        mpfr_init(r11103);
        mpfr_init(r11104);
        mpfr_init(r11105);
        mpfr_init(r11106);
        mpfr_init(r11107);
        mpfr_init(r11108);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r11100, x, MPFR_RNDN);
        mpfr_set_d(r11101, y, MPFR_RNDN);
        mpfr_set_d(r11102, z, MPFR_RNDN);
        mpfr_add(r11103, r11101, r11102, MPFR_RNDN);
        mpfr_tan(r11104, r11103, MPFR_RNDN);
        mpfr_set_d(r11105, a, MPFR_RNDN);
        mpfr_tan(r11106, r11105, MPFR_RNDN);
        mpfr_sub(r11107, r11104, r11106, MPFR_RNDN);
        mpfr_add(r11108, r11100, r11107, MPFR_RNDN);
        return mpfr_get_d(r11108, MPFR_RNDN);
}

static mpfr_t r11109, r11110, r11111, r11112, r11113, r11114, r11115, r11116, r11117, r11118, r11119, r11120, r11121, r11122, r11123, r11124, r11125, r11126, r11127, r11128;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11109);
        mpfr_init(r11110);
        mpfr_init(r11111);
        mpfr_init(r11112);
        mpfr_init(r11113);
        mpfr_init(r11114);
        mpfr_init_set_str(r11115, "1", 10, MPFR_RNDN);
        mpfr_init(r11116);
        mpfr_init(r11117);
        mpfr_init(r11118);
        mpfr_init(r11119);
        mpfr_init(r11120);
        mpfr_init(r11121);
        mpfr_init(r11122);
        mpfr_init(r11123);
        mpfr_init(r11124);
        mpfr_init(r11125);
        mpfr_init(r11126);
        mpfr_init(r11127);
        mpfr_init(r11128);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r11109, x, MPFR_RNDN);
        mpfr_set_d(r11110, y, MPFR_RNDN);
        mpfr_tan(r11111, r11110, MPFR_RNDN);
        mpfr_set_d(r11112, z, MPFR_RNDN);
        mpfr_tan(r11113, r11112, MPFR_RNDN);
        mpfr_add(r11114, r11111, r11113, MPFR_RNDN);
        ;
        mpfr_sin(r11116, r11110, MPFR_RNDN);
        mpfr_sin(r11117, r11112, MPFR_RNDN);
        mpfr_mul(r11118, r11116, r11117, MPFR_RNDN);
        mpfr_cos(r11119, r11110, MPFR_RNDN);
        mpfr_cos(r11120, r11112, MPFR_RNDN);
        mpfr_mul(r11121, r11119, r11120, MPFR_RNDN);
        mpfr_div(r11122, r11118, r11121, MPFR_RNDN);
        mpfr_sub(r11123, r11115, r11122, MPFR_RNDN);
        mpfr_div(r11124, r11114, r11123, MPFR_RNDN);
        mpfr_set_d(r11125, a, MPFR_RNDN);
        mpfr_tan(r11126, r11125, MPFR_RNDN);
        mpfr_sub(r11127, r11124, r11126, MPFR_RNDN);
        mpfr_add(r11128, r11109, r11127, MPFR_RNDN);
        return mpfr_get_d(r11128, MPFR_RNDN);
}

static mpfr_t r11129, r11130, r11131, r11132, r11133, r11134, r11135, r11136, r11137, r11138, r11139, r11140, r11141, r11142, r11143, r11144, r11145, r11146, r11147, r11148;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11129);
        mpfr_init(r11130);
        mpfr_init(r11131);
        mpfr_init(r11132);
        mpfr_init(r11133);
        mpfr_init(r11134);
        mpfr_init_set_str(r11135, "1", 10, MPFR_RNDN);
        mpfr_init(r11136);
        mpfr_init(r11137);
        mpfr_init(r11138);
        mpfr_init(r11139);
        mpfr_init(r11140);
        mpfr_init(r11141);
        mpfr_init(r11142);
        mpfr_init(r11143);
        mpfr_init(r11144);
        mpfr_init(r11145);
        mpfr_init(r11146);
        mpfr_init(r11147);
        mpfr_init(r11148);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r11129, x, MPFR_RNDN);
        mpfr_set_d(r11130, y, MPFR_RNDN);
        mpfr_tan(r11131, r11130, MPFR_RNDN);
        mpfr_set_d(r11132, z, MPFR_RNDN);
        mpfr_tan(r11133, r11132, MPFR_RNDN);
        mpfr_add(r11134, r11131, r11133, MPFR_RNDN);
        ;
        mpfr_sin(r11136, r11130, MPFR_RNDN);
        mpfr_sin(r11137, r11132, MPFR_RNDN);
        mpfr_mul(r11138, r11136, r11137, MPFR_RNDN);
        mpfr_cos(r11139, r11130, MPFR_RNDN);
        mpfr_cos(r11140, r11132, MPFR_RNDN);
        mpfr_mul(r11141, r11139, r11140, MPFR_RNDN);
        mpfr_div(r11142, r11138, r11141, MPFR_RNDN);
        mpfr_sub(r11143, r11135, r11142, MPFR_RNDN);
        mpfr_div(r11144, r11134, r11143, MPFR_RNDN);
        mpfr_set_d(r11145, a, MPFR_RNDN);
        mpfr_tan(r11146, r11145, MPFR_RNDN);
        mpfr_sub(r11147, r11144, r11146, MPFR_RNDN);
        mpfr_add(r11148, r11129, r11147, MPFR_RNDN);
        return mpfr_get_d(r11148, MPFR_RNDN);
}

