#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 r10909 = x;
        float r10910 = y;
        float r10911 = z;
        float r10912 = r10910 + r10911;
        float r10913 = tan(r10912);
        float r10914 = a;
        float r10915 = tan(r10914);
        float r10916 = r10913 - r10915;
        float r10917 = r10909 + r10916;
        return r10917;
}

double f_id(double x, double y, double z, double a) {
        double r10918 = x;
        double r10919 = y;
        double r10920 = z;
        double r10921 = r10919 + r10920;
        double r10922 = tan(r10921);
        double r10923 = a;
        double r10924 = tan(r10923);
        double r10925 = r10922 - r10924;
        double r10926 = r10918 + r10925;
        return r10926;
}


double f_of(float x, float y, float z, float a) {
        float r10927 = z;
        float r10928 = tan(r10927);
        float r10929 = y;
        float r10930 = tan(r10929);
        float r10931 = r10928 * r10930;
        float r10932 = fma(r10931, r10931, r10931);
        float r10933 = r10930 + r10928;
        float r10934 = fma(r10932, r10933, r10933);
        float r10935 = 1.0f;
        float r10936 = 3.0f;
        float r10937 = pow(r10931, r10936);
        float r10938 = r10935 - r10937;
        float r10939 = r10934 / r10938;
        float r10940 = a;
        float r10941 = tan(r10940);
        float r10942 = r10939 - r10941;
        float r10943 = x;
        float r10944 = r10942 + r10943;
        return r10944;
}

double f_od(double x, double y, double z, double a) {
        double r10945 = z;
        double r10946 = tan(r10945);
        double r10947 = y;
        double r10948 = tan(r10947);
        double r10949 = r10946 * r10948;
        double r10950 = fma(r10949, r10949, r10949);
        double r10951 = r10948 + r10946;
        double r10952 = fma(r10950, r10951, r10951);
        double r10953 = 1.0;
        double r10954 = 3.0;
        double r10955 = pow(r10949, r10954);
        double r10956 = r10953 - r10955;
        double r10957 = r10952 / r10956;
        double r10958 = a;
        double r10959 = tan(r10958);
        double r10960 = r10957 - r10959;
        double r10961 = x;
        double r10962 = r10960 + r10961;
        return r10962;
}

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 r10963, r10964, r10965, r10966, r10967, r10968, r10969, r10970, r10971;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10963);
        mpfr_init(r10964);
        mpfr_init(r10965);
        mpfr_init(r10966);
        mpfr_init(r10967);
        mpfr_init(r10968);
        mpfr_init(r10969);
        mpfr_init(r10970);
        mpfr_init(r10971);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r10963, x, MPFR_RNDN);
        mpfr_set_d(r10964, y, MPFR_RNDN);
        mpfr_set_d(r10965, z, MPFR_RNDN);
        mpfr_add(r10966, r10964, r10965, MPFR_RNDN);
        mpfr_tan(r10967, r10966, MPFR_RNDN);
        mpfr_set_d(r10968, a, MPFR_RNDN);
        mpfr_tan(r10969, r10968, MPFR_RNDN);
        mpfr_sub(r10970, r10967, r10969, MPFR_RNDN);
        mpfr_add(r10971, r10963, r10970, MPFR_RNDN);
        return mpfr_get_d(r10971, MPFR_RNDN);
}

static mpfr_t r10972, r10973, r10974, r10975, r10976, r10977, r10978, r10979, r10980, r10981, r10982, r10983, r10984, r10985, r10986, r10987, r10988, r10989;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10972);
        mpfr_init(r10973);
        mpfr_init(r10974);
        mpfr_init(r10975);
        mpfr_init(r10976);
        mpfr_init(r10977);
        mpfr_init(r10978);
        mpfr_init(r10979);
        mpfr_init_set_str(r10980, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10981, "3", 10, MPFR_RNDN);
        mpfr_init(r10982);
        mpfr_init(r10983);
        mpfr_init(r10984);
        mpfr_init(r10985);
        mpfr_init(r10986);
        mpfr_init(r10987);
        mpfr_init(r10988);
        mpfr_init(r10989);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r10972, z, MPFR_RNDN);
        mpfr_tan(r10973, r10972, MPFR_RNDN);
        mpfr_set_d(r10974, y, MPFR_RNDN);
        mpfr_tan(r10975, r10974, MPFR_RNDN);
        mpfr_mul(r10976, r10973, r10975, MPFR_RNDN);
        mpfr_fma(r10977, r10976, r10976, r10976, MPFR_RNDN);
        mpfr_add(r10978, r10975, r10973, MPFR_RNDN);
        mpfr_fma(r10979, r10977, r10978, r10978, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r10982, r10976, r10981, MPFR_RNDN);
        mpfr_sub(r10983, r10980, r10982, MPFR_RNDN);
        mpfr_div(r10984, r10979, r10983, MPFR_RNDN);
        mpfr_set_d(r10985, a, MPFR_RNDN);
        mpfr_tan(r10986, r10985, MPFR_RNDN);
        mpfr_sub(r10987, r10984, r10986, MPFR_RNDN);
        mpfr_set_d(r10988, x, MPFR_RNDN);
        mpfr_add(r10989, r10987, r10988, MPFR_RNDN);
        return mpfr_get_d(r10989, MPFR_RNDN);
}

static mpfr_t r10990, r10991, r10992, r10993, r10994, r10995, r10996, r10997, r10998, r10999, r11000, r11001, r11002, r11003, r11004, r11005, r11006, r11007;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10990);
        mpfr_init(r10991);
        mpfr_init(r10992);
        mpfr_init(r10993);
        mpfr_init(r10994);
        mpfr_init(r10995);
        mpfr_init(r10996);
        mpfr_init(r10997);
        mpfr_init_set_str(r10998, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10999, "3", 10, MPFR_RNDN);
        mpfr_init(r11000);
        mpfr_init(r11001);
        mpfr_init(r11002);
        mpfr_init(r11003);
        mpfr_init(r11004);
        mpfr_init(r11005);
        mpfr_init(r11006);
        mpfr_init(r11007);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r10990, z, MPFR_RNDN);
        mpfr_tan(r10991, r10990, MPFR_RNDN);
        mpfr_set_d(r10992, y, MPFR_RNDN);
        mpfr_tan(r10993, r10992, MPFR_RNDN);
        mpfr_mul(r10994, r10991, r10993, MPFR_RNDN);
        mpfr_fma(r10995, r10994, r10994, r10994, MPFR_RNDN);
        mpfr_add(r10996, r10993, r10991, MPFR_RNDN);
        mpfr_fma(r10997, r10995, r10996, r10996, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r11000, r10994, r10999, MPFR_RNDN);
        mpfr_sub(r11001, r10998, r11000, MPFR_RNDN);
        mpfr_div(r11002, r10997, r11001, MPFR_RNDN);
        mpfr_set_d(r11003, a, MPFR_RNDN);
        mpfr_tan(r11004, r11003, MPFR_RNDN);
        mpfr_sub(r11005, r11002, r11004, MPFR_RNDN);
        mpfr_set_d(r11006, x, MPFR_RNDN);
        mpfr_add(r11007, r11005, r11006, MPFR_RNDN);
        return mpfr_get_d(r11007, MPFR_RNDN);
}

