#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 r20829 = x1;
        float r20830 = 2;
        float r20831 = r20830 * r20829;
        float r20832 = 3;
        float r20833 = r20832 * r20829;
        float r20834 = r20833 * r20829;
        float r20835 = x2;
        float r20836 = r20830 * r20835;
        float r20837 = r20834 + r20836;
        float r20838 = r20837 - r20829;
        float r20839 = r20829 * r20829;
        float r20840 = 1;
        float r20841 = r20839 + r20840;
        float r20842 = r20838 / r20841;
        float r20843 = r20831 * r20842;
        float r20844 = r20842 - r20832;
        float r20845 = r20843 * r20844;
        float r20846 = 4;
        float r20847 = r20846 * r20842;
        float r20848 = 6;
        float r20849 = r20847 - r20848;
        float r20850 = r20839 * r20849;
        float r20851 = r20845 + r20850;
        float r20852 = r20851 * r20841;
        float r20853 = r20834 * r20842;
        float r20854 = r20852 + r20853;
        float r20855 = r20839 * r20829;
        float r20856 = r20854 + r20855;
        float r20857 = r20856 + r20829;
        float r20858 = r20834 - r20836;
        float r20859 = r20858 - r20829;
        float r20860 = r20859 / r20841;
        float r20861 = r20832 * r20860;
        float r20862 = r20857 + r20861;
        float r20863 = r20829 + r20862;
        return r20863;
}

double f_id(double x1, double x2) {
        double r20864 = x1;
        double r20865 = 2;
        double r20866 = r20865 * r20864;
        double r20867 = 3;
        double r20868 = r20867 * r20864;
        double r20869 = r20868 * r20864;
        double r20870 = x2;
        double r20871 = r20865 * r20870;
        double r20872 = r20869 + r20871;
        double r20873 = r20872 - r20864;
        double r20874 = r20864 * r20864;
        double r20875 = 1;
        double r20876 = r20874 + r20875;
        double r20877 = r20873 / r20876;
        double r20878 = r20866 * r20877;
        double r20879 = r20877 - r20867;
        double r20880 = r20878 * r20879;
        double r20881 = 4;
        double r20882 = r20881 * r20877;
        double r20883 = 6;
        double r20884 = r20882 - r20883;
        double r20885 = r20874 * r20884;
        double r20886 = r20880 + r20885;
        double r20887 = r20886 * r20876;
        double r20888 = r20869 * r20877;
        double r20889 = r20887 + r20888;
        double r20890 = r20874 * r20864;
        double r20891 = r20889 + r20890;
        double r20892 = r20891 + r20864;
        double r20893 = r20869 - r20871;
        double r20894 = r20893 - r20864;
        double r20895 = r20894 / r20876;
        double r20896 = r20867 * r20895;
        double r20897 = r20892 + r20896;
        double r20898 = r20864 + r20897;
        return r20898;
}


double f_of(float x1, float x2) {
        float r20899 = x1;
        float r20900 = 3;
        float r20901 = pow(r20899, r20900);
        float r20902 = r20899 + r20901;
        float r20903 = x2;
        float r20904 = r20899 - r20903;
        float r20905 = r20903 - r20904;
        float r20906 = r20899 * r20899;
        float r20907 = r20906 * r20900;
        float r20908 = r20905 + r20907;
        float r20909 = 1;
        float r20910 = r20909 + r20906;
        float r20911 = r20908 / r20910;
        float r20912 = r20911 * r20907;
        float r20913 = r20903 + r20903;
        float r20914 = r20899 + r20913;
        float r20915 = r20907 - r20914;
        float r20916 = r20910 / r20900;
        float r20917 = r20915 / r20916;
        float r20918 = r20912 + r20917;
        float r20919 = r20899 + r20918;
        float r20920 = 4;
        float r20921 = r20920 / r20910;
        float r20922 = r20921 * r20908;
        float r20923 = 6;
        float r20924 = r20922 - r20923;
        float r20925 = r20924 * r20906;
        float r20926 = r20899 + r20899;
        float r20927 = r20908 * r20926;
        float r20928 = r20927 / r20910;
        float r20929 = r20911 - r20900;
        float r20930 = r20928 * r20929;
        float r20931 = r20925 + r20930;
        float r20932 = r20910 * r20931;
        float r20933 = r20919 + r20932;
        float r20934 = r20902 + r20933;
        return r20934;
}

