#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 r26928 = x;
        float r26929 = y;
        float r26930 = z;
        float r26931 = r26929 + r26930;
        float r26932 = tan(r26931);
        float r26933 = a;
        float r26934 = tan(r26933);
        float r26935 = r26932 - r26934;
        float r26936 = r26928 + r26935;
        return r26936;
}

double f_id(double x, double y, double z, double a) {
        double r26937 = x;
        double r26938 = y;
        double r26939 = z;
        double r26940 = r26938 + r26939;
        double r26941 = tan(r26940);
        double r26942 = a;
        double r26943 = tan(r26942);
        double r26944 = r26941 - r26943;
        double r26945 = r26937 + r26944;
        return r26945;
}


double f_of(float x, float y, float z, float a) {
        float r26946 = x;
        float r26947 = z;
        float r26948 = tan(r26947);
        float r26949 = y;
        float r26950 = tan(r26949);
        float r26951 = 1;
        float r26952 = fma(r26948, r26950, r26951);
        float r26953 = r26948 * r26950;
        float r26954 = fma(r26952, r26953, r26951);
        float r26955 = r26948 + r26950;
        float r26956 = r26954 * r26955;
        float r26957 = 3;
        float r26958 = pow(r26953, r26957);
        float r26959 = r26951 - r26958;
        float r26960 = r26956 / r26959;
        float r26961 = a;
        float r26962 = tan(r26961);
        float r26963 = r26960 - r26962;
        float r26964 = r26962 - r26962;
        float r26965 = r26963 + r26964;
        float r26966 = r26946 + r26965;
        return r26966;
}

double f_od(double x, double y, double z, double a) {
        double r26967 = x;
        double r26968 = z;
        double r26969 = tan(r26968);
        double r26970 = y;
        double r26971 = tan(r26970);
        double r26972 = 1;
        double r26973 = fma(r26969, r26971, r26972);
        double r26974 = r26969 * r26971;
        double r26975 = fma(r26973, r26974, r26972);
        double r26976 = r26969 + r26971;
        double r26977 = r26975 * r26976;
        double r26978 = 3;
        double r26979 = pow(r26974, r26978);
        double r26980 = r26972 - r26979;
        double r26981 = r26977 / r26980;
        double r26982 = a;
        double r26983 = tan(r26982);
        double r26984 = r26981 - r26983;
        double r26985 = r26983 - r26983;
        double r26986 = r26984 + r26985;
        double r26987 = r26967 + r26986;
        return r26987;
}

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 r26988, r26989, r26990, r26991, r26992, r26993, r26994, r26995, r26996;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26988);
        mpfr_init(r26989);
        mpfr_init(r26990);
        mpfr_init(r26991);
        mpfr_init(r26992);
        mpfr_init(r26993);
        mpfr_init(r26994);
        mpfr_init(r26995);
        mpfr_init(r26996);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r26988, x, MPFR_RNDN);
        mpfr_set_d(r26989, y, MPFR_RNDN);
        mpfr_set_d(r26990, z, MPFR_RNDN);
        mpfr_add(r26991, r26989, r26990, MPFR_RNDN);
        mpfr_tan(r26992, r26991, MPFR_RNDN);
        mpfr_set_d(r26993, a, MPFR_RNDN);
        mpfr_tan(r26994, r26993, MPFR_RNDN);
        mpfr_sub(r26995, r26992, r26994, MPFR_RNDN);
        mpfr_add(r26996, r26988, r26995, MPFR_RNDN);
        return mpfr_get_d(r26996, MPFR_RNDN);
}

