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

char *name = "Rosa's FloatVsDoubleBenchmark";

double f_if(float x1, float x2) {
        float r7667 = x1;
        float r7668 = 2.0f;
        float r7669 = r7668 * r7667;
        float r7670 = 3.0f;
        float r7671 = r7670 * r7667;
        float r7672 = r7671 * r7667;
        float r7673 = x2;
        float r7674 = r7668 * r7673;
        float r7675 = r7672 + r7674;
        float r7676 = r7675 - r7667;
        float r7677 = r7667 * r7667;
        float r7678 = 1.0f;
        float r7679 = r7677 + r7678;
        float r7680 = r7676 / r7679;
        float r7681 = r7669 * r7680;
        float r7682 = r7680 - r7670;
        float r7683 = r7681 * r7682;
        float r7684 = 4.0f;
        float r7685 = r7684 * r7680;
        float r7686 = 6.0f;
        float r7687 = r7685 - r7686;
        float r7688 = r7677 * r7687;
        float r7689 = r7683 + r7688;
        float r7690 = r7689 * r7679;
        float r7691 = r7672 * r7680;
        float r7692 = r7690 + r7691;
        float r7693 = r7677 * r7667;
        float r7694 = r7692 + r7693;
        float r7695 = r7694 + r7667;
        float r7696 = r7672 - r7674;
        float r7697 = r7696 - r7667;
        float r7698 = r7697 / r7679;
        float r7699 = r7670 * r7698;
        float r7700 = r7695 + r7699;
        float r7701 = r7667 + r7700;
        return r7701;
}

double f_id(double x1, double x2) {
        double r7702 = x1;
        double r7703 = 2.0;
        double r7704 = r7703 * r7702;
        double r7705 = 3.0;
        double r7706 = r7705 * r7702;
        double r7707 = r7706 * r7702;
        double r7708 = x2;
        double r7709 = r7703 * r7708;
        double r7710 = r7707 + r7709;
        double r7711 = r7710 - r7702;
        double r7712 = r7702 * r7702;
        double r7713 = 1.0;
        double r7714 = r7712 + r7713;
        double r7715 = r7711 / r7714;
        double r7716 = r7704 * r7715;
        double r7717 = r7715 - r7705;
        double r7718 = r7716 * r7717;
        double r7719 = 4.0;
        double r7720 = r7719 * r7715;
        double r7721 = 6.0;
        double r7722 = r7720 - r7721;
        double r7723 = r7712 * r7722;
        double r7724 = r7718 + r7723;
        double r7725 = r7724 * r7714;
        double r7726 = r7707 * r7715;
        double r7727 = r7725 + r7726;
        double r7728 = r7712 * r7702;
        double r7729 = r7727 + r7728;
        double r7730 = r7729 + r7702;
        double r7731 = r7707 - r7709;
        double r7732 = r7731 - r7702;
        double r7733 = r7732 / r7714;
        double r7734 = r7705 * r7733;
        double r7735 = r7730 + r7734;
        double r7736 = r7702 + r7735;
        return r7736;
}


double f_of(float x1, float x2) {
        float r7737 = x1;
        float r7738 = 1.0f;
        float r7739 = fma(r7737, r7737, r7738);
        float r7740 = 2.0f;
        float r7741 = r7737 * r7740;
        float r7742 = 3.0f;
        float r7743 = r7742 * r7737;
        float r7744 = x2;
        float r7745 = r7744 * r7740;
        float r7746 = fma(r7737, r7743, r7745);
        float r7747 = r7746 / r7739;
        float r7748 = r7737 / r7739;
        float r7749 = r7748 + r7742;
        float r7750 = r7747 - r7749;
        float r7751 = r7741 * r7750;
        float r7752 = r7737 * r7737;
        float r7753 = r7745 - r7737;
        float r7754 = fma(r7742, r7752, r7753);
        float r7755 = r7754 / r7739;
        float r7756 = 4.0f;
        float r7757 = r7756 / r7739;
        float r7758 = r7757 * r7754;
        float r7759 = 6.0f;
        float r7760 = -r7759;
        float r7761 = r7760 * r7752;
        float r7762 = fma(r7758, r7752, r7761);
        float r7763 = fma(r7751, r7755, r7762);
        float r7764 = cbrt(r7763);
        float r7765 = r7764 * r7764;
        float r7766 = r7764 * r7765;
        float r7767 = r7743 * r7737;
        float r7768 = fma(r7752, r7737, r7737);
        float r7769 = fma(r7755, r7767, r7768);
        float r7770 = fma(r7739, r7766, r7769);
        float r7771 = fma(r7740, r7744, r7737);
        float r7772 = r7767 - r7771;
        float r7773 = r7772 / r7739;
        float r7774 = fma(r7742, r7773, r7737);
        float r7775 = r7770 + r7774;
        return r7775;
}

