#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 r11407 = x;
        float r11408 = y;
        float r11409 = z;
        float r11410 = r11408 + r11409;
        float r11411 = tan(r11410);
        float r11412 = a;
        float r11413 = tan(r11412);
        float r11414 = r11411 - r11413;
        float r11415 = r11407 + r11414;
        return r11415;
}

double f_id(double x, double y, double z, double a) {
        double r11416 = x;
        double r11417 = y;
        double r11418 = z;
        double r11419 = r11417 + r11418;
        double r11420 = tan(r11419);
        double r11421 = a;
        double r11422 = tan(r11421);
        double r11423 = r11420 - r11422;
        double r11424 = r11416 + r11423;
        return r11424;
}


double f_of(float x, float y, float z, float a) {
        float r11425 = x;
        float r11426 = y;
        float r11427 = tan(r11426);
        float r11428 = z;
        float r11429 = tan(r11428);
        float r11430 = r11427 + r11429;
        float r11431 = 1;
        float r11432 = sin(r11426);
        float r11433 = sin(r11428);
        float r11434 = r11432 * r11433;
        float r11435 = cos(r11426);
        float r11436 = cos(r11428);
        float r11437 = r11435 * r11436;
        float r11438 = r11434 / r11437;
        float r11439 = r11431 - r11438;
        float r11440 = r11430 / r11439;
        float r11441 = a;
        float r11442 = tan(r11441);
        float r11443 = r11440 - r11442;
        float r11444 = r11425 + r11443;
        return r11444;
}

double f_od(double x, double y, double z, double a) {
        double r11445 = x;
        double r11446 = y;
        double r11447 = tan(r11446);
        double r11448 = z;
        double r11449 = tan(r11448);
        double r11450 = r11447 + r11449;
        double r11451 = 1;
        double r11452 = sin(r11446);
        double r11453 = sin(r11448);
        double r11454 = r11452 * r11453;
        double r11455 = cos(r11446);
        double r11456 = cos(r11448);
        double r11457 = r11455 * r11456;
        double r11458 = r11454 / r11457;
        double r11459 = r11451 - r11458;
        double r11460 = r11450 / r11459;
        double r11461 = a;
        double r11462 = tan(r11461);
        double r11463 = r11460 - r11462;
        double r11464 = r11445 + r11463;
        return r11464;
}

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 r11465, r11466, r11467, r11468, r11469, r11470, r11471, r11472, r11473;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11465);
        mpfr_init(r11466);
        mpfr_init(r11467);
        mpfr_init(r11468);
        mpfr_init(r11469);
        mpfr_init(r11470);
        mpfr_init(r11471);
        mpfr_init(r11472);
        mpfr_init(r11473);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r11465, x, MPFR_RNDN);
        mpfr_set_d(r11466, y, MPFR_RNDN);
        mpfr_set_d(r11467, z, MPFR_RNDN);
        mpfr_add(r11468, r11466, r11467, MPFR_RNDN);
        mpfr_tan(r11469, r11468, MPFR_RNDN);
        mpfr_set_d(r11470, a, MPFR_RNDN);
        mpfr_tan(r11471, r11470, MPFR_RNDN);
        mpfr_sub(r11472, r11469, r11471, MPFR_RNDN);
        mpfr_add(r11473, r11465, r11472, MPFR_RNDN);
        return mpfr_get_d(r11473, MPFR_RNDN);
}

