#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 r27876 = x;
        float r27877 = y;
        float r27878 = z;
        float r27879 = r27877 + r27878;
        float r27880 = tan(r27879);
        float r27881 = a;
        float r27882 = tan(r27881);
        float r27883 = r27880 - r27882;
        float r27884 = r27876 + r27883;
        return r27884;
}

double f_id(double x, double y, double z, double a) {
        double r27885 = x;
        double r27886 = y;
        double r27887 = z;
        double r27888 = r27886 + r27887;
        double r27889 = tan(r27888);
        double r27890 = a;
        double r27891 = tan(r27890);
        double r27892 = r27889 - r27891;
        double r27893 = r27885 + r27892;
        return r27893;
}


double f_of(float x, float y, float z, float a) {
        float r27894 = x;
        float r27895 = z;
        float r27896 = tan(r27895);
        float r27897 = y;
        float r27898 = tan(r27897);
        float r27899 = r27896 + r27898;
        float r27900 = 1;
        float r27901 = r27898 * r27896;
        float r27902 = 3;
        float r27903 = pow(r27901, r27902);
        float r27904 = pow(r27903, r27902);
        float r27905 = cbrt(r27904);
        float r27906 = r27900 - r27905;
        float r27907 = r27899 / r27906;
        float r27908 = r27900 * r27900;
        float r27909 = r27901 * r27901;
        float r27910 = r27900 * r27901;
        float r27911 = r27909 + r27910;
        float r27912 = r27908 + r27911;
        float r27913 = r27907 * r27912;
        float r27914 = a;
        float r27915 = tan(r27914);
        float r27916 = r27913 - r27915;
        float r27917 = r27894 + r27916;
        return r27917;
}

double f_od(double x, double y, double z, double a) {
        double r27918 = x;
        double r27919 = z;
        double r27920 = tan(r27919);
        double r27921 = y;
        double r27922 = tan(r27921);
        double r27923 = r27920 + r27922;
        double r27924 = 1;
        double r27925 = r27922 * r27920;
        double r27926 = 3;
        double r27927 = pow(r27925, r27926);
        double r27928 = pow(r27927, r27926);
        double r27929 = cbrt(r27928);
        double r27930 = r27924 - r27929;
        double r27931 = r27923 / r27930;
        double r27932 = r27924 * r27924;
        double r27933 = r27925 * r27925;
        double r27934 = r27924 * r27925;
        double r27935 = r27933 + r27934;
        double r27936 = r27932 + r27935;
        double r27937 = r27931 * r27936;
        double r27938 = a;
        double r27939 = tan(r27938);
        double r27940 = r27937 - r27939;
        double r27941 = r27918 + r27940;
        return r27941;
}

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 r27942, r27943, r27944, r27945, r27946, r27947, r27948, r27949, r27950;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27942);
        mpfr_init(r27943);
        mpfr_init(r27944);
        mpfr_init(r27945);
        mpfr_init(r27946);
        mpfr_init(r27947);
        mpfr_init(r27948);
        mpfr_init(r27949);
        mpfr_init(r27950);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r27942, x, MPFR_RNDN);
        mpfr_set_d(r27943, y, MPFR_RNDN);
        mpfr_set_d(r27944, z, MPFR_RNDN);
        mpfr_add(r27945, r27943, r27944, MPFR_RNDN);
        mpfr_tan(r27946, r27945, MPFR_RNDN);
        mpfr_set_d(r27947, a, MPFR_RNDN);
        mpfr_tan(r27948, r27947, MPFR_RNDN);
        mpfr_sub(r27949, r27946, r27948, MPFR_RNDN);
        mpfr_add(r27950, r27942, r27949, MPFR_RNDN);
        return mpfr_get_d(r27950, MPFR_RNDN);
}

