#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "simple fma test";

double f_if(float x, float y, float z) {
        float r37664 = x;
        float r37665 = y;
        float r37666 = z;
        float r37667 = fma(r37664, r37665, r37666);
        float r37668 = 1;
        float r37669 = r37664 * r37665;
        float r37670 = r37669 + r37666;
        float r37671 = r37668 + r37670;
        float r37672 = r37667 - r37671;
        return r37672;
}

double f_id(double x, double y, double z) {
        double r37673 = x;
        double r37674 = y;
        double r37675 = z;
        double r37676 = fma(r37673, r37674, r37675);
        double r37677 = 1;
        double r37678 = r37673 * r37674;
        double r37679 = r37678 + r37675;
        double r37680 = r37677 + r37679;
        double r37681 = r37676 - r37680;
        return r37681;
}


double f_of(float x, float y, float z) {
        float r37682 = z;
        float r37683 = -354554309650.3642;
        bool r37684 = r37682 <= r37683;
        float r37685 = x;
        float r37686 = y;
        float r37687 = fma(r37685, r37686, r37682);
        float r37688 = r37687 - r37682;
        float r37689 = 1;
        float r37690 = r37686 * r37685;
        float r37691 = r37689 + r37690;
        float r37692 = r37688 - r37691;
        float r37693 = cbrt(r37692);
        float r37694 = r37693 * r37693;
        float r37695 = r37694 * r37693;
        float r37696 = cbrt(r37695);
        float r37697 = r37694 * r37696;
        float r37698 = 5.692299011485595e+43;
        bool r37699 = r37682 <= r37698;
        float r37700 = r37687 - r37690;
        float r37701 = r37682 + r37689;
        float r37702 = r37700 - r37701;
        float r37703 = r37699 ? r37702 : r37697;
        float r37704 = r37684 ? r37697 : r37703;
        return r37704;
}

double f_od(double x, double y, double z) {
        double r37705 = z;
        double r37706 = -354554309650.3642;
        bool r37707 = r37705 <= r37706;
        double r37708 = x;
        double r37709 = y;
        double r37710 = fma(r37708, r37709, r37705);
        double r37711 = r37710 - r37705;
        double r37712 = 1;
        double r37713 = r37709 * r37708;
        double r37714 = r37712 + r37713;
        double r37715 = r37711 - r37714;
        double r37716 = cbrt(r37715);
        double r37717 = r37716 * r37716;
        double r37718 = r37717 * r37716;
        double r37719 = cbrt(r37718);
        double r37720 = r37717 * r37719;
        double r37721 = 5.692299011485595e+43;
        bool r37722 = r37705 <= r37721;
        double r37723 = r37710 - r37713;
        double r37724 = r37705 + r37712;
        double r37725 = r37723 - r37724;
        double r37726 = r37722 ? r37725 : r37720;
        double r37727 = r37707 ? r37720 : r37726;
        return r37727;
}

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 r37728, r37729, r37730, r37731, r37732, r37733, r37734, r37735, r37736;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37728);
        mpfr_init(r37729);
        mpfr_init(r37730);
        mpfr_init(r37731);
        mpfr_init_set_str(r37732, "1", 10, MPFR_RNDN);
        mpfr_init(r37733);
        mpfr_init(r37734);
        mpfr_init(r37735);
        mpfr_init(r37736);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r37728, x, MPFR_RNDN);
        mpfr_set_d(r37729, y, MPFR_RNDN);
        mpfr_set_d(r37730, z, MPFR_RNDN);
        mpfr_fma(r37731, r37728, r37729, r37730, MPFR_RNDN);
        ;
        mpfr_mul(r37733, r37728, r37729, MPFR_RNDN);
        mpfr_add(r37734, r37733, r37730, MPFR_RNDN);
        mpfr_add(r37735, r37732, r37734, MPFR_RNDN);
        mpfr_sub(r37736, r37731, r37735, MPFR_RNDN);
        return mpfr_get_d(r37736, MPFR_RNDN);
}