static mpfr_t r11474, r11475, r11476, r11477, r11478, r11479, r11480, r11481, r11482, r11483, r11484, r11485, r11486, r11487, r11488, r11489, r11490, r11491, r11492, r11493;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11474);
        mpfr_init(r11475);
        mpfr_init(r11476);
        mpfr_init(r11477);
        mpfr_init(r11478);
        mpfr_init(r11479);
        mpfr_init_set_str(r11480, "1", 10, MPFR_RNDN);
        mpfr_init(r11481);
        mpfr_init(r11482);
        mpfr_init(r11483);
        mpfr_init(r11484);
        mpfr_init(r11485);
        mpfr_init(r11486);
        mpfr_init(r11487);
        mpfr_init(r11488);
        mpfr_init(r11489);
        mpfr_init(r11490);
        mpfr_init(r11491);
        mpfr_init(r11492);
        mpfr_init(r11493);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r11474, x, MPFR_RNDN);
        mpfr_set_d(r11475, y, MPFR_RNDN);
        mpfr_tan(r11476, r11475, MPFR_RNDN);
        mpfr_set_d(r11477, z, MPFR_RNDN);
        mpfr_tan(r11478, r11477, MPFR_RNDN);
        mpfr_add(r11479, r11476, r11478, MPFR_RNDN);
        ;
        mpfr_sin(r11481, r11475, MPFR_RNDN);
        mpfr_sin(r11482, r11477, MPFR_RNDN);
        mpfr_mul(r11483, r11481, r11482, MPFR_RNDN);
        mpfr_cos(r11484, r11475, MPFR_RNDN);
        mpfr_cos(r11485, r11477, MPFR_RNDN);
        mpfr_mul(r11486, r11484, r11485, MPFR_RNDN);
        mpfr_div(r11487, r11483, r11486, MPFR_RNDN);
        mpfr_sub(r11488, r11480, r11487, MPFR_RNDN);
        mpfr_div(r11489, r11479, r11488, MPFR_RNDN);
        mpfr_set_d(r11490, a, MPFR_RNDN);
        mpfr_tan(r11491, r11490, MPFR_RNDN);
        mpfr_sub(r11492, r11489, r11491, MPFR_RNDN);
        mpfr_add(r11493, r11474, r11492, MPFR_RNDN);
        return mpfr_get_d(r11493, MPFR_RNDN);
}

static mpfr_t r11494, r11495, r11496, r11497, r11498, r11499, r11500, r11501, r11502, r11503, r11504, r11505, r11506, r11507, r11508, r11509, r11510, r11511, r11512, r11513;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11494);
        mpfr_init(r11495);
        mpfr_init(r11496);
        mpfr_init(r11497);
        mpfr_init(r11498);
        mpfr_init(r11499);
        mpfr_init_set_str(r11500, "1", 10, MPFR_RNDN);
        mpfr_init(r11501);
        mpfr_init(r11502);
        mpfr_init(r11503);
        mpfr_init(r11504);
        mpfr_init(r11505);
        mpfr_init(r11506);
        mpfr_init(r11507);
        mpfr_init(r11508);
        mpfr_init(r11509);
        mpfr_init(r11510);
        mpfr_init(r11511);
        mpfr_init(r11512);
        mpfr_init(r11513);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r11494, x, MPFR_RNDN);
        mpfr_set_d(r11495, y, MPFR_RNDN);
        mpfr_tan(r11496, r11495, MPFR_RNDN);
        mpfr_set_d(r11497, z, MPFR_RNDN);
        mpfr_tan(r11498, r11497, MPFR_RNDN);
        mpfr_add(r11499, r11496, r11498, MPFR_RNDN);
        ;
        mpfr_sin(r11501, r11495, MPFR_RNDN);
        mpfr_sin(r11502, r11497, MPFR_RNDN);
        mpfr_mul(r11503, r11501, r11502, MPFR_RNDN);
        mpfr_cos(r11504, r11495, MPFR_RNDN);
        mpfr_cos(r11505, r11497, MPFR_RNDN);
        mpfr_mul(r11506, r11504, r11505, MPFR_RNDN);
        mpfr_div(r11507, r11503, r11506, MPFR_RNDN);
        mpfr_sub(r11508, r11500, r11507, MPFR_RNDN);
        mpfr_div(r11509, r11499, r11508, MPFR_RNDN);
        mpfr_set_d(r11510, a, MPFR_RNDN);
        mpfr_tan(r11511, r11510, MPFR_RNDN);
        mpfr_sub(r11512, r11509, r11511, MPFR_RNDN);
        mpfr_add(r11513, r11494, r11512, MPFR_RNDN);
        return mpfr_get_d(r11513, MPFR_RNDN);
}

