#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 r8019 = x1;
        float r8020 = 2;
        float r8021 = r8020 * r8019;
        float r8022 = 3;
        float r8023 = r8022 * r8019;
        float r8024 = r8023 * r8019;
        float r8025 = x2;
        float r8026 = r8020 * r8025;
        float r8027 = r8024 + r8026;
        float r8028 = r8027 - r8019;
        float r8029 = r8019 * r8019;
        float r8030 = 1;
        float r8031 = r8029 + r8030;
        float r8032 = r8028 / r8031;
        float r8033 = r8021 * r8032;
        float r8034 = r8032 - r8022;
        float r8035 = r8033 * r8034;
        float r8036 = 4;
        float r8037 = r8036 * r8032;
        float r8038 = 6;
        float r8039 = r8037 - r8038;
        float r8040 = r8029 * r8039;
        float r8041 = r8035 + r8040;
        float r8042 = r8041 * r8031;
        float r8043 = r8024 * r8032;
        float r8044 = r8042 + r8043;
        float r8045 = r8029 * r8019;
        float r8046 = r8044 + r8045;
        float r8047 = r8046 + r8019;
        float r8048 = r8024 - r8026;
        float r8049 = r8048 - r8019;
        float r8050 = r8049 / r8031;
        float r8051 = r8022 * r8050;
        float r8052 = r8047 + r8051;
        float r8053 = r8019 + r8052;
        return r8053;
}

double f_id(double x1, double x2) {
        double r8054 = x1;
        double r8055 = 2;
        double r8056 = r8055 * r8054;
        double r8057 = 3;
        double r8058 = r8057 * r8054;
        double r8059 = r8058 * r8054;
        double r8060 = x2;
        double r8061 = r8055 * r8060;
        double r8062 = r8059 + r8061;
        double r8063 = r8062 - r8054;
        double r8064 = r8054 * r8054;
        double r8065 = 1;
        double r8066 = r8064 + r8065;
        double r8067 = r8063 / r8066;
        double r8068 = r8056 * r8067;
        double r8069 = r8067 - r8057;
        double r8070 = r8068 * r8069;
        double r8071 = 4;
        double r8072 = r8071 * r8067;
        double r8073 = 6;
        double r8074 = r8072 - r8073;
        double r8075 = r8064 * r8074;
        double r8076 = r8070 + r8075;
        double r8077 = r8076 * r8066;
        double r8078 = r8059 * r8067;
        double r8079 = r8077 + r8078;
        double r8080 = r8064 * r8054;
        double r8081 = r8079 + r8080;
        double r8082 = r8081 + r8054;
        double r8083 = r8059 - r8061;
        double r8084 = r8083 - r8054;
        double r8085 = r8084 / r8066;
        double r8086 = r8057 * r8085;
        double r8087 = r8082 + r8086;
        double r8088 = r8054 + r8087;
        return r8088;
}


double f_of(float x1, float x2) {
        float r8089 = x1;
        float r8090 = 2;
        float r8091 = r8090 * r8089;
        float r8092 = 3;
        float r8093 = r8092 * r8089;
        float r8094 = r8093 * r8089;
        float r8095 = x2;
        float r8096 = r8090 * r8095;
        float r8097 = r8094 + r8096;
        float r8098 = r8097 - r8089;
        float r8099 = r8089 * r8089;
        float r8100 = 1;
        float r8101 = r8099 + r8100;
        float r8102 = r8098 / r8101;
        float r8103 = r8091 * r8102;
        float r8104 = r8102 - r8092;
        float r8105 = r8103 * r8104;
        float r8106 = 4;
        float r8107 = r8106 * r8102;
        float r8108 = 6;
        float r8109 = r8107 - r8108;
        float r8110 = r8099 * r8109;
        float r8111 = r8105 + r8110;
        float r8112 = cbrt(r8111);
        float r8113 = r8112 * r8112;
        float r8114 = r8113 * r8112;
        float r8115 = r8114 * r8101;
        float r8116 = r8094 * r8102;
        float r8117 = r8115 + r8116;
        float r8118 = r8099 * r8089;
        float r8119 = r8117 + r8118;
        float r8120 = r8119 + r8089;
        float r8121 = r8094 - r8096;
        float r8122 = r8121 - r8089;
        float r8123 = r8122 / r8101;
        float r8124 = r8092 * r8123;
        float r8125 = r8120 + r8124;
        float r8126 = r8089 + r8125;
        return r8126;
}

