#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 r37586 = x;
        float r37587 = y;
        float r37588 = z;
        float r37589 = fma(r37586, r37587, r37588);
        float r37590 = 1;
        float r37591 = r37586 * r37587;
        float r37592 = r37591 + r37588;
        float r37593 = r37590 + r37592;
        float r37594 = r37589 - r37593;
        return r37594;
}

double f_id(double x, double y, double z) {
        double r37595 = x;
        double r37596 = y;
        double r37597 = z;
        double r37598 = fma(r37595, r37596, r37597);
        double r37599 = 1;
        double r37600 = r37595 * r37596;
        double r37601 = r37600 + r37597;
        double r37602 = r37599 + r37601;
        double r37603 = r37598 - r37602;
        return r37603;
}


double f_of(float x, float y, float z) {
        float r37604 = z;
        float r37605 = -379930112174.3745;
        bool r37606 = r37604 <= r37605;
        float r37607 = x;
        float r37608 = y;
        float r37609 = fma(r37607, r37608, r37604);
        float r37610 = r37609 - r37604;
        float r37611 = 1;
        float r37612 = r37608 * r37607;
        float r37613 = r37611 + r37612;
        float r37614 = r37610 - r37613;
        float r37615 = cbrt(r37614);
        float r37616 = r37615 * r37615;
        float r37617 = r37616 * r37615;
        float r37618 = cbrt(r37617);
        float r37619 = r37616 * r37618;
        float r37620 = 3.962180353379337e+17;
        bool r37621 = r37604 <= r37620;
        float r37622 = r37609 - r37612;
        float r37623 = r37604 + r37611;
        float r37624 = r37622 - r37623;
        float r37625 = r37621 ? r37624 : r37619;
        float r37626 = r37606 ? r37619 : r37625;
        return r37626;
}

double f_od(double x, double y, double z) {
        double r37627 = z;
        double r37628 = -379930112174.3745;
        bool r37629 = r37627 <= r37628;
        double r37630 = x;
        double r37631 = y;
        double r37632 = fma(r37630, r37631, r37627);
        double r37633 = r37632 - r37627;
        double r37634 = 1;
        double r37635 = r37631 * r37630;
        double r37636 = r37634 + r37635;
        double r37637 = r37633 - r37636;
        double r37638 = cbrt(r37637);
        double r37639 = r37638 * r37638;
        double r37640 = r37639 * r37638;
        double r37641 = cbrt(r37640);
        double r37642 = r37639 * r37641;
        double r37643 = 3.962180353379337e+17;
        bool r37644 = r37627 <= r37643;
        double r37645 = r37632 - r37635;
        double r37646 = r37627 + r37634;
        double r37647 = r37645 - r37646;
        double r37648 = r37644 ? r37647 : r37642;
        double r37649 = r37629 ? r37642 : r37648;
        return r37649;
}

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 r37650, r37651, r37652, r37653, r37654, r37655, r37656, r37657, r37658;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37650);
        mpfr_init(r37651);
        mpfr_init(r37652);
        mpfr_init(r37653);
        mpfr_init_set_str(r37654, "1", 10, MPFR_RNDN);
        mpfr_init(r37655);
        mpfr_init(r37656);
        mpfr_init(r37657);
        mpfr_init(r37658);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r37650, x, MPFR_RNDN);
        mpfr_set_d(r37651, y, MPFR_RNDN);
        mpfr_set_d(r37652, z, MPFR_RNDN);
        mpfr_fma(r37653, r37650, r37651, r37652, MPFR_RNDN);
        ;
        mpfr_mul(r37655, r37650, r37651, MPFR_RNDN);
        mpfr_add(r37656, r37655, r37652, MPFR_RNDN);
        mpfr_add(r37657, r37654, r37656, MPFR_RNDN);
        mpfr_sub(r37658, r37653, r37657, MPFR_RNDN);
        return mpfr_get_d(r37658, MPFR_RNDN);
}

