#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 r11864 = x;
        float r11865 = y;
        float r11866 = z;
        float r11867 = r11865 + r11866;
        float r11868 = tan(r11867);
        float r11869 = a;
        float r11870 = tan(r11869);
        float r11871 = r11868 - r11870;
        float r11872 = r11864 + r11871;
        return r11872;
}

double f_id(double x, double y, double z, double a) {
        double r11873 = x;
        double r11874 = y;
        double r11875 = z;
        double r11876 = r11874 + r11875;
        double r11877 = tan(r11876);
        double r11878 = a;
        double r11879 = tan(r11878);
        double r11880 = r11877 - r11879;
        double r11881 = r11873 + r11880;
        return r11881;
}


double f_of(float x, float y, float z, float a) {
        float r11882 = x;
        float r11883 = y;
        float r11884 = tan(r11883);
        float r11885 = z;
        float r11886 = tan(r11885);
        float r11887 = r11884 + r11886;
        float r11888 = 1;
        float r11889 = sin(r11885);
        float r11890 = r11884 * r11889;
        float r11891 = cos(r11885);
        float r11892 = r11890 / r11891;
        float r11893 = r11888 - r11892;
        float r11894 = r11887 / r11893;
        float r11895 = a;
        float r11896 = tan(r11895);
        float r11897 = r11894 - r11896;
        float r11898 = r11882 + r11897;
        return r11898;
}

double f_od(double x, double y, double z, double a) {
        double r11899 = x;
        double r11900 = y;
        double r11901 = tan(r11900);
        double r11902 = z;
        double r11903 = tan(r11902);
        double r11904 = r11901 + r11903;
        double r11905 = 1;
        double r11906 = sin(r11902);
        double r11907 = r11901 * r11906;
        double r11908 = cos(r11902);
        double r11909 = r11907 / r11908;
        double r11910 = r11905 - r11909;
        double r11911 = r11904 / r11910;
        double r11912 = a;
        double r11913 = tan(r11912);
        double r11914 = r11911 - r11913;
        double r11915 = r11899 + r11914;
        return r11915;
}

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 r11916, r11917, r11918, r11919, r11920, r11921, r11922, r11923, r11924;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11916);
        mpfr_init(r11917);
        mpfr_init(r11918);
        mpfr_init(r11919);
        mpfr_init(r11920);
        mpfr_init(r11921);
        mpfr_init(r11922);
        mpfr_init(r11923);
        mpfr_init(r11924);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r11916, x, MPFR_RNDN);
        mpfr_set_d(r11917, y, MPFR_RNDN);
        mpfr_set_d(r11918, z, MPFR_RNDN);
        mpfr_add(r11919, r11917, r11918, MPFR_RNDN);
        mpfr_tan(r11920, r11919, MPFR_RNDN);
        mpfr_set_d(r11921, a, MPFR_RNDN);
        mpfr_tan(r11922, r11921, MPFR_RNDN);
        mpfr_sub(r11923, r11920, r11922, MPFR_RNDN);
        mpfr_add(r11924, r11916, r11923, MPFR_RNDN);
        return mpfr_get_d(r11924, MPFR_RNDN);
}

static mpfr_t r11925, r11926, r11927, r11928, r11929, r11930, r11931, r11932, r11933, r11934, r11935, r11936, r11937, r11938, r11939, r11940, r11941;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11925);
        mpfr_init(r11926);
        mpfr_init(r11927);
        mpfr_init(r11928);
        mpfr_init(r11929);
        mpfr_init(r11930);
        mpfr_init_set_str(r11931, "1", 10, MPFR_RNDN);
        mpfr_init(r11932);
        mpfr_init(r11933);
        mpfr_init(r11934);
        mpfr_init(r11935);
        mpfr_init(r11936);
        mpfr_init(r11937);
        mpfr_init(r11938);
        mpfr_init(r11939);
        mpfr_init(r11940);
        mpfr_init(r11941);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r11925, x, MPFR_RNDN);
        mpfr_set_d(r11926, y, MPFR_RNDN);
        mpfr_tan(r11927, r11926, MPFR_RNDN);
        mpfr_set_d(r11928, z, MPFR_RNDN);
        mpfr_tan(r11929, r11928, MPFR_RNDN);
        mpfr_add(r11930, r11927, r11929, MPFR_RNDN);
        ;
        mpfr_sin(r11932, r11928, MPFR_RNDN);
        mpfr_mul(r11933, r11927, r11932, MPFR_RNDN);
        mpfr_cos(r11934, r11928, MPFR_RNDN);
        mpfr_div(r11935, r11933, r11934, MPFR_RNDN);
        mpfr_sub(r11936, r11931, r11935, MPFR_RNDN);
        mpfr_div(r11937, r11930, r11936, MPFR_RNDN);
        mpfr_set_d(r11938, a, MPFR_RNDN);
        mpfr_tan(r11939, r11938, MPFR_RNDN);
        mpfr_sub(r11940, r11937, r11939, MPFR_RNDN);
        mpfr_add(r11941, r11925, r11940, MPFR_RNDN);
        return mpfr_get_d(r11941, MPFR_RNDN);
}

static mpfr_t r11942, r11943, r11944, r11945, r11946, r11947, r11948, r11949, r11950, r11951, r11952, r11953, r11954, r11955, r11956, r11957, r11958;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11942);
        mpfr_init(r11943);
        mpfr_init(r11944);
        mpfr_init(r11945);
        mpfr_init(r11946);
        mpfr_init(r11947);
        mpfr_init_set_str(r11948, "1", 10, MPFR_RNDN);
        mpfr_init(r11949);
        mpfr_init(r11950);
        mpfr_init(r11951);
        mpfr_init(r11952);
        mpfr_init(r11953);
        mpfr_init(r11954);
        mpfr_init(r11955);
        mpfr_init(r11956);
        mpfr_init(r11957);
        mpfr_init(r11958);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r11942, x, MPFR_RNDN);
        mpfr_set_d(r11943, y, MPFR_RNDN);
        mpfr_tan(r11944, r11943, MPFR_RNDN);
        mpfr_set_d(r11945, z, MPFR_RNDN);
        mpfr_tan(r11946, r11945, MPFR_RNDN);
        mpfr_add(r11947, r11944, r11946, MPFR_RNDN);
        ;
        mpfr_sin(r11949, r11945, MPFR_RNDN);
        mpfr_mul(r11950, r11944, r11949, MPFR_RNDN);
        mpfr_cos(r11951, r11945, MPFR_RNDN);
        mpfr_div(r11952, r11950, r11951, MPFR_RNDN);
        mpfr_sub(r11953, r11948, r11952, MPFR_RNDN);
        mpfr_div(r11954, r11947, r11953, MPFR_RNDN);
        mpfr_set_d(r11955, a, MPFR_RNDN);
        mpfr_tan(r11956, r11955, MPFR_RNDN);
        mpfr_sub(r11957, r11954, r11956, MPFR_RNDN);
        mpfr_add(r11958, r11942, r11957, MPFR_RNDN);
        return mpfr_get_d(r11958, MPFR_RNDN);
}