double f_od(double x1, double x2) {
        double r8127 = x1;
        double r8128 = 2;
        double r8129 = r8128 * r8127;
        double r8130 = 3;
        double r8131 = r8130 * r8127;
        double r8132 = r8131 * r8127;
        double r8133 = x2;
        double r8134 = r8128 * r8133;
        double r8135 = r8132 + r8134;
        double r8136 = r8135 - r8127;
        double r8137 = r8127 * r8127;
        double r8138 = 1;
        double r8139 = r8137 + r8138;
        double r8140 = r8136 / r8139;
        double r8141 = r8129 * r8140;
        double r8142 = r8140 - r8130;
        double r8143 = r8141 * r8142;
        double r8144 = 4;
        double r8145 = r8144 * r8140;
        double r8146 = 6;
        double r8147 = r8145 - r8146;
        double r8148 = r8137 * r8147;
        double r8149 = r8143 + r8148;
        double r8150 = cbrt(r8149);
        double r8151 = r8150 * r8150;
        double r8152 = r8151 * r8150;
        double r8153 = r8152 * r8139;
        double r8154 = r8132 * r8140;
        double r8155 = r8153 + r8154;
        double r8156 = r8137 * r8127;
        double r8157 = r8155 + r8156;
        double r8158 = r8157 + r8127;
        double r8159 = r8132 - r8134;
        double r8160 = r8159 - r8127;
        double r8161 = r8160 / r8139;
        double r8162 = r8130 * r8161;
        double r8163 = r8158 + r8162;
        double r8164 = r8127 + r8163;
        return r8164;
}

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 r8165, r8166, r8167, r8168, r8169, r8170, r8171, r8172, r8173, r8174, r8175, r8176, r8177, r8178, r8179, r8180, r8181, r8182, r8183, r8184, r8185, r8186, r8187, r8188, r8189, r8190, r8191, r8192, r8193, r8194, r8195, r8196, r8197, r8198, r8199;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8165);
        mpfr_init_set_str(r8166, "2", 10, MPFR_RNDN);
        mpfr_init(r8167);
        mpfr_init_set_str(r8168, "3", 10, MPFR_RNDN);
        mpfr_init(r8169);
        mpfr_init(r8170);
        mpfr_init(r8171);
        mpfr_init(r8172);
        mpfr_init(r8173);
        mpfr_init(r8174);
        mpfr_init(r8175);
        mpfr_init_set_str(r8176, "1", 10, MPFR_RNDN);
        mpfr_init(r8177);
        mpfr_init(r8178);
        mpfr_init(r8179);
        mpfr_init(r8180);
        mpfr_init(r8181);
        mpfr_init_set_str(r8182, "4", 10, MPFR_RNDN);
        mpfr_init(r8183);
        mpfr_init_set_str(r8184, "6", 10, MPFR_RNDN);
        mpfr_init(r8185);
        mpfr_init(r8186);
        mpfr_init(r8187);
        mpfr_init(r8188);
        mpfr_init(r8189);
        mpfr_init(r8190);
        mpfr_init(r8191);
        mpfr_init(r8192);
        mpfr_init(r8193);
        mpfr_init(r8194);
        mpfr_init(r8195);
        mpfr_init(r8196);
        mpfr_init(r8197);
        mpfr_init(r8198);
        mpfr_init(r8199);
}

