#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 r37776 = x;
        float r37777 = y;
        float r37778 = z;
        float r37779 = fma(r37776, r37777, r37778);
        float r37780 = 1;
        float r37781 = r37776 * r37777;
        float r37782 = r37781 + r37778;
        float r37783 = r37780 + r37782;
        float r37784 = r37779 - r37783;
        return r37784;
}

double f_id(double x, double y, double z) {
        double r37785 = x;
        double r37786 = y;
        double r37787 = z;
        double r37788 = fma(r37785, r37786, r37787);
        double r37789 = 1;
        double r37790 = r37785 * r37786;
        double r37791 = r37790 + r37787;
        double r37792 = r37789 + r37791;
        double r37793 = r37788 - r37792;
        return r37793;
}


double f_of(float x, float y, float z) {
        float r37794 = x;
        float r37795 = y;
        float r37796 = z;
        float r37797 = fma(r37794, r37795, r37796);
        float r37798 = r37797 - r37796;
        float r37799 = 1;
        float r37800 = r37795 * r37794;
        float r37801 = r37799 + r37800;
        float r37802 = r37798 - r37801;
        float r37803 = cbrt(r37802);
        float r37804 = r37803 * r37803;
        float r37805 = r37804 * r37803;
        return r37805;
}

double f_od(double x, double y, double z) {
        double r37806 = x;
        double r37807 = y;
        double r37808 = z;
        double r37809 = fma(r37806, r37807, r37808);
        double r37810 = r37809 - r37808;
        double r37811 = 1;
        double r37812 = r37807 * r37806;
        double r37813 = r37811 + r37812;
        double r37814 = r37810 - r37813;
        double r37815 = cbrt(r37814);
        double r37816 = r37815 * r37815;
        double r37817 = r37816 * r37815;
        return r37817;
}

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 r37818, r37819, r37820, r37821, r37822, r37823, r37824, r37825, r37826;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37818);
        mpfr_init(r37819);
        mpfr_init(r37820);
        mpfr_init(r37821);
        mpfr_init_set_str(r37822, "1", 10, MPFR_RNDN);
        mpfr_init(r37823);
        mpfr_init(r37824);
        mpfr_init(r37825);
        mpfr_init(r37826);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r37818, x, MPFR_RNDN);
        mpfr_set_d(r37819, y, MPFR_RNDN);
        mpfr_set_d(r37820, z, MPFR_RNDN);
        mpfr_fma(r37821, r37818, r37819, r37820, MPFR_RNDN);
        ;
        mpfr_mul(r37823, r37818, r37819, MPFR_RNDN);
        mpfr_add(r37824, r37823, r37820, MPFR_RNDN);
        mpfr_add(r37825, r37822, r37824, MPFR_RNDN);
        mpfr_sub(r37826, r37821, r37825, MPFR_RNDN);
        return mpfr_get_d(r37826, MPFR_RNDN);
}

static mpfr_t r37827, r37828, r37829, r37830, r37831, r37832, r37833, r37834, r37835, r37836, r37837, r37838;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37827);
        mpfr_init(r37828);
        mpfr_init(r37829);
        mpfr_init(r37830);
        mpfr_init(r37831);
        mpfr_init_set_str(r37832, "1", 10, MPFR_RNDN);
        mpfr_init(r37833);
        mpfr_init(r37834);
        mpfr_init(r37835);
        mpfr_init(r37836);
        mpfr_init(r37837);
        mpfr_init(r37838);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r37827, x, MPFR_RNDN);
        mpfr_set_d(r37828, y, MPFR_RNDN);
        mpfr_set_d(r37829, z, MPFR_RNDN);
        mpfr_fma(r37830, r37827, r37828, r37829, MPFR_RNDN);
        mpfr_sub(r37831, r37830, r37829, MPFR_RNDN);
        ;
        mpfr_mul(r37833, r37828, r37827, MPFR_RNDN);
        mpfr_add(r37834, r37832, r37833, MPFR_RNDN);
        mpfr_sub(r37835, r37831, r37834, MPFR_RNDN);
        mpfr_cbrt(r37836, r37835, MPFR_RNDN);
        mpfr_mul(r37837, r37836, r37836, MPFR_RNDN);
        mpfr_mul(r37838, r37837, r37836, MPFR_RNDN);
        return mpfr_get_d(r37838, MPFR_RNDN);
}

static mpfr_t r37839, r37840, r37841, r37842, r37843, r37844, r37845, r37846, r37847, r37848, r37849, r37850;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37839);
        mpfr_init(r37840);
        mpfr_init(r37841);
        mpfr_init(r37842);
        mpfr_init(r37843);
        mpfr_init_set_str(r37844, "1", 10, MPFR_RNDN);
        mpfr_init(r37845);
        mpfr_init(r37846);
        mpfr_init(r37847);
        mpfr_init(r37848);
        mpfr_init(r37849);
        mpfr_init(r37850);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r37839, x, MPFR_RNDN);
        mpfr_set_d(r37840, y, MPFR_RNDN);
        mpfr_set_d(r37841, z, MPFR_RNDN);
        mpfr_fma(r37842, r37839, r37840, r37841, MPFR_RNDN);
        mpfr_sub(r37843, r37842, r37841, MPFR_RNDN);
        ;
        mpfr_mul(r37845, r37840, r37839, MPFR_RNDN);
        mpfr_add(r37846, r37844, r37845, MPFR_RNDN);
        mpfr_sub(r37847, r37843, r37846, MPFR_RNDN);
        mpfr_cbrt(r37848, r37847, MPFR_RNDN);
        mpfr_mul(r37849, r37848, r37848, MPFR_RNDN);
        mpfr_mul(r37850, r37849, r37848, MPFR_RNDN);
        return mpfr_get_d(r37850, MPFR_RNDN);
}

