#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 r27918 = x;
        float r27919 = y;
        float r27920 = z;
        float r27921 = r27919 + r27920;
        float r27922 = tan(r27921);
        float r27923 = a;
        float r27924 = tan(r27923);
        float r27925 = r27922 - r27924;
        float r27926 = r27918 + r27925;
        return r27926;
}

double f_id(double x, double y, double z, double a) {
        double r27927 = x;
        double r27928 = y;
        double r27929 = z;
        double r27930 = r27928 + r27929;
        double r27931 = tan(r27930);
        double r27932 = a;
        double r27933 = tan(r27932);
        double r27934 = r27931 - r27933;
        double r27935 = r27927 + r27934;
        return r27935;
}


double f_of(float x, float y, float z, float a) {
        float r27936 = x;
        float r27937 = y;
        float r27938 = tan(r27937);
        float r27939 = z;
        float r27940 = tan(r27939);
        float r27941 = r27938 + r27940;
        float r27942 = 1;
        float r27943 = sin(r27937);
        float r27944 = sin(r27939);
        float r27945 = r27943 * r27944;
        float r27946 = cos(r27937);
        float r27947 = cos(r27939);
        float r27948 = r27946 * r27947;
        float r27949 = r27945 / r27948;
        float r27950 = r27942 - r27949;
        float r27951 = r27941 / r27950;
        float r27952 = a;
        float r27953 = tan(r27952);
        float r27954 = r27951 - r27953;
        float r27955 = r27936 + r27954;
        return r27955;
}

double f_od(double x, double y, double z, double a) {
        double r27956 = x;
        double r27957 = y;
        double r27958 = tan(r27957);
        double r27959 = z;
        double r27960 = tan(r27959);
        double r27961 = r27958 + r27960;
        double r27962 = 1;
        double r27963 = sin(r27957);
        double r27964 = sin(r27959);
        double r27965 = r27963 * r27964;
        double r27966 = cos(r27957);
        double r27967 = cos(r27959);
        double r27968 = r27966 * r27967;
        double r27969 = r27965 / r27968;
        double r27970 = r27962 - r27969;
        double r27971 = r27961 / r27970;
        double r27972 = a;
        double r27973 = tan(r27972);
        double r27974 = r27971 - r27973;
        double r27975 = r27956 + r27974;
        return r27975;
}

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 r27976, r27977, r27978, r27979, r27980, r27981, r27982, r27983, r27984;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27976);
        mpfr_init(r27977);
        mpfr_init(r27978);
        mpfr_init(r27979);
        mpfr_init(r27980);
        mpfr_init(r27981);
        mpfr_init(r27982);
        mpfr_init(r27983);
        mpfr_init(r27984);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r27976, x, MPFR_RNDN);
        mpfr_set_d(r27977, y, MPFR_RNDN);
        mpfr_set_d(r27978, z, MPFR_RNDN);
        mpfr_add(r27979, r27977, r27978, MPFR_RNDN);
        mpfr_tan(r27980, r27979, MPFR_RNDN);
        mpfr_set_d(r27981, a, MPFR_RNDN);
        mpfr_tan(r27982, r27981, MPFR_RNDN);
        mpfr_sub(r27983, r27980, r27982, MPFR_RNDN);
        mpfr_add(r27984, r27976, r27983, MPFR_RNDN);
        return mpfr_get_d(r27984, MPFR_RNDN);
}