double f_od(double x1, double x2) {
        double r20935 = x1;
        double r20936 = 3;
        double r20937 = pow(r20935, r20936);
        double r20938 = r20935 + r20937;
        double r20939 = x2;
        double r20940 = r20935 - r20939;
        double r20941 = r20939 - r20940;
        double r20942 = r20935 * r20935;
        double r20943 = r20942 * r20936;
        double r20944 = r20941 + r20943;
        double r20945 = 1;
        double r20946 = r20945 + r20942;
        double r20947 = r20944 / r20946;
        double r20948 = r20947 * r20943;
        double r20949 = r20939 + r20939;
        double r20950 = r20935 + r20949;
        double r20951 = r20943 - r20950;
        double r20952 = r20946 / r20936;
        double r20953 = r20951 / r20952;
        double r20954 = r20948 + r20953;
        double r20955 = r20935 + r20954;
        double r20956 = 4;
        double r20957 = r20956 / r20946;
        double r20958 = r20957 * r20944;
        double r20959 = 6;
        double r20960 = r20958 - r20959;
        double r20961 = r20960 * r20942;
        double r20962 = r20935 + r20935;
        double r20963 = r20944 * r20962;
        double r20964 = r20963 / r20946;
        double r20965 = r20947 - r20936;
        double r20966 = r20964 * r20965;
        double r20967 = r20961 + r20966;
        double r20968 = r20946 * r20967;
        double r20969 = r20955 + r20968;
        double r20970 = r20938 + r20969;
        return r20970;
}

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 r20971, r20972, r20973, r20974, r20975, r20976, r20977, r20978, r20979, r20980, r20981, r20982, r20983, r20984, r20985, r20986, r20987, r20988, r20989, r20990, r20991, r20992, r20993, r20994, r20995, r20996, r20997, r20998, r20999, r21000, r21001, r21002, r21003, r21004, r21005;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r20971);
        mpfr_init_set_str(r20972, "2", 10, MPFR_RNDN);
        mpfr_init(r20973);
        mpfr_init_set_str(r20974, "3", 10, MPFR_RNDN);
        mpfr_init(r20975);
        mpfr_init(r20976);
        mpfr_init(r20977);
        mpfr_init(r20978);
        mpfr_init(r20979);
        mpfr_init(r20980);
        mpfr_init(r20981);
        mpfr_init_set_str(r20982, "1", 10, MPFR_RNDN);
        mpfr_init(r20983);
        mpfr_init(r20984);
        mpfr_init(r20985);
        mpfr_init(r20986);
        mpfr_init(r20987);
        mpfr_init_set_str(r20988, "4", 10, MPFR_RNDN);
        mpfr_init(r20989);
        mpfr_init_set_str(r20990, "6", 10, MPFR_RNDN);
        mpfr_init(r20991);
        mpfr_init(r20992);
        mpfr_init(r20993);
        mpfr_init(r20994);
        mpfr_init(r20995);
        mpfr_init(r20996);
        mpfr_init(r20997);
        mpfr_init(r20998);
        mpfr_init(r20999);
        mpfr_init(r21000);
        mpfr_init(r21001);
        mpfr_init(r21002);
        mpfr_init(r21003);
        mpfr_init(r21004);
        mpfr_init(r21005);
}

double f_im(double x1, double x2) {
        mpfr_set_d(r20971, x1, MPFR_RNDN);
        ;
        mpfr_mul(r20973, r20972, r20971, MPFR_RNDN);
        ;
        mpfr_mul(r20975, r20974, r20971, MPFR_RNDN);
        mpfr_mul(r20976, r20975, r20971, MPFR_RNDN);
        mpfr_set_d(r20977, x2, MPFR_RNDN);
        mpfr_mul(r20978, r20972, r20977, MPFR_RNDN);
        mpfr_add(r20979, r20976, r20978, MPFR_RNDN);
        mpfr_sub(r20980, r20979, r20971, MPFR_RNDN);
        mpfr_mul(r20981, r20971, r20971, MPFR_RNDN);
        ;
        mpfr_add(r20983, r20981, r20982, MPFR_RNDN);
        mpfr_div(r20984, r20980, r20983, MPFR_RNDN);
        mpfr_mul(r20985, r20973, r20984, MPFR_RNDN);
        mpfr_sub(r20986, r20984, r20974, MPFR_RNDN);
        mpfr_mul(r20987, r20985, r20986, MPFR_RNDN);
        ;
        mpfr_mul(r20989, r20988, r20984, MPFR_RNDN);
        ;
        mpfr_sub(r20991, r20989, r20990, MPFR_RNDN);
        mpfr_mul(r20992, r20981, r20991, MPFR_RNDN);
        mpfr_add(r20993, r20987, r20992, MPFR_RNDN);
        mpfr_mul(r20994, r20993, r20983, MPFR_RNDN);
        mpfr_mul(r20995, r20976, r20984, MPFR_RNDN);
        mpfr_add(r20996, r20994, r20995, MPFR_RNDN);
        mpfr_mul(r20997, r20981, r20971, MPFR_RNDN);
        mpfr_add(r20998, r20996, r20997, MPFR_RNDN);
        mpfr_add(r20999, r20998, r20971, MPFR_RNDN);
        mpfr_sub(r21000, r20976, r20978, MPFR_RNDN);
        mpfr_sub(r21001, r21000, r20971, MPFR_RNDN);
        mpfr_div(r21002, r21001, r20983, MPFR_RNDN);
        mpfr_mul(r21003, r20974, r21002, MPFR_RNDN);
        mpfr_add(r21004, r20999, r21003, MPFR_RNDN);
        mpfr_add(r21005, r20971, r21004, MPFR_RNDN);
        return mpfr_get_d(r21005, MPFR_RNDN);
}

