#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 r8227 = x1;
        float r8228 = 2;
        float r8229 = r8228 * r8227;
        float r8230 = 3;
        float r8231 = r8230 * r8227;
        float r8232 = r8231 * r8227;
        float r8233 = x2;
        float r8234 = r8228 * r8233;
        float r8235 = r8232 + r8234;
        float r8236 = r8235 - r8227;
        float r8237 = r8227 * r8227;
        float r8238 = 1;
        float r8239 = r8237 + r8238;
        float r8240 = r8236 / r8239;
        float r8241 = r8229 * r8240;
        float r8242 = r8240 - r8230;
        float r8243 = r8241 * r8242;
        float r8244 = 4;
        float r8245 = r8244 * r8240;
        float r8246 = 6;
        float r8247 = r8245 - r8246;
        float r8248 = r8237 * r8247;
        float r8249 = r8243 + r8248;
        float r8250 = r8249 * r8239;
        float r8251 = r8232 * r8240;
        float r8252 = r8250 + r8251;
        float r8253 = r8237 * r8227;
        float r8254 = r8252 + r8253;
        float r8255 = r8254 + r8227;
        float r8256 = r8232 - r8234;
        float r8257 = r8256 - r8227;
        float r8258 = r8257 / r8239;
        float r8259 = r8230 * r8258;
        float r8260 = r8255 + r8259;
        float r8261 = r8227 + r8260;
        return r8261;
}

double f_id(double x1, double x2) {
        double r8262 = x1;
        double r8263 = 2;
        double r8264 = r8263 * r8262;
        double r8265 = 3;
        double r8266 = r8265 * r8262;
        double r8267 = r8266 * r8262;
        double r8268 = x2;
        double r8269 = r8263 * r8268;
        double r8270 = r8267 + r8269;
        double r8271 = r8270 - r8262;
        double r8272 = r8262 * r8262;
        double r8273 = 1;
        double r8274 = r8272 + r8273;
        double r8275 = r8271 / r8274;
        double r8276 = r8264 * r8275;
        double r8277 = r8275 - r8265;
        double r8278 = r8276 * r8277;
        double r8279 = 4;
        double r8280 = r8279 * r8275;
        double r8281 = 6;
        double r8282 = r8280 - r8281;
        double r8283 = r8272 * r8282;
        double r8284 = r8278 + r8283;
        double r8285 = r8284 * r8274;
        double r8286 = r8267 * r8275;
        double r8287 = r8285 + r8286;
        double r8288 = r8272 * r8262;
        double r8289 = r8287 + r8288;
        double r8290 = r8289 + r8262;
        double r8291 = r8267 - r8269;
        double r8292 = r8291 - r8262;
        double r8293 = r8292 / r8274;
        double r8294 = r8265 * r8293;
        double r8295 = r8290 + r8294;
        double r8296 = r8262 + r8295;
        return r8296;
}


double f_of(float x1, float x2) {
        float r8297 = x1;
        float r8298 = 2;
        float r8299 = r8298 * r8297;
        float r8300 = 3;
        float r8301 = r8300 * r8297;
        float r8302 = r8301 * r8297;
        float r8303 = x2;
        float r8304 = r8298 * r8303;
        float r8305 = r8302 + r8304;
        float r8306 = r8305 - r8297;
        float r8307 = r8297 * r8297;
        float r8308 = 1;
        float r8309 = r8307 + r8308;
        float r8310 = r8306 / r8309;
        float r8311 = r8299 * r8310;
        float r8312 = r8311 * r8310;
        float r8313 = 4;
        float r8314 = r8313 / r8309;
        float r8315 = r8307 * r8300;
        float r8316 = r8303 * r8298;
        float r8317 = r8316 - r8297;
        float r8318 = r8315 + r8317;
        float r8319 = r8314 * r8318;
        float r8320 = 6;
        float r8321 = r8319 - r8320;
        float r8322 = r8307 * r8321;
        float r8323 = r8297 * r8298;
        float r8324 = r8323 * r8300;
        float r8325 = r8318 / r8309;
        float r8326 = r8324 * r8325;
        float r8327 = r8322 - r8326;
        float r8328 = r8312 + r8327;
        float r8329 = r8328 * r8309;
        float r8330 = r8302 * r8310;
        float r8331 = r8329 + r8330;
        float r8332 = r8307 * r8297;
        float r8333 = r8331 + r8332;
        float r8334 = r8333 + r8297;
        float r8335 = r8302 - r8304;
        float r8336 = r8335 - r8297;
        float r8337 = r8336 / r8309;
        float r8338 = r8300 * r8337;
        float r8339 = r8334 + r8338;
        float r8340 = r8297 + r8339;
        return r8340;
}