double f_im(double x1, double x2) {
        mpfr_set_d(r8165, x1, MPFR_RNDN);
        ;
        mpfr_mul(r8167, r8166, r8165, MPFR_RNDN);
        ;
        mpfr_mul(r8169, r8168, r8165, MPFR_RNDN);
        mpfr_mul(r8170, r8169, r8165, MPFR_RNDN);
        mpfr_set_d(r8171, x2, MPFR_RNDN);
        mpfr_mul(r8172, r8166, r8171, MPFR_RNDN);
        mpfr_add(r8173, r8170, r8172, MPFR_RNDN);
        mpfr_sub(r8174, r8173, r8165, MPFR_RNDN);
        mpfr_mul(r8175, r8165, r8165, MPFR_RNDN);
        ;
        mpfr_add(r8177, r8175, r8176, MPFR_RNDN);
        mpfr_div(r8178, r8174, r8177, MPFR_RNDN);
        mpfr_mul(r8179, r8167, r8178, MPFR_RNDN);
        mpfr_sub(r8180, r8178, r8168, MPFR_RNDN);
        mpfr_mul(r8181, r8179, r8180, MPFR_RNDN);
        ;
        mpfr_mul(r8183, r8182, r8178, MPFR_RNDN);
        ;
        mpfr_sub(r8185, r8183, r8184, MPFR_RNDN);
        mpfr_mul(r8186, r8175, r8185, MPFR_RNDN);
        mpfr_add(r8187, r8181, r8186, MPFR_RNDN);
        mpfr_mul(r8188, r8187, r8177, MPFR_RNDN);
        mpfr_mul(r8189, r8170, r8178, MPFR_RNDN);
        mpfr_add(r8190, r8188, r8189, MPFR_RNDN);
        mpfr_mul(r8191, r8175, r8165, MPFR_RNDN);
        mpfr_add(r8192, r8190, r8191, MPFR_RNDN);
        mpfr_add(r8193, r8192, r8165, MPFR_RNDN);
        mpfr_sub(r8194, r8170, r8172, MPFR_RNDN);
        mpfr_sub(r8195, r8194, r8165, MPFR_RNDN);
        mpfr_div(r8196, r8195, r8177, MPFR_RNDN);
        mpfr_mul(r8197, r8168, r8196, MPFR_RNDN);
        mpfr_add(r8198, r8193, r8197, MPFR_RNDN);
        mpfr_add(r8199, r8165, r8198, MPFR_RNDN);
        return mpfr_get_d(r8199, MPFR_RNDN);
}

static mpfr_t r8200, r8201, r8202, r8203, r8204, r8205, r8206, r8207, r8208, r8209, r8210, r8211, r8212, r8213, r8214, r8215, r8216, r8217, r8218, r8219, r8220, r8221, r8222, r8223, r8224, r8225, r8226, r8227, r8228, r8229, r8230, r8231, r8232, r8233, r8234, r8235, r8236, r8237;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8200);
        mpfr_init_set_str(r8201, "2", 10, MPFR_RNDN);
        mpfr_init(r8202);
        mpfr_init_set_str(r8203, "3", 10, MPFR_RNDN);
        mpfr_init(r8204);
        mpfr_init(r8205);
        mpfr_init(r8206);
        mpfr_init(r8207);
        mpfr_init(r8208);
        mpfr_init(r8209);
        mpfr_init(r8210);
        mpfr_init_set_str(r8211, "1", 10, MPFR_RNDN);
        mpfr_init(r8212);
        mpfr_init(r8213);
        mpfr_init(r8214);
        mpfr_init(r8215);
        mpfr_init(r8216);
        mpfr_init_set_str(r8217, "4", 10, MPFR_RNDN);
        mpfr_init(r8218);
        mpfr_init_set_str(r8219, "6", 10, MPFR_RNDN);
        mpfr_init(r8220);
        mpfr_init(r8221);
        mpfr_init(r8222);
        mpfr_init(r8223);
        mpfr_init(r8224);
        mpfr_init(r8225);
        mpfr_init(r8226);
        mpfr_init(r8227);
        mpfr_init(r8228);
        mpfr_init(r8229);
        mpfr_init(r8230);
        mpfr_init(r8231);
        mpfr_init(r8232);
        mpfr_init(r8233);
        mpfr_init(r8234);
        mpfr_init(r8235);
        mpfr_init(r8236);
        mpfr_init(r8237);
}