static mpfr_t r27951, r27952, r27953, r27954, r27955, r27956, r27957, r27958, r27959, r27960, r27961, r27962, r27963, r27964, r27965, r27966, r27967, r27968, r27969, r27970, r27971, r27972, r27973, r27974;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27951);
        mpfr_init(r27952);
        mpfr_init(r27953);
        mpfr_init(r27954);
        mpfr_init(r27955);
        mpfr_init(r27956);
        mpfr_init_set_str(r27957, "1", 10, MPFR_RNDN);
        mpfr_init(r27958);
        mpfr_init_set_str(r27959, "3", 10, MPFR_RNDN);
        mpfr_init(r27960);
        mpfr_init(r27961);
        mpfr_init(r27962);
        mpfr_init(r27963);
        mpfr_init(r27964);
        mpfr_init(r27965);
        mpfr_init(r27966);
        mpfr_init(r27967);
        mpfr_init(r27968);
        mpfr_init(r27969);
        mpfr_init(r27970);
        mpfr_init(r27971);
        mpfr_init(r27972);
        mpfr_init(r27973);
        mpfr_init(r27974);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r27951, x, MPFR_RNDN);
        mpfr_set_d(r27952, z, MPFR_RNDN);
        mpfr_tan(r27953, r27952, MPFR_RNDN);
        mpfr_set_d(r27954, y, MPFR_RNDN);
        mpfr_tan(r27955, r27954, MPFR_RNDN);
        mpfr_add(r27956, r27953, r27955, MPFR_RNDN);
        ;
        mpfr_mul(r27958, r27955, r27953, MPFR_RNDN);
        ;
        mpfr_pow(r27960, r27958, r27959, MPFR_RNDN);
        mpfr_pow(r27961, r27960, r27959, MPFR_RNDN);
        mpfr_cbrt(r27962, r27961, MPFR_RNDN);
        mpfr_sub(r27963, r27957, r27962, MPFR_RNDN);
        mpfr_div(r27964, r27956, r27963, MPFR_RNDN);
        mpfr_mul(r27965, r27957, r27957, MPFR_RNDN);
        mpfr_mul(r27966, r27958, r27958, MPFR_RNDN);
        mpfr_mul(r27967, r27957, r27958, MPFR_RNDN);
        mpfr_add(r27968, r27966, r27967, MPFR_RNDN);
        mpfr_add(r27969, r27965, r27968, MPFR_RNDN);
        mpfr_mul(r27970, r27964, r27969, MPFR_RNDN);
        mpfr_set_d(r27971, a, MPFR_RNDN);
        mpfr_tan(r27972, r27971, MPFR_RNDN);
        mpfr_sub(r27973, r27970, r27972, MPFR_RNDN);
        mpfr_add(r27974, r27951, r27973, MPFR_RNDN);
        return mpfr_get_d(r27974, MPFR_RNDN);
}

static mpfr_t r27975, r27976, r27977, r27978, r27979, r27980, r27981, r27982, r27983, r27984, r27985, r27986, r27987, r27988, r27989, r27990, r27991, r27992, r27993, r27994, r27995, r27996, r27997, r27998;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27975);
        mpfr_init(r27976);
        mpfr_init(r27977);
        mpfr_init(r27978);
        mpfr_init(r27979);
        mpfr_init(r27980);
        mpfr_init_set_str(r27981, "1", 10, MPFR_RNDN);
        mpfr_init(r27982);
        mpfr_init_set_str(r27983, "3", 10, MPFR_RNDN);
        mpfr_init(r27984);
        mpfr_init(r27985);
        mpfr_init(r27986);
        mpfr_init(r27987);
        mpfr_init(r27988);
        mpfr_init(r27989);
        mpfr_init(r27990);
        mpfr_init(r27991);
        mpfr_init(r27992);
        mpfr_init(r27993);
        mpfr_init(r27994);
        mpfr_init(r27995);
        mpfr_init(r27996);
        mpfr_init(r27997);
        mpfr_init(r27998);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r27975, x, MPFR_RNDN);
        mpfr_set_d(r27976, z, MPFR_RNDN);
        mpfr_tan(r27977, r27976, MPFR_RNDN);
        mpfr_set_d(r27978, y, MPFR_RNDN);
        mpfr_tan(r27979, r27978, MPFR_RNDN);
        mpfr_add(r27980, r27977, r27979, MPFR_RNDN);
        ;
        mpfr_mul(r27982, r27979, r27977, MPFR_RNDN);
        ;
        mpfr_pow(r27984, r27982, r27983, MPFR_RNDN);
        mpfr_pow(r27985, r27984, r27983, MPFR_RNDN);
        mpfr_cbrt(r27986, r27985, MPFR_RNDN);
        mpfr_sub(r27987, r27981, r27986, MPFR_RNDN);
        mpfr_div(r27988, r27980, r27987, MPFR_RNDN);
        mpfr_mul(r27989, r27981, r27981, MPFR_RNDN);
        mpfr_mul(r27990, r27982, r27982, MPFR_RNDN);
        mpfr_mul(r27991, r27981, r27982, MPFR_RNDN);
        mpfr_add(r27992, r27990, r27991, MPFR_RNDN);
        mpfr_add(r27993, r27989, r27992, MPFR_RNDN);
        mpfr_mul(r27994, r27988, r27993, MPFR_RNDN);
        mpfr_set_d(r27995, a, MPFR_RNDN);
        mpfr_tan(r27996, r27995, MPFR_RNDN);
        mpfr_sub(r27997, r27994, r27996, MPFR_RNDN);
        mpfr_add(r27998, r27975, r27997, MPFR_RNDN);
        return mpfr_get_d(r27998, MPFR_RNDN);
}