double f_od(double x1, double x2) {
        double r7776 = x1;
        double r7777 = 1.0;
        double r7778 = fma(r7776, r7776, r7777);
        double r7779 = 2.0;
        double r7780 = r7776 * r7779;
        double r7781 = 3.0;
        double r7782 = r7781 * r7776;
        double r7783 = x2;
        double r7784 = r7783 * r7779;
        double r7785 = fma(r7776, r7782, r7784);
        double r7786 = r7785 / r7778;
        double r7787 = r7776 / r7778;
        double r7788 = r7787 + r7781;
        double r7789 = r7786 - r7788;
        double r7790 = r7780 * r7789;
        double r7791 = r7776 * r7776;
        double r7792 = r7784 - r7776;
        double r7793 = fma(r7781, r7791, r7792);
        double r7794 = r7793 / r7778;
        double r7795 = 4.0;
        double r7796 = r7795 / r7778;
        double r7797 = r7796 * r7793;
        double r7798 = 6.0;
        double r7799 = -r7798;
        double r7800 = r7799 * r7791;
        double r7801 = fma(r7797, r7791, r7800);
        double r7802 = fma(r7790, r7794, r7801);
        double r7803 = cbrt(r7802);
        double r7804 = r7803 * r7803;
        double r7805 = r7803 * r7804;
        double r7806 = r7782 * r7776;
        double r7807 = fma(r7791, r7776, r7776);
        double r7808 = fma(r7794, r7806, r7807);
        double r7809 = fma(r7778, r7805, r7808);
        double r7810 = fma(r7779, r7783, r7776);
        double r7811 = r7806 - r7810;
        double r7812 = r7811 / r7778;
        double r7813 = fma(r7781, r7812, r7776);
        double r7814 = r7809 + r7813;
        return r7814;
}

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 r7815, r7816, r7817, r7818, r7819, r7820, r7821, r7822, r7823, r7824, r7825, r7826, r7827, r7828, r7829, r7830, r7831, r7832, r7833, r7834, r7835, r7836, r7837, r7838, r7839, r7840, r7841, r7842, r7843, r7844, r7845, r7846, r7847, r7848, r7849;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r7815);
        mpfr_init_set_str(r7816, "2", 10, MPFR_RNDN);
        mpfr_init(r7817);
        mpfr_init_set_str(r7818, "3", 10, MPFR_RNDN);
        mpfr_init(r7819);
        mpfr_init(r7820);
        mpfr_init(r7821);
        mpfr_init(r7822);
        mpfr_init(r7823);
        mpfr_init(r7824);
        mpfr_init(r7825);
        mpfr_init_set_str(r7826, "1", 10, MPFR_RNDN);
        mpfr_init(r7827);
        mpfr_init(r7828);
        mpfr_init(r7829);
        mpfr_init(r7830);
        mpfr_init(r7831);
        mpfr_init_set_str(r7832, "4", 10, MPFR_RNDN);
        mpfr_init(r7833);
        mpfr_init_set_str(r7834, "6", 10, MPFR_RNDN);
        mpfr_init(r7835);
        mpfr_init(r7836);
        mpfr_init(r7837);
        mpfr_init(r7838);
        mpfr_init(r7839);
        mpfr_init(r7840);
        mpfr_init(r7841);
        mpfr_init(r7842);
        mpfr_init(r7843);
        mpfr_init(r7844);
        mpfr_init(r7845);
        mpfr_init(r7846);
        mpfr_init(r7847);
        mpfr_init(r7848);
        mpfr_init(r7849);
}