double f_fm(double x1, double x2) {
        mpfr_set_d(r8200, x1, MPFR_RNDN);
        ;
        mpfr_mul(r8202, r8201, r8200, MPFR_RNDN);
        ;
        mpfr_mul(r8204, r8203, r8200, MPFR_RNDN);
        mpfr_mul(r8205, r8204, r8200, MPFR_RNDN);
        mpfr_set_d(r8206, x2, MPFR_RNDN);
        mpfr_mul(r8207, r8201, r8206, MPFR_RNDN);
        mpfr_add(r8208, r8205, r8207, MPFR_RNDN);
        mpfr_sub(r8209, r8208, r8200, MPFR_RNDN);
        mpfr_mul(r8210, r8200, r8200, MPFR_RNDN);
        ;
        mpfr_add(r8212, r8210, r8211, MPFR_RNDN);
        mpfr_div(r8213, r8209, r8212, MPFR_RNDN);
        mpfr_mul(r8214, r8202, r8213, MPFR_RNDN);
        mpfr_sub(r8215, r8213, r8203, MPFR_RNDN);
        mpfr_mul(r8216, r8214, r8215, MPFR_RNDN);
        ;
        mpfr_mul(r8218, r8217, r8213, MPFR_RNDN);
        ;
        mpfr_sub(r8220, r8218, r8219, MPFR_RNDN);
        mpfr_mul(r8221, r8210, r8220, MPFR_RNDN);
        mpfr_add(r8222, r8216, r8221, MPFR_RNDN);
        mpfr_cbrt(r8223, r8222, MPFR_RNDN);
        mpfr_mul(r8224, r8223, r8223, MPFR_RNDN);
        mpfr_mul(r8225, r8224, r8223, MPFR_RNDN);
        mpfr_mul(r8226, r8225, r8212, MPFR_RNDN);
        mpfr_mul(r8227, r8205, r8213, MPFR_RNDN);
        mpfr_add(r8228, r8226, r8227, MPFR_RNDN);
        mpfr_mul(r8229, r8210, r8200, MPFR_RNDN);
        mpfr_add(r8230, r8228, r8229, MPFR_RNDN);
        mpfr_add(r8231, r8230, r8200, MPFR_RNDN);
        mpfr_sub(r8232, r8205, r8207, MPFR_RNDN);
        mpfr_sub(r8233, r8232, r8200, MPFR_RNDN);
        mpfr_div(r8234, r8233, r8212, MPFR_RNDN);
        mpfr_mul(r8235, r8203, r8234, MPFR_RNDN);
        mpfr_add(r8236, r8231, r8235, MPFR_RNDN);
        mpfr_add(r8237, r8200, r8236, MPFR_RNDN);
        return mpfr_get_d(r8237, MPFR_RNDN);
}