double f_od(double x1, double x2) {
        double r8341 = x1;
        double r8342 = 2;
        double r8343 = r8342 * r8341;
        double r8344 = 3;
        double r8345 = r8344 * r8341;
        double r8346 = r8345 * r8341;
        double r8347 = x2;
        double r8348 = r8342 * r8347;
        double r8349 = r8346 + r8348;
        double r8350 = r8349 - r8341;
        double r8351 = r8341 * r8341;
        double r8352 = 1;
        double r8353 = r8351 + r8352;
        double r8354 = r8350 / r8353;
        double r8355 = r8343 * r8354;
        double r8356 = r8355 * r8354;
        double r8357 = 4;
        double r8358 = r8357 / r8353;
        double r8359 = r8351 * r8344;
        double r8360 = r8347 * r8342;
        double r8361 = r8360 - r8341;
        double r8362 = r8359 + r8361;
        double r8363 = r8358 * r8362;
        double r8364 = 6;
        double r8365 = r8363 - r8364;
        double r8366 = r8351 * r8365;
        double r8367 = r8341 * r8342;
        double r8368 = r8367 * r8344;
        double r8369 = r8362 / r8353;
        double r8370 = r8368 * r8369;
        double r8371 = r8366 - r8370;
        double r8372 = r8356 + r8371;
        double r8373 = r8372 * r8353;
        double r8374 = r8346 * r8354;
        double r8375 = r8373 + r8374;
        double r8376 = r8351 * r8341;
        double r8377 = r8375 + r8376;
        double r8378 = r8377 + r8341;
        double r8379 = r8346 - r8348;
        double r8380 = r8379 - r8341;
        double r8381 = r8380 / r8353;
        double r8382 = r8344 * r8381;
        double r8383 = r8378 + r8382;
        double r8384 = r8341 + r8383;
        return r8384;
}

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 r8385, r8386, r8387, r8388, r8389, r8390, r8391, r8392, r8393, r8394, r8395, r8396, r8397, r8398, r8399, r8400, r8401, r8402, r8403, r8404, r8405, r8406, r8407, r8408, r8409, r8410, r8411, r8412, r8413, r8414, r8415, r8416, r8417, r8418, r8419;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8385);
        mpfr_init_set_str(r8386, "2", 10, MPFR_RNDN);
        mpfr_init(r8387);
        mpfr_init_set_str(r8388, "3", 10, MPFR_RNDN);
        mpfr_init(r8389);
        mpfr_init(r8390);
        mpfr_init(r8391);
        mpfr_init(r8392);
        mpfr_init(r8393);
        mpfr_init(r8394);
        mpfr_init(r8395);
        mpfr_init_set_str(r8396, "1", 10, MPFR_RNDN);
        mpfr_init(r8397);
        mpfr_init(r8398);
        mpfr_init(r8399);
        mpfr_init(r8400);
        mpfr_init(r8401);
        mpfr_init_set_str(r8402, "4", 10, MPFR_RNDN);
        mpfr_init(r8403);
        mpfr_init_set_str(r8404, "6", 10, MPFR_RNDN);
        mpfr_init(r8405);
        mpfr_init(r8406);
        mpfr_init(r8407);
        mpfr_init(r8408);
        mpfr_init(r8409);
        mpfr_init(r8410);
        mpfr_init(r8411);
        mpfr_init(r8412);
        mpfr_init(r8413);
        mpfr_init(r8414);
        mpfr_init(r8415);
        mpfr_init(r8416);
        mpfr_init(r8417);
        mpfr_init(r8418);
        mpfr_init(r8419);
}