static mpfr_t r37659, r37660, r37661, r37662, r37663, r37664, r37665, r37666, r37667, r37668, r37669, r37670, r37671, r37672, r37673, r37674, r37675, r37676, r37677, r37678, r37679, r37680, r37681;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37659);
        mpfr_init_set_str(r37660, "-379930112174.3745", 10, MPFR_RNDN);
        mpfr_init(r37661);
        mpfr_init(r37662);
        mpfr_init(r37663);
        mpfr_init(r37664);
        mpfr_init(r37665);
        mpfr_init_set_str(r37666, "1", 10, MPFR_RNDN);
        mpfr_init(r37667);
        mpfr_init(r37668);
        mpfr_init(r37669);
        mpfr_init(r37670);
        mpfr_init(r37671);
        mpfr_init(r37672);
        mpfr_init(r37673);
        mpfr_init(r37674);
        mpfr_init_set_str(r37675, "3.962180353379337e+17", 10, MPFR_RNDN);
        mpfr_init(r37676);
        mpfr_init(r37677);
        mpfr_init(r37678);
        mpfr_init(r37679);
        mpfr_init(r37680);
        mpfr_init(r37681);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r37659, z, MPFR_RNDN);
        ;
        mpfr_set_si(r37661, mpfr_cmp(r37659, r37660) <= 0, MPFR_RNDN);
        mpfr_set_d(r37662, x, MPFR_RNDN);
        mpfr_set_d(r37663, y, MPFR_RNDN);
        mpfr_fma(r37664, r37662, r37663, r37659, MPFR_RNDN);
        mpfr_sub(r37665, r37664, r37659, MPFR_RNDN);
        ;
        mpfr_mul(r37667, r37663, r37662, MPFR_RNDN);
        mpfr_add(r37668, r37666, r37667, MPFR_RNDN);
        mpfr_sub(r37669, r37665, r37668, MPFR_RNDN);
        mpfr_cbrt(r37670, r37669, MPFR_RNDN);
        mpfr_mul(r37671, r37670, r37670, MPFR_RNDN);
        mpfr_mul(r37672, r37671, r37670, MPFR_RNDN);
        mpfr_cbrt(r37673, r37672, MPFR_RNDN);
        mpfr_mul(r37674, r37671, r37673, MPFR_RNDN);
        ;
        mpfr_set_si(r37676, mpfr_cmp(r37659, r37675) <= 0, MPFR_RNDN);
        mpfr_sub(r37677, r37664, r37667, MPFR_RNDN);
        mpfr_add(r37678, r37659, r37666, MPFR_RNDN);
        mpfr_sub(r37679, r37677, r37678, MPFR_RNDN);
        if (mpfr_get_si(r37676, MPFR_RNDN)) { mpfr_set(r37680, r37679, MPFR_RNDN); } else { mpfr_set(r37680, r37674, MPFR_RNDN); };
        if (mpfr_get_si(r37661, MPFR_RNDN)) { mpfr_set(r37681, r37674, MPFR_RNDN); } else { mpfr_set(r37681, r37680, MPFR_RNDN); };
        return mpfr_get_d(r37681, MPFR_RNDN);
}

static mpfr_t r37682, r37683, r37684, r37685, r37686, r37687, r37688, r37689, r37690, r37691, r37692, r37693, r37694, r37695, r37696, r37697, r37698, r37699, r37700, r37701, r37702, r37703, r37704;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37682);
        mpfr_init_set_str(r37683, "-379930112174.3745", 10, MPFR_RNDN);
        mpfr_init(r37684);
        mpfr_init(r37685);
        mpfr_init(r37686);
        mpfr_init(r37687);
        mpfr_init(r37688);
        mpfr_init_set_str(r37689, "1", 10, MPFR_RNDN);
        mpfr_init(r37690);
        mpfr_init(r37691);
        mpfr_init(r37692);
        mpfr_init(r37693);
        mpfr_init(r37694);
        mpfr_init(r37695);
        mpfr_init(r37696);
        mpfr_init(r37697);
        mpfr_init_set_str(r37698, "3.962180353379337e+17", 10, MPFR_RNDN);
        mpfr_init(r37699);
        mpfr_init(r37700);
        mpfr_init(r37701);
        mpfr_init(r37702);
        mpfr_init(r37703);
        mpfr_init(r37704);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r37682, z, MPFR_RNDN);
        ;
        mpfr_set_si(r37684, mpfr_cmp(r37682, r37683) <= 0, MPFR_RNDN);
        mpfr_set_d(r37685, x, MPFR_RNDN);
        mpfr_set_d(r37686, y, MPFR_RNDN);
        mpfr_fma(r37687, r37685, r37686, r37682, MPFR_RNDN);
        mpfr_sub(r37688, r37687, r37682, MPFR_RNDN);
        ;
        mpfr_mul(r37690, r37686, r37685, MPFR_RNDN);
        mpfr_add(r37691, r37689, r37690, MPFR_RNDN);
        mpfr_sub(r37692, r37688, r37691, MPFR_RNDN);
        mpfr_cbrt(r37693, r37692, MPFR_RNDN);
        mpfr_mul(r37694, r37693, r37693, MPFR_RNDN);
        mpfr_mul(r37695, r37694, r37693, MPFR_RNDN);
        mpfr_cbrt(r37696, r37695, MPFR_RNDN);
        mpfr_mul(r37697, r37694, r37696, MPFR_RNDN);
        ;
        mpfr_set_si(r37699, mpfr_cmp(r37682, r37698) <= 0, MPFR_RNDN);
        mpfr_sub(r37700, r37687, r37690, MPFR_RNDN);
        mpfr_add(r37701, r37682, r37689, MPFR_RNDN);
        mpfr_sub(r37702, r37700, r37701, MPFR_RNDN);
        if (mpfr_get_si(r37699, MPFR_RNDN)) { mpfr_set(r37703, r37702, MPFR_RNDN); } else { mpfr_set(r37703, r37697, MPFR_RNDN); };
        if (mpfr_get_si(r37684, MPFR_RNDN)) { mpfr_set(r37704, r37697, MPFR_RNDN); } else { mpfr_set(r37704, r37703, MPFR_RNDN); };
        return mpfr_get_d(r37704, MPFR_RNDN);
}