static mpfr_t r27985, r27986, r27987, r27988, r27989, r27990, r27991, r27992, r27993, r27994, r27995, r27996, r27997, r27998, r27999, r28000, r28001, r28002, r28003, r28004;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27985);
        mpfr_init(r27986);
        mpfr_init(r27987);
        mpfr_init(r27988);
        mpfr_init(r27989);
        mpfr_init(r27990);
        mpfr_init_set_str(r27991, "1", 10, MPFR_RNDN);
        mpfr_init(r27992);
        mpfr_init(r27993);
        mpfr_init(r27994);
        mpfr_init(r27995);
        mpfr_init(r27996);
        mpfr_init(r27997);
        mpfr_init(r27998);
        mpfr_init(r27999);
        mpfr_init(r28000);
        mpfr_init(r28001);
        mpfr_init(r28002);
        mpfr_init(r28003);
        mpfr_init(r28004);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r27985, x, MPFR_RNDN);
        mpfr_set_d(r27986, y, MPFR_RNDN);
        mpfr_tan(r27987, r27986, MPFR_RNDN);
        mpfr_set_d(r27988, z, MPFR_RNDN);
        mpfr_tan(r27989, r27988, MPFR_RNDN);
        mpfr_add(r27990, r27987, r27989, MPFR_RNDN);
        ;
        mpfr_sin(r27992, r27986, MPFR_RNDN);
        mpfr_sin(r27993, r27988, MPFR_RNDN);
        mpfr_mul(r27994, r27992, r27993, MPFR_RNDN);
        mpfr_cos(r27995, r27986, MPFR_RNDN);
        mpfr_cos(r27996, r27988, MPFR_RNDN);
        mpfr_mul(r27997, r27995, r27996, MPFR_RNDN);
        mpfr_div(r27998, r27994, r27997, MPFR_RNDN);
        mpfr_sub(r27999, r27991, r27998, MPFR_RNDN);
        mpfr_div(r28000, r27990, r27999, MPFR_RNDN);
        mpfr_set_d(r28001, a, MPFR_RNDN);
        mpfr_tan(r28002, r28001, MPFR_RNDN);
        mpfr_sub(r28003, r28000, r28002, MPFR_RNDN);
        mpfr_add(r28004, r27985, r28003, MPFR_RNDN);
        return mpfr_get_d(r28004, MPFR_RNDN);
}

static mpfr_t r28005, r28006, r28007, r28008, r28009, r28010, r28011, r28012, r28013, r28014, r28015, r28016, r28017, r28018, r28019, r28020, r28021, r28022, r28023, r28024;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28005);
        mpfr_init(r28006);
        mpfr_init(r28007);
        mpfr_init(r28008);
        mpfr_init(r28009);
        mpfr_init(r28010);
        mpfr_init_set_str(r28011, "1", 10, MPFR_RNDN);
        mpfr_init(r28012);
        mpfr_init(r28013);
        mpfr_init(r28014);
        mpfr_init(r28015);
        mpfr_init(r28016);
        mpfr_init(r28017);
        mpfr_init(r28018);
        mpfr_init(r28019);
        mpfr_init(r28020);
        mpfr_init(r28021);
        mpfr_init(r28022);
        mpfr_init(r28023);
        mpfr_init(r28024);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r28005, x, MPFR_RNDN);
        mpfr_set_d(r28006, y, MPFR_RNDN);
        mpfr_tan(r28007, r28006, MPFR_RNDN);
        mpfr_set_d(r28008, z, MPFR_RNDN);
        mpfr_tan(r28009, r28008, MPFR_RNDN);
        mpfr_add(r28010, r28007, r28009, MPFR_RNDN);
        ;
        mpfr_sin(r28012, r28006, MPFR_RNDN);
        mpfr_sin(r28013, r28008, MPFR_RNDN);
        mpfr_mul(r28014, r28012, r28013, MPFR_RNDN);
        mpfr_cos(r28015, r28006, MPFR_RNDN);
        mpfr_cos(r28016, r28008, MPFR_RNDN);
        mpfr_mul(r28017, r28015, r28016, MPFR_RNDN);
        mpfr_div(r28018, r28014, r28017, MPFR_RNDN);
        mpfr_sub(r28019, r28011, r28018, MPFR_RNDN);
        mpfr_div(r28020, r28010, r28019, MPFR_RNDN);
        mpfr_set_d(r28021, a, MPFR_RNDN);
        mpfr_tan(r28022, r28021, MPFR_RNDN);
        mpfr_sub(r28023, r28020, r28022, MPFR_RNDN);
        mpfr_add(r28024, r28005, r28023, MPFR_RNDN);
        return mpfr_get_d(r28024, MPFR_RNDN);
}