double f_im(double x1, double x2) {
        mpfr_set_d(r8385, x1, MPFR_RNDN);
        ;
        mpfr_mul(r8387, r8386, r8385, MPFR_RNDN);
        ;
        mpfr_mul(r8389, r8388, r8385, MPFR_RNDN);
        mpfr_mul(r8390, r8389, r8385, MPFR_RNDN);
        mpfr_set_d(r8391, x2, MPFR_RNDN);
        mpfr_mul(r8392, r8386, r8391, MPFR_RNDN);
        mpfr_add(r8393, r8390, r8392, MPFR_RNDN);
        mpfr_sub(r8394, r8393, r8385, MPFR_RNDN);
        mpfr_mul(r8395, r8385, r8385, MPFR_RNDN);
        ;
        mpfr_add(r8397, r8395, r8396, MPFR_RNDN);
        mpfr_div(r8398, r8394, r8397, MPFR_RNDN);
        mpfr_mul(r8399, r8387, r8398, MPFR_RNDN);
        mpfr_sub(r8400, r8398, r8388, MPFR_RNDN);
        mpfr_mul(r8401, r8399, r8400, MPFR_RNDN);
        ;
        mpfr_mul(r8403, r8402, r8398, MPFR_RNDN);
        ;
        mpfr_sub(r8405, r8403, r8404, MPFR_RNDN);
        mpfr_mul(r8406, r8395, r8405, MPFR_RNDN);
        mpfr_add(r8407, r8401, r8406, MPFR_RNDN);
        mpfr_mul(r8408, r8407, r8397, MPFR_RNDN);
        mpfr_mul(r8409, r8390, r8398, MPFR_RNDN);
        mpfr_add(r8410, r8408, r8409, MPFR_RNDN);
        mpfr_mul(r8411, r8395, r8385, MPFR_RNDN);
        mpfr_add(r8412, r8410, r8411, MPFR_RNDN);
        mpfr_add(r8413, r8412, r8385, MPFR_RNDN);
        mpfr_sub(r8414, r8390, r8392, MPFR_RNDN);
        mpfr_sub(r8415, r8414, r8385, MPFR_RNDN);
        mpfr_div(r8416, r8415, r8397, MPFR_RNDN);
        mpfr_mul(r8417, r8388, r8416, MPFR_RNDN);
        mpfr_add(r8418, r8413, r8417, MPFR_RNDN);
        mpfr_add(r8419, r8385, r8418, MPFR_RNDN);
        return mpfr_get_d(r8419, MPFR_RNDN);
}

static mpfr_t r8420, r8421, r8422, r8423, r8424, r8425, r8426, r8427, r8428, r8429, r8430, r8431, r8432, r8433, r8434, r8435, r8436, r8437, r8438, r8439, r8440, r8441, r8442, r8443, r8444, r8445, r8446, r8447, r8448, r8449, r8450, r8451, r8452, r8453, r8454, r8455, r8456, r8457, r8458, r8459, r8460, r8461, r8462, r8463;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8420);
        mpfr_init_set_str(r8421, "2", 10, MPFR_RNDN);
        mpfr_init(r8422);
        mpfr_init_set_str(r8423, "3", 10, MPFR_RNDN);
        mpfr_init(r8424);
        mpfr_init(r8425);
        mpfr_init(r8426);
        mpfr_init(r8427);
        mpfr_init(r8428);
        mpfr_init(r8429);
        mpfr_init(r8430);
        mpfr_init_set_str(r8431, "1", 10, MPFR_RNDN);
        mpfr_init(r8432);
        mpfr_init(r8433);
        mpfr_init(r8434);
        mpfr_init(r8435);
        mpfr_init_set_str(r8436, "4", 10, MPFR_RNDN);
        mpfr_init(r8437);
        mpfr_init(r8438);
        mpfr_init(r8439);
        mpfr_init(r8440);
        mpfr_init(r8441);
        mpfr_init(r8442);
        mpfr_init_set_str(r8443, "6", 10, MPFR_RNDN);
        mpfr_init(r8444);
        mpfr_init(r8445);
        mpfr_init(r8446);
        mpfr_init(r8447);
        mpfr_init(r8448);
        mpfr_init(r8449);
        mpfr_init(r8450);
        mpfr_init(r8451);
        mpfr_init(r8452);
        mpfr_init(r8453);
        mpfr_init(r8454);
        mpfr_init(r8455);
        mpfr_init(r8456);
        mpfr_init(r8457);
        mpfr_init(r8458);
        mpfr_init(r8459);
        mpfr_init(r8460);
        mpfr_init(r8461);
        mpfr_init(r8462);
        mpfr_init(r8463);
}

