#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 r33628 = x;
        float r33629 = y;
        float r33630 = z;
        float r33631 = fma(r33628, r33629, r33630);
        float r33632 = 1.0f;
        float r33633 = r33628 * r33629;
        float r33634 = r33633 + r33630;
        float r33635 = r33632 + r33634;
        float r33636 = r33631 - r33635;
        return r33636;
}

double f_id(double x, double y, double z) {
        double r33637 = x;
        double r33638 = y;
        double r33639 = z;
        double r33640 = fma(r33637, r33638, r33639);
        double r33641 = 1.0;
        double r33642 = r33637 * r33638;
        double r33643 = r33642 + r33639;
        double r33644 = r33641 + r33643;
        double r33645 = r33640 - r33644;
        return r33645;
}


double f_of(float x, float y, float z) {
        float r33646 = z;
        float r33647 = -1.6343379528750245e+107f;
        bool r33648 = r33646 <= r33647;
        float r33649 = x;
        float r33650 = y;
        float r33651 = fma(r33649, r33650, r33646);
        float r33652 = r33650 * r33649;
        float r33653 = r33651 - r33652;
        float r33654 = r33653 - r33646;
        float r33655 = exp(r33654);
        float r33656 = log(r33655);
        float r33657 = 1.0f;
        float r33658 = r33656 - r33657;
        float r33659 = exp(r33658);
        float r33660 = log(r33659);
        float r33661 = 3.5909170849577044e+153f;
        bool r33662 = r33646 <= r33661;
        float r33663 = r33651 - r33646;
        float r33664 = r33663 - r33652;
        float r33665 = r33664 - r33657;
        float r33666 = exp(r33665);
        float r33667 = log(r33666);
        float r33668 = r33662 ? r33667 : r33660;
        float r33669 = r33648 ? r33660 : r33668;
        return r33669;
}

double f_od(double x, double y, double z) {
        double r33670 = z;
        double r33671 = -1.6343379528750245e+107;
        bool r33672 = r33670 <= r33671;
        double r33673 = x;
        double r33674 = y;
        double r33675 = fma(r33673, r33674, r33670);
        double r33676 = r33674 * r33673;
        double r33677 = r33675 - r33676;
        double r33678 = r33677 - r33670;
        double r33679 = exp(r33678);
        double r33680 = log(r33679);
        double r33681 = 1.0;
        double r33682 = r33680 - r33681;
        double r33683 = exp(r33682);
        double r33684 = log(r33683);
        double r33685 = 3.5909170849577044e+153;
        bool r33686 = r33670 <= r33685;
        double r33687 = r33675 - r33670;
        double r33688 = r33687 - r33676;
        double r33689 = r33688 - r33681;
        double r33690 = exp(r33689);
        double r33691 = log(r33690);
        double r33692 = r33686 ? r33691 : r33684;
        double r33693 = r33672 ? r33684 : r33692;
        return r33693;
}

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 r33694, r33695, r33696, r33697, r33698, r33699, r33700, r33701, r33702;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r33694);
        mpfr_init(r33695);
        mpfr_init(r33696);
        mpfr_init(r33697);
        mpfr_init_set_str(r33698, "1", 10, MPFR_RNDN);
        mpfr_init(r33699);
        mpfr_init(r33700);
        mpfr_init(r33701);
        mpfr_init(r33702);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r33694, x, MPFR_RNDN);
        mpfr_set_d(r33695, y, MPFR_RNDN);
        mpfr_set_d(r33696, z, MPFR_RNDN);
        mpfr_fma(r33697, r33694, r33695, r33696, MPFR_RNDN);
        ;
        mpfr_mul(r33699, r33694, r33695, MPFR_RNDN);
        mpfr_add(r33700, r33699, r33696, MPFR_RNDN);
        mpfr_add(r33701, r33698, r33700, MPFR_RNDN);
        mpfr_sub(r33702, r33697, r33701, MPFR_RNDN);
        return mpfr_get_d(r33702, MPFR_RNDN);
}