double f_im(double x1, double x2) {
        mpfr_set_d(r7815, x1, MPFR_RNDN);
        ;
        mpfr_mul(r7817, r7816, r7815, MPFR_RNDN);
        ;
        mpfr_mul(r7819, r7818, r7815, MPFR_RNDN);
        mpfr_mul(r7820, r7819, r7815, MPFR_RNDN);
        mpfr_set_d(r7821, x2, MPFR_RNDN);
        mpfr_mul(r7822, r7816, r7821, MPFR_RNDN);
        mpfr_add(r7823, r7820, r7822, MPFR_RNDN);
        mpfr_sub(r7824, r7823, r7815, MPFR_RNDN);
        mpfr_mul(r7825, r7815, r7815, MPFR_RNDN);
        ;
        mpfr_add(r7827, r7825, r7826, MPFR_RNDN);
        mpfr_div(r7828, r7824, r7827, MPFR_RNDN);
        mpfr_mul(r7829, r7817, r7828, MPFR_RNDN);
        mpfr_sub(r7830, r7828, r7818, MPFR_RNDN);
        mpfr_mul(r7831, r7829, r7830, MPFR_RNDN);
        ;
        mpfr_mul(r7833, r7832, r7828, MPFR_RNDN);
        ;
        mpfr_sub(r7835, r7833, r7834, MPFR_RNDN);
        mpfr_mul(r7836, r7825, r7835, MPFR_RNDN);
        mpfr_add(r7837, r7831, r7836, MPFR_RNDN);
        mpfr_mul(r7838, r7837, r7827, MPFR_RNDN);
        mpfr_mul(r7839, r7820, r7828, MPFR_RNDN);
        mpfr_add(r7840, r7838, r7839, MPFR_RNDN);
        mpfr_mul(r7841, r7825, r7815, MPFR_RNDN);
        mpfr_add(r7842, r7840, r7841, MPFR_RNDN);
        mpfr_add(r7843, r7842, r7815, MPFR_RNDN);
        mpfr_sub(r7844, r7820, r7822, MPFR_RNDN);
        mpfr_sub(r7845, r7844, r7815, MPFR_RNDN);
        mpfr_div(r7846, r7845, r7827, MPFR_RNDN);
        mpfr_mul(r7847, r7818, r7846, MPFR_RNDN);
        mpfr_add(r7848, r7843, r7847, MPFR_RNDN);
        mpfr_add(r7849, r7815, r7848, MPFR_RNDN);
        return mpfr_get_d(r7849, MPFR_RNDN);
}

static mpfr_t r7850, r7851, r7852, r7853, r7854, r7855, r7856, r7857, r7858, r7859, r7860, r7861, r7862, r7863, r7864, r7865, r7866, r7867, r7868, r7869, r7870, r7871, r7872, r7873, r7874, r7875, r7876, r7877, r7878, r7879, r7880, r7881, r7882, r7883, r7884, r7885, r7886, r7887, r7888;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r7850);
        mpfr_init_set_str(r7851, "1", 10, MPFR_RNDN);
        mpfr_init(r7852);
        mpfr_init_set_str(r7853, "2", 10, MPFR_RNDN);
        mpfr_init(r7854);
        mpfr_init_set_str(r7855, "3", 10, MPFR_RNDN);
        mpfr_init(r7856);
        mpfr_init(r7857);
        mpfr_init(r7858);
        mpfr_init(r7859);
        mpfr_init(r7860);
        mpfr_init(r7861);
        mpfr_init(r7862);
        mpfr_init(r7863);
        mpfr_init(r7864);
        mpfr_init(r7865);
        mpfr_init(r7866);
        mpfr_init(r7867);
        mpfr_init(r7868);
        mpfr_init_set_str(r7869, "4", 10, MPFR_RNDN);
        mpfr_init(r7870);
        mpfr_init(r7871);
        mpfr_init_set_str(r7872, "6", 10, MPFR_RNDN);
        mpfr_init(r7873);
        mpfr_init(r7874);
        mpfr_init(r7875);
        mpfr_init(r7876);
        mpfr_init(r7877);
        mpfr_init(r7878);
        mpfr_init(r7879);
        mpfr_init(r7880);
        mpfr_init(r7881);
        mpfr_init(r7882);
        mpfr_init(r7883);
        mpfr_init(r7884);
        mpfr_init(r7885);
        mpfr_init(r7886);
        mpfr_init(r7887);
        mpfr_init(r7888);
}