static mpfr_t r26997, r26998, r26999, r27000, r27001, r27002, r27003, r27004, r27005, r27006, r27007, r27008, r27009, r27010, r27011, r27012, r27013, r27014, r27015, r27016, r27017;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26997);
        mpfr_init(r26998);
        mpfr_init(r26999);
        mpfr_init(r27000);
        mpfr_init(r27001);
        mpfr_init_set_str(r27002, "1", 10, MPFR_RNDN);
        mpfr_init(r27003);
        mpfr_init(r27004);
        mpfr_init(r27005);
        mpfr_init(r27006);
        mpfr_init(r27007);
        mpfr_init_set_str(r27008, "3", 10, MPFR_RNDN);
        mpfr_init(r27009);
        mpfr_init(r27010);
        mpfr_init(r27011);
        mpfr_init(r27012);
        mpfr_init(r27013);
        mpfr_init(r27014);
        mpfr_init(r27015);
        mpfr_init(r27016);
        mpfr_init(r27017);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r26997, x, MPFR_RNDN);
        mpfr_set_d(r26998, z, MPFR_RNDN);
        mpfr_tan(r26999, r26998, MPFR_RNDN);
        mpfr_set_d(r27000, y, MPFR_RNDN);
        mpfr_tan(r27001, r27000, MPFR_RNDN);
        ;
        mpfr_fma(r27003, r26999, r27001, r27002, MPFR_RNDN);
        mpfr_mul(r27004, r26999, r27001, MPFR_RNDN);
        mpfr_fma(r27005, r27003, r27004, r27002, MPFR_RNDN);
        mpfr_add(r27006, r26999, r27001, MPFR_RNDN);
        mpfr_mul(r27007, r27005, r27006, MPFR_RNDN);
        ;
        mpfr_pow(r27009, r27004, r27008, MPFR_RNDN);
        mpfr_sub(r27010, r27002, r27009, MPFR_RNDN);
        mpfr_div(r27011, r27007, r27010, MPFR_RNDN);
        mpfr_set_d(r27012, a, MPFR_RNDN);
        mpfr_tan(r27013, r27012, MPFR_RNDN);
        mpfr_sub(r27014, r27011, r27013, MPFR_RNDN);
        mpfr_sub(r27015, r27013, r27013, MPFR_RNDN);
        mpfr_add(r27016, r27014, r27015, MPFR_RNDN);
        mpfr_add(r27017, r26997, r27016, MPFR_RNDN);
        return mpfr_get_d(r27017, MPFR_RNDN);
}

static mpfr_t r27018, r27019, r27020, r27021, r27022, r27023, r27024, r27025, r27026, r27027, r27028, r27029, r27030, r27031, r27032, r27033, r27034, r27035, r27036, r27037, r27038;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27018);
        mpfr_init(r27019);
        mpfr_init(r27020);
        mpfr_init(r27021);
        mpfr_init(r27022);
        mpfr_init_set_str(r27023, "1", 10, MPFR_RNDN);
        mpfr_init(r27024);
        mpfr_init(r27025);
        mpfr_init(r27026);
        mpfr_init(r27027);
        mpfr_init(r27028);
        mpfr_init_set_str(r27029, "3", 10, MPFR_RNDN);
        mpfr_init(r27030);
        mpfr_init(r27031);
        mpfr_init(r27032);
        mpfr_init(r27033);
        mpfr_init(r27034);
        mpfr_init(r27035);
        mpfr_init(r27036);
        mpfr_init(r27037);
        mpfr_init(r27038);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r27018, x, MPFR_RNDN);
        mpfr_set_d(r27019, z, MPFR_RNDN);
        mpfr_tan(r27020, r27019, MPFR_RNDN);
        mpfr_set_d(r27021, y, MPFR_RNDN);
        mpfr_tan(r27022, r27021, MPFR_RNDN);
        ;
        mpfr_fma(r27024, r27020, r27022, r27023, MPFR_RNDN);
        mpfr_mul(r27025, r27020, r27022, MPFR_RNDN);
        mpfr_fma(r27026, r27024, r27025, r27023, MPFR_RNDN);
        mpfr_add(r27027, r27020, r27022, MPFR_RNDN);
        mpfr_mul(r27028, r27026, r27027, MPFR_RNDN);
        ;
        mpfr_pow(r27030, r27025, r27029, MPFR_RNDN);
        mpfr_sub(r27031, r27023, r27030, MPFR_RNDN);
        mpfr_div(r27032, r27028, r27031, MPFR_RNDN);
        mpfr_set_d(r27033, a, MPFR_RNDN);
        mpfr_tan(r27034, r27033, MPFR_RNDN);
        mpfr_sub(r27035, r27032, r27034, MPFR_RNDN);
        mpfr_sub(r27036, r27034, r27034, MPFR_RNDN);
        mpfr_add(r27037, r27035, r27036, MPFR_RNDN);
        mpfr_add(r27038, r27018, r27037, MPFR_RNDN);
        return mpfr_get_d(r27038, MPFR_RNDN);
}

