#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 r37787 = x;
        float r37788 = y;
        float r37789 = z;
        float r37790 = fma(r37787, r37788, r37789);
        float r37791 = 1;
        float r37792 = r37787 * r37788;
        float r37793 = r37792 + r37789;
        float r37794 = r37791 + r37793;
        float r37795 = r37790 - r37794;
        return r37795;
}

double f_id(double x, double y, double z) {
        double r37796 = x;
        double r37797 = y;
        double r37798 = z;
        double r37799 = fma(r37796, r37797, r37798);
        double r37800 = 1;
        double r37801 = r37796 * r37797;
        double r37802 = r37801 + r37798;
        double r37803 = r37800 + r37802;
        double r37804 = r37799 - r37803;
        return r37804;
}


double f_of(float x, float y, float z) {
        float r37805 = z;
        float r37806 = -379930112174.3745;
        bool r37807 = r37805 <= r37806;
        float r37808 = x;
        float r37809 = y;
        float r37810 = fma(r37808, r37809, r37805);
        float r37811 = r37810 - r37805;
        float r37812 = 1;
        float r37813 = r37809 * r37808;
        float r37814 = r37812 + r37813;
        float r37815 = r37811 - r37814;
        float r37816 = cbrt(r37815);
        float r37817 = r37816 * r37816;
        float r37818 = r37817 * r37816;
        float r37819 = cbrt(r37818);
        float r37820 = r37817 * r37819;
        float r37821 = 3.962180353379337e+17;
        bool r37822 = r37805 <= r37821;
        float r37823 = r37810 - r37813;
        float r37824 = r37805 + r37812;
        float r37825 = r37823 - r37824;
        float r37826 = r37822 ? r37825 : r37820;
        float r37827 = r37807 ? r37820 : r37826;
        return r37827;
}

double f_od(double x, double y, double z) {
        double r37828 = z;
        double r37829 = -379930112174.3745;
        bool r37830 = r37828 <= r37829;
        double r37831 = x;
        double r37832 = y;
        double r37833 = fma(r37831, r37832, r37828);
        double r37834 = r37833 - r37828;
        double r37835 = 1;
        double r37836 = r37832 * r37831;
        double r37837 = r37835 + r37836;
        double r37838 = r37834 - r37837;
        double r37839 = cbrt(r37838);
        double r37840 = r37839 * r37839;
        double r37841 = r37840 * r37839;
        double r37842 = cbrt(r37841);
        double r37843 = r37840 * r37842;
        double r37844 = 3.962180353379337e+17;
        bool r37845 = r37828 <= r37844;
        double r37846 = r37833 - r37836;
        double r37847 = r37828 + r37835;
        double r37848 = r37846 - r37847;
        double r37849 = r37845 ? r37848 : r37843;
        double r37850 = r37830 ? r37843 : r37849;
        return r37850;
}

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 r37851, r37852, r37853, r37854, r37855, r37856, r37857, r37858, r37859;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37851);
        mpfr_init(r37852);
        mpfr_init(r37853);
        mpfr_init(r37854);
        mpfr_init_set_str(r37855, "1", 10, MPFR_RNDN);
        mpfr_init(r37856);
        mpfr_init(r37857);
        mpfr_init(r37858);
        mpfr_init(r37859);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r37851, x, MPFR_RNDN);
        mpfr_set_d(r37852, y, MPFR_RNDN);
        mpfr_set_d(r37853, z, MPFR_RNDN);
        mpfr_fma(r37854, r37851, r37852, r37853, MPFR_RNDN);
        ;
        mpfr_mul(r37856, r37851, r37852, MPFR_RNDN);
        mpfr_add(r37857, r37856, r37853, MPFR_RNDN);
        mpfr_add(r37858, r37855, r37857, MPFR_RNDN);
        mpfr_sub(r37859, r37854, r37858, MPFR_RNDN);
        return mpfr_get_d(r37859, MPFR_RNDN);
}