double f_fm(double x1, double x2) {
        mpfr_set_d(r7850, x1, MPFR_RNDN);
        ;
        mpfr_fma(r7852, r7850, r7850, r7851, MPFR_RNDN);
        ;
        mpfr_mul(r7854, r7850, r7853, MPFR_RNDN);
        ;
        mpfr_mul(r7856, r7855, r7850, MPFR_RNDN);
        mpfr_set_d(r7857, x2, MPFR_RNDN);
        mpfr_mul(r7858, r7857, r7853, MPFR_RNDN);
        mpfr_fma(r7859, r7850, r7856, r7858, MPFR_RNDN);
        mpfr_div(r7860, r7859, r7852, MPFR_RNDN);
        mpfr_div(r7861, r7850, r7852, MPFR_RNDN);
        mpfr_add(r7862, r7861, r7855, MPFR_RNDN);
        mpfr_sub(r7863, r7860, r7862, MPFR_RNDN);
        mpfr_mul(r7864, r7854, r7863, MPFR_RNDN);
        mpfr_mul(r7865, r7850, r7850, MPFR_RNDN);
        mpfr_sub(r7866, r7858, r7850, MPFR_RNDN);
        mpfr_fma(r7867, r7855, r7865, r7866, MPFR_RNDN);
        mpfr_div(r7868, r7867, r7852, MPFR_RNDN);
        ;
        mpfr_div(r7870, r7869, r7852, MPFR_RNDN);
        mpfr_mul(r7871, r7870, r7867, MPFR_RNDN);
        ;
        mpfr_neg(r7873, r7872, MPFR_RNDN);
        mpfr_mul(r7874, r7873, r7865, MPFR_RNDN);
        mpfr_fma(r7875, r7871, r7865, r7874, MPFR_RNDN);
        mpfr_fma(r7876, r7864, r7868, r7875, MPFR_RNDN);
        mpfr_cbrt(r7877, r7876, MPFR_RNDN);
        mpfr_mul(r7878, r7877, r7877, MPFR_RNDN);
        mpfr_mul(r7879, r7877, r7878, MPFR_RNDN);
        mpfr_mul(r7880, r7856, r7850, MPFR_RNDN);
        mpfr_fma(r7881, r7865, r7850, r7850, MPFR_RNDN);
        mpfr_fma(r7882, r7868, r7880, r7881, MPFR_RNDN);
        mpfr_fma(r7883, r7852, r7879, r7882, MPFR_RNDN);
        mpfr_fma(r7884, r7853, r7857, r7850, MPFR_RNDN);
        mpfr_sub(r7885, r7880, r7884, MPFR_RNDN);
        mpfr_div(r7886, r7885, r7852, MPFR_RNDN);
        mpfr_fma(r7887, r7855, r7886, r7850, MPFR_RNDN);
        mpfr_add(r7888, r7883, r7887, MPFR_RNDN);
        return mpfr_get_d(r7888, MPFR_RNDN);
}