double f_fm(double x1, double x2) {
        mpfr_set_d(r8420, x1, MPFR_RNDN);
        ;
        mpfr_mul(r8422, r8421, r8420, MPFR_RNDN);
        ;
        mpfr_mul(r8424, r8423, r8420, MPFR_RNDN);
        mpfr_mul(r8425, r8424, r8420, MPFR_RNDN);
        mpfr_set_d(r8426, x2, MPFR_RNDN);
        mpfr_mul(r8427, r8421, r8426, MPFR_RNDN);
        mpfr_add(r8428, r8425, r8427, MPFR_RNDN);
        mpfr_sub(r8429, r8428, r8420, MPFR_RNDN);
        mpfr_mul(r8430, r8420, r8420, MPFR_RNDN);
        ;
        mpfr_add(r8432, r8430, r8431, MPFR_RNDN);
        mpfr_div(r8433, r8429, r8432, MPFR_RNDN);
        mpfr_mul(r8434, r8422, r8433, MPFR_RNDN);
        mpfr_mul(r8435, r8434, r8433, MPFR_RNDN);
        ;
        mpfr_div(r8437, r8436, r8432, MPFR_RNDN);
        mpfr_mul(r8438, r8430, r8423, MPFR_RNDN);
        mpfr_mul(r8439, r8426, r8421, MPFR_RNDN);
        mpfr_sub(r8440, r8439, r8420, MPFR_RNDN);
        mpfr_add(r8441, r8438, r8440, MPFR_RNDN);
        mpfr_mul(r8442, r8437, r8441, MPFR_RNDN);
        ;
        mpfr_sub(r8444, r8442, r8443, MPFR_RNDN);
        mpfr_mul(r8445, r8430, r8444, MPFR_RNDN);
        mpfr_mul(r8446, r8420, r8421, MPFR_RNDN);
        mpfr_mul(r8447, r8446, r8423, MPFR_RNDN);
        mpfr_div(r8448, r8441, r8432, MPFR_RNDN);
        mpfr_mul(r8449, r8447, r8448, MPFR_RNDN);
        mpfr_sub(r8450, r8445, r8449, MPFR_RNDN);
        mpfr_add(r8451, r8435, r8450, MPFR_RNDN);
        mpfr_mul(r8452, r8451, r8432, MPFR_RNDN);
        mpfr_mul(r8453, r8425, r8433, MPFR_RNDN);
        mpfr_add(r8454, r8452, r8453, MPFR_RNDN);
        mpfr_mul(r8455, r8430, r8420, MPFR_RNDN);
        mpfr_add(r8456, r8454, r8455, MPFR_RNDN);
        mpfr_add(r8457, r8456, r8420, MPFR_RNDN);
        mpfr_sub(r8458, r8425, r8427, MPFR_RNDN);
        mpfr_sub(r8459, r8458, r8420, MPFR_RNDN);
        mpfr_div(r8460, r8459, r8432, MPFR_RNDN);
        mpfr_mul(r8461, r8423, r8460, MPFR_RNDN);
        mpfr_add(r8462, r8457, r8461, MPFR_RNDN);
        mpfr_add(r8463, r8420, r8462, MPFR_RNDN);
        return mpfr_get_d(r8463, MPFR_RNDN);
}

static mpfr_t r8464, r8465, r8466, r8467, r8468, r8469, r8470, r8471, r8472, r8473, r8474, r8475, r8476, r8477, r8478, r8479, r8480, r8481, r8482, r8483, r8484, r8485, r8486, r8487, r8488, r8489, r8490, r8491, r8492, r8493, r8494, r8495, r8496, r8497, r8498, r8499, r8500, r8501, r8502, r8503, r8504, r8505, r8506, r8507;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8464);
        mpfr_init_set_str(r8465, "2", 10, MPFR_RNDN);
        mpfr_init(r8466);
        mpfr_init_set_str(r8467, "3", 10, MPFR_RNDN);
        mpfr_init(r8468);
        mpfr_init(r8469);
        mpfr_init(r8470);
        mpfr_init(r8471);
        mpfr_init(r8472);
        mpfr_init(r8473);
        mpfr_init(r8474);
        mpfr_init_set_str(r8475, "1", 10, MPFR_RNDN);
        mpfr_init(r8476);
        mpfr_init(r8477);
        mpfr_init(r8478);
        mpfr_init(r8479);
        mpfr_init_set_str(r8480, "4", 10, MPFR_RNDN);
        mpfr_init(r8481);
        mpfr_init(r8482);
        mpfr_init(r8483);
        mpfr_init(r8484);
        mpfr_init(r8485);
        mpfr_init(r8486);
        mpfr_init_set_str(r8487, "6", 10, MPFR_RNDN);
        mpfr_init(r8488);
        mpfr_init(r8489);
        mpfr_init(r8490);
        mpfr_init(r8491);
        mpfr_init(r8492);
        mpfr_init(r8493);
        mpfr_init(r8494);
        mpfr_init(r8495);
        mpfr_init(r8496);
        mpfr_init(r8497);
        mpfr_init(r8498);
        mpfr_init(r8499);
        mpfr_init(r8500);
        mpfr_init(r8501);
        mpfr_init(r8502);
        mpfr_init(r8503);
        mpfr_init(r8504);
        mpfr_init(r8505);
        mpfr_init(r8506);
        mpfr_init(r8507);
}