static mpfr_t r8238, r8239, r8240, r8241, r8242, r8243, r8244, r8245, r8246, r8247, r8248, r8249, r8250, r8251, r8252, r8253, r8254, r8255, r8256, r8257, r8258, r8259, r8260, r8261, r8262, r8263, r8264, r8265, r8266, r8267, r8268, r8269, r8270, r8271, r8272, r8273, r8274, r8275;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8238);
        mpfr_init_set_str(r8239, "2", 10, MPFR_RNDN);
        mpfr_init(r8240);
        mpfr_init_set_str(r8241, "3", 10, MPFR_RNDN);
        mpfr_init(r8242);
        mpfr_init(r8243);
        mpfr_init(r8244);
        mpfr_init(r8245);
        mpfr_init(r8246);
        mpfr_init(r8247);
        mpfr_init(r8248);
        mpfr_init_set_str(r8249, "1", 10, MPFR_RNDN);
        mpfr_init(r8250);
        mpfr_init(r8251);
        mpfr_init(r8252);
        mpfr_init(r8253);
        mpfr_init(r8254);
        mpfr_init_set_str(r8255, "4", 10, MPFR_RNDN);
        mpfr_init(r8256);
        mpfr_init_set_str(r8257, "6", 10, MPFR_RNDN);
        mpfr_init(r8258);
        mpfr_init(r8259);
        mpfr_init(r8260);
        mpfr_init(r8261);
        mpfr_init(r8262);
        mpfr_init(r8263);
        mpfr_init(r8264);
        mpfr_init(r8265);
        mpfr_init(r8266);
        mpfr_init(r8267);
        mpfr_init(r8268);
        mpfr_init(r8269);
        mpfr_init(r8270);
        mpfr_init(r8271);
        mpfr_init(r8272);
        mpfr_init(r8273);
        mpfr_init(r8274);
        mpfr_init(r8275);
}

double f_dm(double x1, double x2) {
        mpfr_set_d(r8238, x1, MPFR_RNDN);
        ;
        mpfr_mul(r8240, r8239, r8238, MPFR_RNDN);
        ;
        mpfr_mul(r8242, r8241, r8238, MPFR_RNDN);
        mpfr_mul(r8243, r8242, r8238, MPFR_RNDN);
        mpfr_set_d(r8244, x2, MPFR_RNDN);
        mpfr_mul(r8245, r8239, r8244, MPFR_RNDN);
        mpfr_add(r8246, r8243, r8245, MPFR_RNDN);
        mpfr_sub(r8247, r8246, r8238, MPFR_RNDN);
        mpfr_mul(r8248, r8238, r8238, MPFR_RNDN);
        ;
        mpfr_add(r8250, r8248, r8249, MPFR_RNDN);
        mpfr_div(r8251, r8247, r8250, MPFR_RNDN);
        mpfr_mul(r8252, r8240, r8251, MPFR_RNDN);
        mpfr_sub(r8253, r8251, r8241, MPFR_RNDN);
        mpfr_mul(r8254, r8252, r8253, MPFR_RNDN);
        ;
        mpfr_mul(r8256, r8255, r8251, MPFR_RNDN);
        ;
        mpfr_sub(r8258, r8256, r8257, MPFR_RNDN);
        mpfr_mul(r8259, r8248, r8258, MPFR_RNDN);
        mpfr_add(r8260, r8254, r8259, MPFR_RNDN);
        mpfr_cbrt(r8261, r8260, MPFR_RNDN);
        mpfr_mul(r8262, r8261, r8261, MPFR_RNDN);
        mpfr_mul(r8263, r8262, r8261, MPFR_RNDN);
        mpfr_mul(r8264, r8263, r8250, MPFR_RNDN);
        mpfr_mul(r8265, r8243, r8251, MPFR_RNDN);
        mpfr_add(r8266, r8264, r8265, MPFR_RNDN);
        mpfr_mul(r8267, r8248, r8238, MPFR_RNDN);
        mpfr_add(r8268, r8266, r8267, MPFR_RNDN);
        mpfr_add(r8269, r8268, r8238, MPFR_RNDN);
        mpfr_sub(r8270, r8243, r8245, MPFR_RNDN);
        mpfr_sub(r8271, r8270, r8238, MPFR_RNDN);
        mpfr_div(r8272, r8271, r8250, MPFR_RNDN);
        mpfr_mul(r8273, r8241, r8272, MPFR_RNDN);
        mpfr_add(r8274, r8269, r8273, MPFR_RNDN);
        mpfr_add(r8275, r8238, r8274, MPFR_RNDN);
        return mpfr_get_d(r8275, MPFR_RNDN);
}