static mpfr_t r7889, r7890, r7891, r7892, r7893, r7894, r7895, r7896, r7897, r7898, r7899, r7900, r7901, r7902, r7903, r7904, r7905, r7906, r7907, r7908, r7909, r7910, r7911, r7912, r7913, r7914, r7915, r7916, r7917, r7918, r7919, r7920, r7921, r7922, r7923, r7924, r7925, r7926, r7927;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r7889);
        mpfr_init_set_str(r7890, "1", 10, MPFR_RNDN);
        mpfr_init(r7891);
        mpfr_init_set_str(r7892, "2", 10, MPFR_RNDN);
        mpfr_init(r7893);
        mpfr_init_set_str(r7894, "3", 10, MPFR_RNDN);
        mpfr_init(r7895);
        mpfr_init(r7896);
        mpfr_init(r7897);
        mpfr_init(r7898);
        mpfr_init(r7899);
        mpfr_init(r7900);
        mpfr_init(r7901);
        mpfr_init(r7902);
        mpfr_init(r7903);
        mpfr_init(r7904);
        mpfr_init(r7905);
        mpfr_init(r7906);
        mpfr_init(r7907);
        mpfr_init_set_str(r7908, "4", 10, MPFR_RNDN);
        mpfr_init(r7909);
        mpfr_init(r7910);
        mpfr_init_set_str(r7911, "6", 10, MPFR_RNDN);
        mpfr_init(r7912);
        mpfr_init(r7913);
        mpfr_init(r7914);
        mpfr_init(r7915);
        mpfr_init(r7916);
        mpfr_init(r7917);
        mpfr_init(r7918);
        mpfr_init(r7919);
        mpfr_init(r7920);
        mpfr_init(r7921);
        mpfr_init(r7922);
        mpfr_init(r7923);
        mpfr_init(r7924);
        mpfr_init(r7925);
        mpfr_init(r7926);
        mpfr_init(r7927);
}

double f_dm(double x1, double x2) {
        mpfr_set_d(r7889, x1, MPFR_RNDN);
        ;
        mpfr_fma(r7891, r7889, r7889, r7890, MPFR_RNDN);
        ;
        mpfr_mul(r7893, r7889, r7892, MPFR_RNDN);
        ;
        mpfr_mul(r7895, r7894, r7889, MPFR_RNDN);
        mpfr_set_d(r7896, x2, MPFR_RNDN);
        mpfr_mul(r7897, r7896, r7892, MPFR_RNDN);
        mpfr_fma(r7898, r7889, r7895, r7897, MPFR_RNDN);
        mpfr_div(r7899, r7898, r7891, MPFR_RNDN);
        mpfr_div(r7900, r7889, r7891, MPFR_RNDN);
        mpfr_add(r7901, r7900, r7894, MPFR_RNDN);
        mpfr_sub(r7902, r7899, r7901, MPFR_RNDN);
        mpfr_mul(r7903, r7893, r7902, MPFR_RNDN);
        mpfr_mul(r7904, r7889, r7889, MPFR_RNDN);
        mpfr_sub(r7905, r7897, r7889, MPFR_RNDN);
        mpfr_fma(r7906, r7894, r7904, r7905, MPFR_RNDN);
        mpfr_div(r7907, r7906, r7891, MPFR_RNDN);
        ;
        mpfr_div(r7909, r7908, r7891, MPFR_RNDN);
        mpfr_mul(r7910, r7909, r7906, MPFR_RNDN);
        ;
        mpfr_neg(r7912, r7911, MPFR_RNDN);
        mpfr_mul(r7913, r7912, r7904, MPFR_RNDN);
        mpfr_fma(r7914, r7910, r7904, r7913, MPFR_RNDN);
        mpfr_fma(r7915, r7903, r7907, r7914, MPFR_RNDN);
        mpfr_cbrt(r7916, r7915, MPFR_RNDN);
        mpfr_mul(r7917, r7916, r7916, MPFR_RNDN);
        mpfr_mul(r7918, r7916, r7917, MPFR_RNDN);
        mpfr_mul(r7919, r7895, r7889, MPFR_RNDN);
        mpfr_fma(r7920, r7904, r7889, r7889, MPFR_RNDN);
        mpfr_fma(r7921, r7907, r7919, r7920, MPFR_RNDN);
        mpfr_fma(r7922, r7891, r7918, r7921, MPFR_RNDN);
        mpfr_fma(r7923, r7892, r7896, r7889, MPFR_RNDN);
        mpfr_sub(r7924, r7919, r7923, MPFR_RNDN);
        mpfr_div(r7925, r7924, r7891, MPFR_RNDN);
        mpfr_fma(r7926, r7894, r7925, r7889, MPFR_RNDN);
        mpfr_add(r7927, r7922, r7926, MPFR_RNDN);
        return mpfr_get_d(r7927, MPFR_RNDN);
}