static mpfr_t r37737, r37738, r37739, r37740, r37741, r37742, r37743, r37744, r37745, r37746, r37747, r37748, r37749, r37750, r37751, r37752, r37753, r37754, r37755, r37756, r37757, r37758, r37759;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37737);
        mpfr_init_set_str(r37738, "-354554309650.3642", 10, MPFR_RNDN);
        mpfr_init(r37739);
        mpfr_init(r37740);
        mpfr_init(r37741);
        mpfr_init(r37742);
        mpfr_init(r37743);
        mpfr_init_set_str(r37744, "1", 10, MPFR_RNDN);
        mpfr_init(r37745);
        mpfr_init(r37746);
        mpfr_init(r37747);
        mpfr_init(r37748);
        mpfr_init(r37749);
        mpfr_init(r37750);
        mpfr_init(r37751);
        mpfr_init(r37752);
        mpfr_init_set_str(r37753, "5.692299011485595e+43", 10, MPFR_RNDN);
        mpfr_init(r37754);
        mpfr_init(r37755);
        mpfr_init(r37756);
        mpfr_init(r37757);
        mpfr_init(r37758);
        mpfr_init(r37759);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r37737, z, MPFR_RNDN);
        ;
        mpfr_set_si(r37739, mpfr_cmp(r37737, r37738) <= 0, MPFR_RNDN);
        mpfr_set_d(r37740, x, MPFR_RNDN);
        mpfr_set_d(r37741, y, MPFR_RNDN);
        mpfr_fma(r37742, r37740, r37741, r37737, MPFR_RNDN);
        mpfr_sub(r37743, r37742, r37737, MPFR_RNDN);
        ;
        mpfr_mul(r37745, r37741, r37740, MPFR_RNDN);
        mpfr_add(r37746, r37744, r37745, MPFR_RNDN);
        mpfr_sub(r37747, r37743, r37746, MPFR_RNDN);
        mpfr_cbrt(r37748, r37747, MPFR_RNDN);
        mpfr_mul(r37749, r37748, r37748, MPFR_RNDN);
        mpfr_mul(r37750, r37749, r37748, MPFR_RNDN);
        mpfr_cbrt(r37751, r37750, MPFR_RNDN);
        mpfr_mul(r37752, r37749, r37751, MPFR_RNDN);
        ;
        mpfr_set_si(r37754, mpfr_cmp(r37737, r37753) <= 0, MPFR_RNDN);
        mpfr_sub(r37755, r37742, r37745, MPFR_RNDN);
        mpfr_add(r37756, r37737, r37744, MPFR_RNDN);
        mpfr_sub(r37757, r37755, r37756, MPFR_RNDN);
        if (mpfr_get_si(r37754, MPFR_RNDN)) { mpfr_set(r37758, r37757, MPFR_RNDN); } else { mpfr_set(r37758, r37752, MPFR_RNDN); };
        if (mpfr_get_si(r37739, MPFR_RNDN)) { mpfr_set(r37759, r37752, MPFR_RNDN); } else { mpfr_set(r37759, r37758, MPFR_RNDN); };
        return mpfr_get_d(r37759, MPFR_RNDN);
}

static mpfr_t r37760, r37761, r37762, r37763, r37764, r37765, r37766, r37767, r37768, r37769, r37770, r37771, r37772, r37773, r37774, r37775, r37776, r37777, r37778, r37779, r37780, r37781, r37782;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37760);
        mpfr_init_set_str(r37761, "-354554309650.3642", 10, MPFR_RNDN);
        mpfr_init(r37762);
        mpfr_init(r37763);
        mpfr_init(r37764);
        mpfr_init(r37765);
        mpfr_init(r37766);
        mpfr_init_set_str(r37767, "1", 10, MPFR_RNDN);
        mpfr_init(r37768);
        mpfr_init(r37769);
        mpfr_init(r37770);
        mpfr_init(r37771);
        mpfr_init(r37772);
        mpfr_init(r37773);
        mpfr_init(r37774);
        mpfr_init(r37775);
        mpfr_init_set_str(r37776, "5.692299011485595e+43", 10, MPFR_RNDN);
        mpfr_init(r37777);
        mpfr_init(r37778);
        mpfr_init(r37779);
        mpfr_init(r37780);
        mpfr_init(r37781);
        mpfr_init(r37782);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r37760, z, MPFR_RNDN);
        ;
        mpfr_set_si(r37762, mpfr_cmp(r37760, r37761) <= 0, MPFR_RNDN);
        mpfr_set_d(r37763, x, MPFR_RNDN);
        mpfr_set_d(r37764, y, MPFR_RNDN);
        mpfr_fma(r37765, r37763, r37764, r37760, MPFR_RNDN);
        mpfr_sub(r37766, r37765, r37760, MPFR_RNDN);
        ;
        mpfr_mul(r37768, r37764, r37763, MPFR_RNDN);
        mpfr_add(r37769, r37767, r37768, MPFR_RNDN);
        mpfr_sub(r37770, r37766, r37769, MPFR_RNDN);
        mpfr_cbrt(r37771, r37770, MPFR_RNDN);
        mpfr_mul(r37772, r37771, r37771, MPFR_RNDN);
        mpfr_mul(r37773, r37772, r37771, MPFR_RNDN);
        mpfr_cbrt(r37774, r37773, MPFR_RNDN);
        mpfr_mul(r37775, r37772, r37774, MPFR_RNDN);
        ;
        mpfr_set_si(r37777, mpfr_cmp(r37760, r37776) <= 0, MPFR_RNDN);
        mpfr_sub(r37778, r37765, r37768, MPFR_RNDN);
        mpfr_add(r37779, r37760, r37767, MPFR_RNDN);
        mpfr_sub(r37780, r37778, r37779, MPFR_RNDN);
        if (mpfr_get_si(r37777, MPFR_RNDN)) { mpfr_set(r37781, r37780, MPFR_RNDN); } else { mpfr_set(r37781, r37775, MPFR_RNDN); };
        if (mpfr_get_si(r37762, MPFR_RNDN)) { mpfr_set(r37782, r37775, MPFR_RNDN); } else { mpfr_set(r37782, r37781, MPFR_RNDN); };
        return mpfr_get_d(r37782, MPFR_RNDN);
}

