#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 r27049 = x;
        float r27050 = y;
        float r27051 = z;
        float r27052 = r27050 + r27051;
        float r27053 = tan(r27052);
        float r27054 = a;
        float r27055 = tan(r27054);
        float r27056 = r27053 - r27055;
        float r27057 = r27049 + r27056;
        return r27057;
}

double f_id(double x, double y, double z, double a) {
        double r27058 = x;
        double r27059 = y;
        double r27060 = z;
        double r27061 = r27059 + r27060;
        double r27062 = tan(r27061);
        double r27063 = a;
        double r27064 = tan(r27063);
        double r27065 = r27062 - r27064;
        double r27066 = r27058 + r27065;
        return r27066;
}


double f_of(float x, float y, float z, float a) {
        float r27067 = x;
        float r27068 = z;
        float r27069 = tan(r27068);
        float r27070 = y;
        float r27071 = tan(r27070);
        float r27072 = r27069 + r27071;
        float r27073 = 1;
        float r27074 = r27069 * r27071;
        float r27075 = r27073 - r27074;
        float r27076 = r27072 / r27075;
        float r27077 = a;
        float r27078 = tan(r27077);
        float r27079 = r27076 - r27078;
        float r27080 = 3;
        float r27081 = pow(r27079, r27080);
        float r27082 = cbrt(r27081);
        float r27083 = r27067 + r27082;
        return r27083;
}

double f_od(double x, double y, double z, double a) {
        double r27084 = x;
        double r27085 = z;
        double r27086 = tan(r27085);
        double r27087 = y;
        double r27088 = tan(r27087);
        double r27089 = r27086 + r27088;
        double r27090 = 1;
        double r27091 = r27086 * r27088;
        double r27092 = r27090 - r27091;
        double r27093 = r27089 / r27092;
        double r27094 = a;
        double r27095 = tan(r27094);
        double r27096 = r27093 - r27095;
        double r27097 = 3;
        double r27098 = pow(r27096, r27097);
        double r27099 = cbrt(r27098);
        double r27100 = r27084 + r27099;
        return r27100;
}

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 r27101, r27102, r27103, r27104, r27105, r27106, r27107, r27108, r27109;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27101);
        mpfr_init(r27102);
        mpfr_init(r27103);
        mpfr_init(r27104);
        mpfr_init(r27105);
        mpfr_init(r27106);
        mpfr_init(r27107);
        mpfr_init(r27108);
        mpfr_init(r27109);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r27101, x, MPFR_RNDN);
        mpfr_set_d(r27102, y, MPFR_RNDN);
        mpfr_set_d(r27103, z, MPFR_RNDN);
        mpfr_add(r27104, r27102, r27103, MPFR_RNDN);
        mpfr_tan(r27105, r27104, MPFR_RNDN);
        mpfr_set_d(r27106, a, MPFR_RNDN);
        mpfr_tan(r27107, r27106, MPFR_RNDN);
        mpfr_sub(r27108, r27105, r27107, MPFR_RNDN);
        mpfr_add(r27109, r27101, r27108, MPFR_RNDN);
        return mpfr_get_d(r27109, MPFR_RNDN);
}

static mpfr_t r27110, r27111, r27112, r27113, r27114, r27115, r27116, r27117, r27118, r27119, r27120, r27121, r27122, r27123, r27124, r27125, r27126;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27110);
        mpfr_init(r27111);
        mpfr_init(r27112);
        mpfr_init(r27113);
        mpfr_init(r27114);
        mpfr_init(r27115);
        mpfr_init_set_str(r27116, "1", 10, MPFR_RNDN);
        mpfr_init(r27117);
        mpfr_init(r27118);
        mpfr_init(r27119);
        mpfr_init(r27120);
        mpfr_init(r27121);
        mpfr_init(r27122);
        mpfr_init_set_str(r27123, "3", 10, MPFR_RNDN);
        mpfr_init(r27124);
        mpfr_init(r27125);
        mpfr_init(r27126);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r27110, x, MPFR_RNDN);
        mpfr_set_d(r27111, z, MPFR_RNDN);
        mpfr_tan(r27112, r27111, MPFR_RNDN);
        mpfr_set_d(r27113, y, MPFR_RNDN);
        mpfr_tan(r27114, r27113, MPFR_RNDN);
        mpfr_add(r27115, r27112, r27114, MPFR_RNDN);
        ;
        mpfr_mul(r27117, r27112, r27114, MPFR_RNDN);
        mpfr_sub(r27118, r27116, r27117, MPFR_RNDN);
        mpfr_div(r27119, r27115, r27118, MPFR_RNDN);
        mpfr_set_d(r27120, a, MPFR_RNDN);
        mpfr_tan(r27121, r27120, MPFR_RNDN);
        mpfr_sub(r27122, r27119, r27121, MPFR_RNDN);
        ;
        mpfr_pow(r27124, r27122, r27123, MPFR_RNDN);
        mpfr_cbrt(r27125, r27124, MPFR_RNDN);
        mpfr_add(r27126, r27110, r27125, MPFR_RNDN);
        return mpfr_get_d(r27126, MPFR_RNDN);
}

static mpfr_t r27127, r27128, r27129, r27130, r27131, r27132, r27133, r27134, r27135, r27136, r27137, r27138, r27139, r27140, r27141, r27142, r27143;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27127);
        mpfr_init(r27128);
        mpfr_init(r27129);
        mpfr_init(r27130);
        mpfr_init(r27131);
        mpfr_init(r27132);
        mpfr_init_set_str(r27133, "1", 10, MPFR_RNDN);
        mpfr_init(r27134);
        mpfr_init(r27135);
        mpfr_init(r27136);
        mpfr_init(r27137);
        mpfr_init(r27138);
        mpfr_init(r27139);
        mpfr_init_set_str(r27140, "3", 10, MPFR_RNDN);
        mpfr_init(r27141);
        mpfr_init(r27142);
        mpfr_init(r27143);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r27127, x, MPFR_RNDN);
        mpfr_set_d(r27128, z, MPFR_RNDN);
        mpfr_tan(r27129, r27128, MPFR_RNDN);
        mpfr_set_d(r27130, y, MPFR_RNDN);
        mpfr_tan(r27131, r27130, MPFR_RNDN);
        mpfr_add(r27132, r27129, r27131, MPFR_RNDN);
        ;
        mpfr_mul(r27134, r27129, r27131, MPFR_RNDN);
        mpfr_sub(r27135, r27133, r27134, MPFR_RNDN);
        mpfr_div(r27136, r27132, r27135, MPFR_RNDN);
        mpfr_set_d(r27137, a, MPFR_RNDN);
        mpfr_tan(r27138, r27137, MPFR_RNDN);
        mpfr_sub(r27139, r27136, r27138, MPFR_RNDN);
        ;
        mpfr_pow(r27141, r27139, r27140, MPFR_RNDN);
        mpfr_cbrt(r27142, r27141, MPFR_RNDN);
        mpfr_add(r27143, r27127, r27142, MPFR_RNDN);
        return mpfr_get_d(r27143, MPFR_RNDN);
}