static mpfr_t r33703, r33704, r33705, r33706, r33707, r33708, r33709, r33710, r33711, r33712, r33713, r33714, r33715, r33716, r33717, r33718, r33719, r33720, r33721, r33722, r33723, r33724, r33725, r33726;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r33703);
        mpfr_init_set_str(r33704, "-1.6343379528750245e+107", 10, MPFR_RNDN);
        mpfr_init(r33705);
        mpfr_init(r33706);
        mpfr_init(r33707);
        mpfr_init(r33708);
        mpfr_init(r33709);
        mpfr_init(r33710);
        mpfr_init(r33711);
        mpfr_init(r33712);
        mpfr_init(r33713);
        mpfr_init_set_str(r33714, "1", 10, MPFR_RNDN);
        mpfr_init(r33715);
        mpfr_init(r33716);
        mpfr_init(r33717);
        mpfr_init_set_str(r33718, "3.5909170849577044e+153", 10, MPFR_RNDN);
        mpfr_init(r33719);
        mpfr_init(r33720);
        mpfr_init(r33721);
        mpfr_init(r33722);
        mpfr_init(r33723);
        mpfr_init(r33724);
        mpfr_init(r33725);
        mpfr_init(r33726);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r33703, z, MPFR_RNDN);
        ;
        mpfr_set_si(r33705, mpfr_cmp(r33703, r33704) <= 0, MPFR_RNDN);
        mpfr_set_d(r33706, x, MPFR_RNDN);
        mpfr_set_d(r33707, y, MPFR_RNDN);
        mpfr_fma(r33708, r33706, r33707, r33703, MPFR_RNDN);
        mpfr_mul(r33709, r33707, r33706, MPFR_RNDN);
        mpfr_sub(r33710, r33708, r33709, MPFR_RNDN);
        mpfr_sub(r33711, r33710, r33703, MPFR_RNDN);
        mpfr_exp(r33712, r33711, MPFR_RNDN);
        mpfr_log(r33713, r33712, MPFR_RNDN);
        ;
        mpfr_sub(r33715, r33713, r33714, MPFR_RNDN);
        mpfr_exp(r33716, r33715, MPFR_RNDN);
        mpfr_log(r33717, r33716, MPFR_RNDN);
        ;
        mpfr_set_si(r33719, mpfr_cmp(r33703, r33718) <= 0, MPFR_RNDN);
        mpfr_sub(r33720, r33708, r33703, MPFR_RNDN);
        mpfr_sub(r33721, r33720, r33709, MPFR_RNDN);
        mpfr_sub(r33722, r33721, r33714, MPFR_RNDN);
        mpfr_exp(r33723, r33722, MPFR_RNDN);
        mpfr_log(r33724, r33723, MPFR_RNDN);
        if (mpfr_get_si(r33719, MPFR_RNDN)) { mpfr_set(r33725, r33724, MPFR_RNDN); } else { mpfr_set(r33725, r33717, MPFR_RNDN); };
        if (mpfr_get_si(r33705, MPFR_RNDN)) { mpfr_set(r33726, r33717, MPFR_RNDN); } else { mpfr_set(r33726, r33725, MPFR_RNDN); };
        return mpfr_get_d(r33726, MPFR_RNDN);
}

static mpfr_t r33727, r33728, r33729, r33730, r33731, r33732, r33733, r33734, r33735, r33736, r33737, r33738, r33739, r33740, r33741, r33742, r33743, r33744, r33745, r33746, r33747, r33748, r33749, r33750;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r33727);
        mpfr_init_set_str(r33728, "-1.6343379528750245e+107", 10, MPFR_RNDN);
        mpfr_init(r33729);
        mpfr_init(r33730);
        mpfr_init(r33731);
        mpfr_init(r33732);
        mpfr_init(r33733);
        mpfr_init(r33734);
        mpfr_init(r33735);
        mpfr_init(r33736);
        mpfr_init(r33737);
        mpfr_init_set_str(r33738, "1", 10, MPFR_RNDN);
        mpfr_init(r33739);
        mpfr_init(r33740);
        mpfr_init(r33741);
        mpfr_init_set_str(r33742, "3.5909170849577044e+153", 10, MPFR_RNDN);
        mpfr_init(r33743);
        mpfr_init(r33744);
        mpfr_init(r33745);
        mpfr_init(r33746);
        mpfr_init(r33747);
        mpfr_init(r33748);
        mpfr_init(r33749);
        mpfr_init(r33750);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r33727, z, MPFR_RNDN);
        ;
        mpfr_set_si(r33729, mpfr_cmp(r33727, r33728) <= 0, MPFR_RNDN);
        mpfr_set_d(r33730, x, MPFR_RNDN);
        mpfr_set_d(r33731, y, MPFR_RNDN);
        mpfr_fma(r33732, r33730, r33731, r33727, MPFR_RNDN);
        mpfr_mul(r33733, r33731, r33730, MPFR_RNDN);
        mpfr_sub(r33734, r33732, r33733, MPFR_RNDN);
        mpfr_sub(r33735, r33734, r33727, MPFR_RNDN);
        mpfr_exp(r33736, r33735, MPFR_RNDN);
        mpfr_log(r33737, r33736, MPFR_RNDN);
        ;
        mpfr_sub(r33739, r33737, r33738, MPFR_RNDN);
        mpfr_exp(r33740, r33739, MPFR_RNDN);
        mpfr_log(r33741, r33740, MPFR_RNDN);
        ;
        mpfr_set_si(r33743, mpfr_cmp(r33727, r33742) <= 0, MPFR_RNDN);
        mpfr_sub(r33744, r33732, r33727, MPFR_RNDN);
        mpfr_sub(r33745, r33744, r33733, MPFR_RNDN);
        mpfr_sub(r33746, r33745, r33738, MPFR_RNDN);
        mpfr_exp(r33747, r33746, MPFR_RNDN);
        mpfr_log(r33748, r33747, MPFR_RNDN);
        if (mpfr_get_si(r33743, MPFR_RNDN)) { mpfr_set(r33749, r33748, MPFR_RNDN); } else { mpfr_set(r33749, r33741, MPFR_RNDN); };
        if (mpfr_get_si(r33729, MPFR_RNDN)) { mpfr_set(r33750, r33741, MPFR_RNDN); } else { mpfr_set(r33750, r33749, MPFR_RNDN); };
        return mpfr_get_d(r33750, MPFR_RNDN);
}

