#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 r705293 = x;
        float r705294 = y;
        float r705295 = z;
        float r705296 = r705294 + r705295;
        float r705297 = tan(r705296);
        float r705298 = a;
        float r705299 = tan(r705298);
        float r705300 = r705297 - r705299;
        float r705301 = r705293 + r705300;
        return r705301;
}

double f_id(double x, double y, double z, double a) {
        double r705302 = x;
        double r705303 = y;
        double r705304 = z;
        double r705305 = r705303 + r705304;
        double r705306 = tan(r705305);
        double r705307 = a;
        double r705308 = tan(r705307);
        double r705309 = r705306 - r705308;
        double r705310 = r705302 + r705309;
        return r705310;
}


double f_of(float x, float y, float z, float a) {
        float r705311 = y;
        float r705312 = tan(r705311);
        float r705313 = z;
        float r705314 = tan(r705313);
        float r705315 = r705312 + r705314;
        float r705316 = 1;
        float r705317 = r705312 * r705314;
        float r705318 = r705316 - r705317;
        float r705319 = r705315 / r705318;
        float r705320 = a;
        float r705321 = sin(r705320);
        float r705322 = cos(r705320);
        float r705323 = r705321 / r705322;
        float r705324 = x;
        float r705325 = r705323 - r705324;
        float r705326 = r705319 - r705325;
        return r705326;
}

double f_od(double x, double y, double z, double a) {
        double r705327 = y;
        double r705328 = tan(r705327);
        double r705329 = z;
        double r705330 = tan(r705329);
        double r705331 = r705328 + r705330;
        double r705332 = 1;
        double r705333 = r705328 * r705330;
        double r705334 = r705332 - r705333;
        double r705335 = r705331 / r705334;
        double r705336 = a;
        double r705337 = sin(r705336);
        double r705338 = cos(r705336);
        double r705339 = r705337 / r705338;
        double r705340 = x;
        double r705341 = r705339 - r705340;
        double r705342 = r705335 - r705341;
        return r705342;
}

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 r705343, r705344, r705345, r705346, r705347, r705348, r705349, r705350, r705351;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r705343);
        mpfr_init(r705344);
        mpfr_init(r705345);
        mpfr_init(r705346);
        mpfr_init(r705347);
        mpfr_init(r705348);
        mpfr_init(r705349);
        mpfr_init(r705350);
        mpfr_init(r705351);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r705343, x, MPFR_RNDN);
        mpfr_set_d(r705344, y, MPFR_RNDN);
        mpfr_set_d(r705345, z, MPFR_RNDN);
        mpfr_add(r705346, r705344, r705345, MPFR_RNDN);
        mpfr_tan(r705347, r705346, MPFR_RNDN);
        mpfr_set_d(r705348, a, MPFR_RNDN);
        mpfr_tan(r705349, r705348, MPFR_RNDN);
        mpfr_sub(r705350, r705347, r705349, MPFR_RNDN);
        mpfr_add(r705351, r705343, r705350, MPFR_RNDN);
        return mpfr_get_d(r705351, MPFR_RNDN);
}

static mpfr_t r705352, r705353, r705354, r705355, r705356, r705357, r705358, r705359, r705360, r705361, r705362, r705363, r705364, r705365, r705366, r705367;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r705352);
        mpfr_init(r705353);
        mpfr_init(r705354);
        mpfr_init(r705355);
        mpfr_init(r705356);
        mpfr_init_set_str(r705357, "1", 10, MPFR_RNDN);
        mpfr_init(r705358);
        mpfr_init(r705359);
        mpfr_init(r705360);
        mpfr_init(r705361);
        mpfr_init(r705362);
        mpfr_init(r705363);
        mpfr_init(r705364);
        mpfr_init(r705365);
        mpfr_init(r705366);
        mpfr_init(r705367);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r705352, y, MPFR_RNDN);
        mpfr_tan(r705353, r705352, MPFR_RNDN);
        mpfr_set_d(r705354, z, MPFR_RNDN);
        mpfr_tan(r705355, r705354, MPFR_RNDN);
        mpfr_add(r705356, r705353, r705355, MPFR_RNDN);
        ;
        mpfr_mul(r705358, r705353, r705355, MPFR_RNDN);
        mpfr_sub(r705359, r705357, r705358, MPFR_RNDN);
        mpfr_div(r705360, r705356, r705359, MPFR_RNDN);
        mpfr_set_d(r705361, a, MPFR_RNDN);
        mpfr_sin(r705362, r705361, MPFR_RNDN);
        mpfr_cos(r705363, r705361, MPFR_RNDN);
        mpfr_div(r705364, r705362, r705363, MPFR_RNDN);
        mpfr_set_d(r705365, x, MPFR_RNDN);
        mpfr_sub(r705366, r705364, r705365, MPFR_RNDN);
        mpfr_sub(r705367, r705360, r705366, MPFR_RNDN);
        return mpfr_get_d(r705367, MPFR_RNDN);
}

static mpfr_t r705368, r705369, r705370, r705371, r705372, r705373, r705374, r705375, r705376, r705377, r705378, r705379, r705380, r705381, r705382, r705383;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r705368);
        mpfr_init(r705369);
        mpfr_init(r705370);
        mpfr_init(r705371);
        mpfr_init(r705372);
        mpfr_init_set_str(r705373, "1", 10, MPFR_RNDN);
        mpfr_init(r705374);
        mpfr_init(r705375);
        mpfr_init(r705376);
        mpfr_init(r705377);
        mpfr_init(r705378);
        mpfr_init(r705379);
        mpfr_init(r705380);
        mpfr_init(r705381);
        mpfr_init(r705382);
        mpfr_init(r705383);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r705368, y, MPFR_RNDN);
        mpfr_tan(r705369, r705368, MPFR_RNDN);
        mpfr_set_d(r705370, z, MPFR_RNDN);
        mpfr_tan(r705371, r705370, MPFR_RNDN);
        mpfr_add(r705372, r705369, r705371, MPFR_RNDN);
        ;
        mpfr_mul(r705374, r705369, r705371, MPFR_RNDN);
        mpfr_sub(r705375, r705373, r705374, MPFR_RNDN);
        mpfr_div(r705376, r705372, r705375, MPFR_RNDN);
        mpfr_set_d(r705377, a, MPFR_RNDN);
        mpfr_sin(r705378, r705377, MPFR_RNDN);
        mpfr_cos(r705379, r705377, MPFR_RNDN);
        mpfr_div(r705380, r705378, r705379, MPFR_RNDN);
        mpfr_set_d(r705381, x, MPFR_RNDN);
        mpfr_sub(r705382, r705380, r705381, MPFR_RNDN);
        mpfr_sub(r705383, r705376, r705382, MPFR_RNDN);
        return mpfr_get_d(r705383, MPFR_RNDN);
}