double f_dm(double x1, double x2) {
        mpfr_set_d(r8464, x1, MPFR_RNDN);
        ;
        mpfr_mul(r8466, r8465, r8464, MPFR_RNDN);
        ;
        mpfr_mul(r8468, r8467, r8464, MPFR_RNDN);
        mpfr_mul(r8469, r8468, r8464, MPFR_RNDN);
        mpfr_set_d(r8470, x2, MPFR_RNDN);
        mpfr_mul(r8471, r8465, r8470, MPFR_RNDN);
        mpfr_add(r8472, r8469, r8471, MPFR_RNDN);
        mpfr_sub(r8473, r8472, r8464, MPFR_RNDN);
        mpfr_mul(r8474, r8464, r8464, MPFR_RNDN);
        ;
        mpfr_add(r8476, r8474, r8475, MPFR_RNDN);
        mpfr_div(r8477, r8473, r8476, MPFR_RNDN);
        mpfr_mul(r8478, r8466, r8477, MPFR_RNDN);
        mpfr_mul(r8479, r8478, r8477, MPFR_RNDN);
        ;
        mpfr_div(r8481, r8480, r8476, MPFR_RNDN);
        mpfr_mul(r8482, r8474, r8467, MPFR_RNDN);
        mpfr_mul(r8483, r8470, r8465, MPFR_RNDN);
        mpfr_sub(r8484, r8483, r8464, MPFR_RNDN);
        mpfr_add(r8485, r8482, r8484, MPFR_RNDN);
        mpfr_mul(r8486, r8481, r8485, MPFR_RNDN);
        ;
        mpfr_sub(r8488, r8486, r8487, MPFR_RNDN);
        mpfr_mul(r8489, r8474, r8488, MPFR_RNDN);
        mpfr_mul(r8490, r8464, r8465, MPFR_RNDN);
        mpfr_mul(r8491, r8490, r8467, MPFR_RNDN);
        mpfr_div(r8492, r8485, r8476, MPFR_RNDN);
        mpfr_mul(r8493, r8491, r8492, MPFR_RNDN);
        mpfr_sub(r8494, r8489, r8493, MPFR_RNDN);
        mpfr_add(r8495, r8479, r8494, MPFR_RNDN);
        mpfr_mul(r8496, r8495, r8476, MPFR_RNDN);
        mpfr_mul(r8497, r8469, r8477, MPFR_RNDN);
        mpfr_add(r8498, r8496, r8497, MPFR_RNDN);
        mpfr_mul(r8499, r8474, r8464, MPFR_RNDN);
        mpfr_add(r8500, r8498, r8499, MPFR_RNDN);
        mpfr_add(r8501, r8500, r8464, MPFR_RNDN);
        mpfr_sub(r8502, r8469, r8471, MPFR_RNDN);
        mpfr_sub(r8503, r8502, r8464, MPFR_RNDN);
        mpfr_div(r8504, r8503, r8476, MPFR_RNDN);
        mpfr_mul(r8505, r8467, r8504, MPFR_RNDN);
        mpfr_add(r8506, r8501, r8505, MPFR_RNDN);
        mpfr_add(r8507, r8464, r8506, MPFR_RNDN);
        return mpfr_get_d(r8507, MPFR_RNDN);
}