static mpfr_t r21006, r21007, r21008, r21009, r21010, r21011, r21012, r21013, r21014, r21015, r21016, r21017, r21018, r21019, r21020, r21021, r21022, r21023, r21024, r21025, r21026, r21027, r21028, r21029, r21030, r21031, r21032, r21033, r21034, r21035, r21036, r21037, r21038, r21039, r21040, r21041;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r21006);
        mpfr_init_set_str(r21007, "3", 10, MPFR_RNDN);
        mpfr_init(r21008);
        mpfr_init(r21009);
        mpfr_init(r21010);
        mpfr_init(r21011);
        mpfr_init(r21012);
        mpfr_init(r21013);
        mpfr_init(r21014);
        mpfr_init(r21015);
        mpfr_init_set_str(r21016, "1", 10, MPFR_RNDN);
        mpfr_init(r21017);
        mpfr_init(r21018);
        mpfr_init(r21019);
        mpfr_init(r21020);
        mpfr_init(r21021);
        mpfr_init(r21022);
        mpfr_init(r21023);
        mpfr_init(r21024);
        mpfr_init(r21025);
        mpfr_init(r21026);
        mpfr_init_set_str(r21027, "4", 10, MPFR_RNDN);
        mpfr_init(r21028);
        mpfr_init(r21029);
        mpfr_init_set_str(r21030, "6", 10, MPFR_RNDN);
        mpfr_init(r21031);
        mpfr_init(r21032);
        mpfr_init(r21033);
        mpfr_init(r21034);
        mpfr_init(r21035);
        mpfr_init(r21036);
        mpfr_init(r21037);
        mpfr_init(r21038);
        mpfr_init(r21039);
        mpfr_init(r21040);
        mpfr_init(r21041);
}

double f_fm(double x1, double x2) {
        mpfr_set_d(r21006, x1, MPFR_RNDN);
        ;
        mpfr_pow(r21008, r21006, r21007, MPFR_RNDN);
        mpfr_add(r21009, r21006, r21008, MPFR_RNDN);
        mpfr_set_d(r21010, x2, MPFR_RNDN);
        mpfr_sub(r21011, r21006, r21010, MPFR_RNDN);
        mpfr_sub(r21012, r21010, r21011, MPFR_RNDN);
        mpfr_mul(r21013, r21006, r21006, MPFR_RNDN);
        mpfr_mul(r21014, r21013, r21007, MPFR_RNDN);
        mpfr_add(r21015, r21012, r21014, MPFR_RNDN);
        ;
        mpfr_add(r21017, r21016, r21013, MPFR_RNDN);
        mpfr_div(r21018, r21015, r21017, MPFR_RNDN);
        mpfr_mul(r21019, r21018, r21014, MPFR_RNDN);
        mpfr_add(r21020, r21010, r21010, MPFR_RNDN);
        mpfr_add(r21021, r21006, r21020, MPFR_RNDN);
        mpfr_sub(r21022, r21014, r21021, MPFR_RNDN);
        mpfr_div(r21023, r21017, r21007, MPFR_RNDN);
        mpfr_div(r21024, r21022, r21023, MPFR_RNDN);
        mpfr_add(r21025, r21019, r21024, MPFR_RNDN);
        mpfr_add(r21026, r21006, r21025, MPFR_RNDN);
        ;
        mpfr_div(r21028, r21027, r21017, MPFR_RNDN);
        mpfr_mul(r21029, r21028, r21015, MPFR_RNDN);
        ;
        mpfr_sub(r21031, r21029, r21030, MPFR_RNDN);
        mpfr_mul(r21032, r21031, r21013, MPFR_RNDN);
        mpfr_add(r21033, r21006, r21006, MPFR_RNDN);
        mpfr_mul(r21034, r21015, r21033, MPFR_RNDN);
        mpfr_div(r21035, r21034, r21017, MPFR_RNDN);
        mpfr_sub(r21036, r21018, r21007, MPFR_RNDN);
        mpfr_mul(r21037, r21035, r21036, MPFR_RNDN);
        mpfr_add(r21038, r21032, r21037, MPFR_RNDN);
        mpfr_mul(r21039, r21017, r21038, MPFR_RNDN);
        mpfr_add(r21040, r21026, r21039, MPFR_RNDN);
        mpfr_add(r21041, r21009, r21040, MPFR_RNDN);
        return mpfr_get_d(r21041, MPFR_RNDN);
}

