#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 r10379 = x;
        float r10380 = y;
        float r10381 = z;
        float r10382 = r10380 + r10381;
        float r10383 = tan(r10382);
        float r10384 = a;
        float r10385 = tan(r10384);
        float r10386 = r10383 - r10385;
        float r10387 = r10379 + r10386;
        return r10387;
}

double f_id(double x, double y, double z, double a) {
        double r10388 = x;
        double r10389 = y;
        double r10390 = z;
        double r10391 = r10389 + r10390;
        double r10392 = tan(r10391);
        double r10393 = a;
        double r10394 = tan(r10393);
        double r10395 = r10392 - r10394;
        double r10396 = r10388 + r10395;
        return r10396;
}


double f_of(float x, float y, float z, float a) {
        float r10397 = z;
        float r10398 = tan(r10397);
        float r10399 = y;
        float r10400 = tan(r10399);
        float r10401 = r10398 * r10400;
        float r10402 = fma(r10401, r10401, r10401);
        float r10403 = r10400 + r10398;
        float r10404 = fma(r10402, r10403, r10403);
        float r10405 = 1.0f;
        float r10406 = 3.0f;
        float r10407 = pow(r10401, r10406);
        float r10408 = r10405 - r10407;
        float r10409 = r10404 / r10408;
        float r10410 = a;
        float r10411 = tan(r10410);
        float r10412 = r10409 - r10411;
        float r10413 = x;
        float r10414 = r10412 + r10413;
        return r10414;
}

double f_od(double x, double y, double z, double a) {
        double r10415 = z;
        double r10416 = tan(r10415);
        double r10417 = y;
        double r10418 = tan(r10417);
        double r10419 = r10416 * r10418;
        double r10420 = fma(r10419, r10419, r10419);
        double r10421 = r10418 + r10416;
        double r10422 = fma(r10420, r10421, r10421);
        double r10423 = 1.0;
        double r10424 = 3.0;
        double r10425 = pow(r10419, r10424);
        double r10426 = r10423 - r10425;
        double r10427 = r10422 / r10426;
        double r10428 = a;
        double r10429 = tan(r10428);
        double r10430 = r10427 - r10429;
        double r10431 = x;
        double r10432 = r10430 + r10431;
        return r10432;
}

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 r10433, r10434, r10435, r10436, r10437, r10438, r10439, r10440, r10441;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10433);
        mpfr_init(r10434);
        mpfr_init(r10435);
        mpfr_init(r10436);
        mpfr_init(r10437);
        mpfr_init(r10438);
        mpfr_init(r10439);
        mpfr_init(r10440);
        mpfr_init(r10441);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r10433, x, MPFR_RNDN);
        mpfr_set_d(r10434, y, MPFR_RNDN);
        mpfr_set_d(r10435, z, MPFR_RNDN);
        mpfr_add(r10436, r10434, r10435, MPFR_RNDN);
        mpfr_tan(r10437, r10436, MPFR_RNDN);
        mpfr_set_d(r10438, a, MPFR_RNDN);
        mpfr_tan(r10439, r10438, MPFR_RNDN);
        mpfr_sub(r10440, r10437, r10439, MPFR_RNDN);
        mpfr_add(r10441, r10433, r10440, MPFR_RNDN);
        return mpfr_get_d(r10441, MPFR_RNDN);
}

static mpfr_t r10442, r10443, r10444, r10445, r10446, r10447, r10448, r10449, r10450, r10451, r10452, r10453, r10454, r10455, r10456, r10457, r10458, r10459;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10442);
        mpfr_init(r10443);
        mpfr_init(r10444);
        mpfr_init(r10445);
        mpfr_init(r10446);
        mpfr_init(r10447);
        mpfr_init(r10448);
        mpfr_init(r10449);
        mpfr_init_set_str(r10450, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10451, "3", 10, MPFR_RNDN);
        mpfr_init(r10452);
        mpfr_init(r10453);
        mpfr_init(r10454);
        mpfr_init(r10455);
        mpfr_init(r10456);
        mpfr_init(r10457);
        mpfr_init(r10458);
        mpfr_init(r10459);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r10442, z, MPFR_RNDN);
        mpfr_tan(r10443, r10442, MPFR_RNDN);
        mpfr_set_d(r10444, y, MPFR_RNDN);
        mpfr_tan(r10445, r10444, MPFR_RNDN);
        mpfr_mul(r10446, r10443, r10445, MPFR_RNDN);
        mpfr_fma(r10447, r10446, r10446, r10446, MPFR_RNDN);
        mpfr_add(r10448, r10445, r10443, MPFR_RNDN);
        mpfr_fma(r10449, r10447, r10448, r10448, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r10452, r10446, r10451, MPFR_RNDN);
        mpfr_sub(r10453, r10450, r10452, MPFR_RNDN);
        mpfr_div(r10454, r10449, r10453, MPFR_RNDN);
        mpfr_set_d(r10455, a, MPFR_RNDN);
        mpfr_tan(r10456, r10455, MPFR_RNDN);
        mpfr_sub(r10457, r10454, r10456, MPFR_RNDN);
        mpfr_set_d(r10458, x, MPFR_RNDN);
        mpfr_add(r10459, r10457, r10458, MPFR_RNDN);
        return mpfr_get_d(r10459, MPFR_RNDN);
}

static mpfr_t r10460, r10461, r10462, r10463, r10464, r10465, r10466, r10467, r10468, r10469, r10470, r10471, r10472, r10473, r10474, r10475, r10476, r10477;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10460);
        mpfr_init(r10461);
        mpfr_init(r10462);
        mpfr_init(r10463);
        mpfr_init(r10464);
        mpfr_init(r10465);
        mpfr_init(r10466);
        mpfr_init(r10467);
        mpfr_init_set_str(r10468, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10469, "3", 10, MPFR_RNDN);
        mpfr_init(r10470);
        mpfr_init(r10471);
        mpfr_init(r10472);
        mpfr_init(r10473);
        mpfr_init(r10474);
        mpfr_init(r10475);
        mpfr_init(r10476);
        mpfr_init(r10477);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r10460, z, MPFR_RNDN);
        mpfr_tan(r10461, r10460, MPFR_RNDN);
        mpfr_set_d(r10462, y, MPFR_RNDN);
        mpfr_tan(r10463, r10462, MPFR_RNDN);
        mpfr_mul(r10464, r10461, r10463, MPFR_RNDN);
        mpfr_fma(r10465, r10464, r10464, r10464, MPFR_RNDN);
        mpfr_add(r10466, r10463, r10461, MPFR_RNDN);
        mpfr_fma(r10467, r10465, r10466, r10466, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r10470, r10464, r10469, MPFR_RNDN);
        mpfr_sub(r10471, r10468, r10470, MPFR_RNDN);
        mpfr_div(r10472, r10467, r10471, MPFR_RNDN);
        mpfr_set_d(r10473, a, MPFR_RNDN);
        mpfr_tan(r10474, r10473, MPFR_RNDN);
        mpfr_sub(r10475, r10472, r10474, MPFR_RNDN);
        mpfr_set_d(r10476, x, MPFR_RNDN);
        mpfr_add(r10477, r10475, r10476, MPFR_RNDN);
        return mpfr_get_d(r10477, MPFR_RNDN);
}