static mpfr_t r37860, r37861, r37862, r37863, r37864, r37865, r37866, r37867, r37868, r37869, r37870, r37871, r37872, r37873, r37874, r37875, r37876, r37877, r37878, r37879, r37880, r37881, r37882;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37860);
        mpfr_init_set_str(r37861, "-379930112174.3745", 10, MPFR_RNDN);
        mpfr_init(r37862);
        mpfr_init(r37863);
        mpfr_init(r37864);
        mpfr_init(r37865);
        mpfr_init(r37866);
        mpfr_init_set_str(r37867, "1", 10, MPFR_RNDN);
        mpfr_init(r37868);
        mpfr_init(r37869);
        mpfr_init(r37870);
        mpfr_init(r37871);
        mpfr_init(r37872);
        mpfr_init(r37873);
        mpfr_init(r37874);
        mpfr_init(r37875);
        mpfr_init_set_str(r37876, "3.962180353379337e+17", 10, MPFR_RNDN);
        mpfr_init(r37877);
        mpfr_init(r37878);
        mpfr_init(r37879);
        mpfr_init(r37880);
        mpfr_init(r37881);
        mpfr_init(r37882);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r37860, z, MPFR_RNDN);
        ;
        mpfr_set_si(r37862, mpfr_cmp(r37860, r37861) <= 0, MPFR_RNDN);
        mpfr_set_d(r37863, x, MPFR_RNDN);
        mpfr_set_d(r37864, y, MPFR_RNDN);
        mpfr_fma(r37865, r37863, r37864, r37860, MPFR_RNDN);
        mpfr_sub(r37866, r37865, r37860, MPFR_RNDN);
        ;
        mpfr_mul(r37868, r37864, r37863, MPFR_RNDN);
        mpfr_add(r37869, r37867, r37868, MPFR_RNDN);
        mpfr_sub(r37870, r37866, r37869, MPFR_RNDN);
        mpfr_cbrt(r37871, r37870, MPFR_RNDN);
        mpfr_mul(r37872, r37871, r37871, MPFR_RNDN);
        mpfr_mul(r37873, r37872, r37871, MPFR_RNDN);
        mpfr_cbrt(r37874, r37873, MPFR_RNDN);
        mpfr_mul(r37875, r37872, r37874, MPFR_RNDN);
        ;
        mpfr_set_si(r37877, mpfr_cmp(r37860, r37876) <= 0, MPFR_RNDN);
        mpfr_sub(r37878, r37865, r37868, MPFR_RNDN);
        mpfr_add(r37879, r37860, r37867, MPFR_RNDN);
        mpfr_sub(r37880, r37878, r37879, MPFR_RNDN);
        if (mpfr_get_si(r37877, MPFR_RNDN)) { mpfr_set(r37881, r37880, MPFR_RNDN); } else { mpfr_set(r37881, r37875, MPFR_RNDN); };
        if (mpfr_get_si(r37862, MPFR_RNDN)) { mpfr_set(r37882, r37875, MPFR_RNDN); } else { mpfr_set(r37882, r37881, MPFR_RNDN); };
        return mpfr_get_d(r37882, MPFR_RNDN);
}

static mpfr_t r37883, r37884, r37885, r37886, r37887, r37888, r37889, r37890, r37891, r37892, r37893, r37894, r37895, r37896, r37897, r37898, r37899, r37900, r37901, r37902, r37903, r37904, r37905;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37883);
        mpfr_init_set_str(r37884, "-379930112174.3745", 10, MPFR_RNDN);
        mpfr_init(r37885);
        mpfr_init(r37886);
        mpfr_init(r37887);
        mpfr_init(r37888);
        mpfr_init(r37889);
        mpfr_init_set_str(r37890, "1", 10, MPFR_RNDN);
        mpfr_init(r37891);
        mpfr_init(r37892);
        mpfr_init(r37893);
        mpfr_init(r37894);
        mpfr_init(r37895);
        mpfr_init(r37896);
        mpfr_init(r37897);
        mpfr_init(r37898);
        mpfr_init_set_str(r37899, "3.962180353379337e+17", 10, MPFR_RNDN);
        mpfr_init(r37900);
        mpfr_init(r37901);
        mpfr_init(r37902);
        mpfr_init(r37903);
        mpfr_init(r37904);
        mpfr_init(r37905);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r37883, z, MPFR_RNDN);
        ;
        mpfr_set_si(r37885, mpfr_cmp(r37883, r37884) <= 0, MPFR_RNDN);
        mpfr_set_d(r37886, x, MPFR_RNDN);
        mpfr_set_d(r37887, y, MPFR_RNDN);
        mpfr_fma(r37888, r37886, r37887, r37883, MPFR_RNDN);
        mpfr_sub(r37889, r37888, r37883, MPFR_RNDN);
        ;
        mpfr_mul(r37891, r37887, r37886, MPFR_RNDN);
        mpfr_add(r37892, r37890, r37891, MPFR_RNDN);
        mpfr_sub(r37893, r37889, r37892, MPFR_RNDN);
        mpfr_cbrt(r37894, r37893, MPFR_RNDN);
        mpfr_mul(r37895, r37894, r37894, MPFR_RNDN);
        mpfr_mul(r37896, r37895, r37894, MPFR_RNDN);
        mpfr_cbrt(r37897, r37896, MPFR_RNDN);
        mpfr_mul(r37898, r37895, r37897, MPFR_RNDN);
        ;
        mpfr_set_si(r37900, mpfr_cmp(r37883, r37899) <= 0, MPFR_RNDN);
        mpfr_sub(r37901, r37888, r37891, MPFR_RNDN);
        mpfr_add(r37902, r37883, r37890, MPFR_RNDN);
        mpfr_sub(r37903, r37901, r37902, MPFR_RNDN);
        if (mpfr_get_si(r37900, MPFR_RNDN)) { mpfr_set(r37904, r37903, MPFR_RNDN); } else { mpfr_set(r37904, r37898, MPFR_RNDN); };
        if (mpfr_get_si(r37885, MPFR_RNDN)) { mpfr_set(r37905, r37898, MPFR_RNDN); } else { mpfr_set(r37905, r37904, MPFR_RNDN); };
        return mpfr_get_d(r37905, MPFR_RNDN);
}