static mpfr_t r21042, r21043, r21044, r21045, r21046, r21047, r21048, r21049, r21050, r21051, r21052, r21053, r21054, r21055, r21056, r21057, r21058, r21059, r21060, r21061, r21062, r21063, r21064, r21065, r21066, r21067, r21068, r21069, r21070, r21071, r21072, r21073, r21074, r21075, r21076, r21077;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r21042);
        mpfr_init_set_str(r21043, "3", 10, MPFR_RNDN);
        mpfr_init(r21044);
        mpfr_init(r21045);
        mpfr_init(r21046);
        mpfr_init(r21047);
        mpfr_init(r21048);
        mpfr_init(r21049);
        mpfr_init(r21050);
        mpfr_init(r21051);
        mpfr_init_set_str(r21052, "1", 10, MPFR_RNDN);
        mpfr_init(r21053);
        mpfr_init(r21054);
        mpfr_init(r21055);
        mpfr_init(r21056);
        mpfr_init(r21057);
        mpfr_init(r21058);
        mpfr_init(r21059);
        mpfr_init(r21060);
        mpfr_init(r21061);
        mpfr_init(r21062);
        mpfr_init_set_str(r21063, "4", 10, MPFR_RNDN);
        mpfr_init(r21064);
        mpfr_init(r21065);
        mpfr_init_set_str(r21066, "6", 10, MPFR_RNDN);
        mpfr_init(r21067);
        mpfr_init(r21068);
        mpfr_init(r21069);
        mpfr_init(r21070);
        mpfr_init(r21071);
        mpfr_init(r21072);
        mpfr_init(r21073);
        mpfr_init(r21074);
        mpfr_init(r21075);
        mpfr_init(r21076);
        mpfr_init(r21077);
}

double f_dm(double x1, double x2) {
        mpfr_set_d(r21042, x1, MPFR_RNDN);
        ;
        mpfr_pow(r21044, r21042, r21043, MPFR_RNDN);
        mpfr_add(r21045, r21042, r21044, MPFR_RNDN);
        mpfr_set_d(r21046, x2, MPFR_RNDN);
        mpfr_sub(r21047, r21042, r21046, MPFR_RNDN);
        mpfr_sub(r21048, r21046, r21047, MPFR_RNDN);
        mpfr_mul(r21049, r21042, r21042, MPFR_RNDN);
        mpfr_mul(r21050, r21049, r21043, MPFR_RNDN);
        mpfr_add(r21051, r21048, r21050, MPFR_RNDN);
        ;
        mpfr_add(r21053, r21052, r21049, MPFR_RNDN);
        mpfr_div(r21054, r21051, r21053, MPFR_RNDN);
        mpfr_mul(r21055, r21054, r21050, MPFR_RNDN);
        mpfr_add(r21056, r21046, r21046, MPFR_RNDN);
        mpfr_add(r21057, r21042, r21056, MPFR_RNDN);
        mpfr_sub(r21058, r21050, r21057, MPFR_RNDN);
        mpfr_div(r21059, r21053, r21043, MPFR_RNDN);
        mpfr_div(r21060, r21058, r21059, MPFR_RNDN);
        mpfr_add(r21061, r21055, r21060, MPFR_RNDN);
        mpfr_add(r21062, r21042, r21061, MPFR_RNDN);
        ;
        mpfr_div(r21064, r21063, r21053, MPFR_RNDN);
        mpfr_mul(r21065, r21064, r21051, MPFR_RNDN);
        ;
        mpfr_sub(r21067, r21065, r21066, MPFR_RNDN);
        mpfr_mul(r21068, r21067, r21049, MPFR_RNDN);
        mpfr_add(r21069, r21042, r21042, MPFR_RNDN);
        mpfr_mul(r21070, r21051, r21069, MPFR_RNDN);
        mpfr_div(r21071, r21070, r21053, MPFR_RNDN);
        mpfr_sub(r21072, r21054, r21043, MPFR_RNDN);
        mpfr_mul(r21073, r21071, r21072, MPFR_RNDN);
        mpfr_add(r21074, r21068, r21073, MPFR_RNDN);
        mpfr_mul(r21075, r21053, r21074, MPFR_RNDN);
        mpfr_add(r21076, r21062, r21075, MPFR_RNDN);
        mpfr_add(r21077, r21045, r21076, MPFR_RNDN);
        return mpfr_get_d(r21077, MPFR_RNDN);
}

