#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 r20431 = x1;
        float r20432 = 2;
        float r20433 = r20432 * r20431;
        float r20434 = 3;
        float r20435 = r20434 * r20431;
        float r20436 = r20435 * r20431;
        float r20437 = x2;
        float r20438 = r20432 * r20437;
        float r20439 = r20436 + r20438;
        float r20440 = r20439 - r20431;
        float r20441 = r20431 * r20431;
        float r20442 = 1;
        float r20443 = r20441 + r20442;
        float r20444 = r20440 / r20443;
        float r20445 = r20433 * r20444;
        float r20446 = r20444 - r20434;
        float r20447 = r20445 * r20446;
        float r20448 = 4;
        float r20449 = r20448 * r20444;
        float r20450 = 6;
        float r20451 = r20449 - r20450;
        float r20452 = r20441 * r20451;
        float r20453 = r20447 + r20452;
        float r20454 = r20453 * r20443;
        float r20455 = r20436 * r20444;
        float r20456 = r20454 + r20455;
        float r20457 = r20441 * r20431;
        float r20458 = r20456 + r20457;
        float r20459 = r20458 + r20431;
        float r20460 = r20436 - r20438;
        float r20461 = r20460 - r20431;
        float r20462 = r20461 / r20443;
        float r20463 = r20434 * r20462;
        float r20464 = r20459 + r20463;
        float r20465 = r20431 + r20464;
        return r20465;
}

double f_id(double x1, double x2) {
        double r20466 = x1;
        double r20467 = 2;
        double r20468 = r20467 * r20466;
        double r20469 = 3;
        double r20470 = r20469 * r20466;
        double r20471 = r20470 * r20466;
        double r20472 = x2;
        double r20473 = r20467 * r20472;
        double r20474 = r20471 + r20473;
        double r20475 = r20474 - r20466;
        double r20476 = r20466 * r20466;
        double r20477 = 1;
        double r20478 = r20476 + r20477;
        double r20479 = r20475 / r20478;
        double r20480 = r20468 * r20479;
        double r20481 = r20479 - r20469;
        double r20482 = r20480 * r20481;
        double r20483 = 4;
        double r20484 = r20483 * r20479;
        double r20485 = 6;
        double r20486 = r20484 - r20485;
        double r20487 = r20476 * r20486;
        double r20488 = r20482 + r20487;
        double r20489 = r20488 * r20478;
        double r20490 = r20471 * r20479;
        double r20491 = r20489 + r20490;
        double r20492 = r20476 * r20466;
        double r20493 = r20491 + r20492;
        double r20494 = r20493 + r20466;
        double r20495 = r20471 - r20473;
        double r20496 = r20495 - r20466;
        double r20497 = r20496 / r20478;
        double r20498 = r20469 * r20497;
        double r20499 = r20494 + r20498;
        double r20500 = r20466 + r20499;
        return r20500;
}


double f_of(float x1, float x2) {
        float r20501 = x1;
        float r20502 = 3;
        float r20503 = r20501 * r20502;
        float r20504 = r20501 * r20503;
        float r20505 = 2;
        float r20506 = x2;
        float r20507 = fma(r20505, r20506, r20501);
        float r20508 = r20504 - r20507;
        float r20509 = 1;
        float r20510 = fma(r20501, r20501, r20509);
        float r20511 = r20508 / r20510;
        float r20512 = fma(r20502, r20511, r20501);
        float r20513 = r20506 - r20501;
        float r20514 = r20513 + r20506;
        float r20515 = fma(r20501, r20503, r20514);
        float r20516 = r20515 / r20510;
        float r20517 = pow(r20501, r20502);
        float r20518 = fma(r20504, r20516, r20517);
        float r20519 = r20512 + r20518;
        float r20520 = r20501 * r20501;
        float r20521 = 4;
        float r20522 = r20510 / r20521;
        float r20523 = r20515 / r20522;
        float r20524 = 6;
        float r20525 = r20523 - r20524;
        float r20526 = r20501 + r20501;
        float r20527 = -r20502;
        float r20528 = r20526 * r20527;
        float r20529 = r20528 / r20510;
        float r20530 = r20529 * r20515;
        float r20531 = fma(r20520, r20525, r20530);
        float r20532 = r20510 * r20515;
        float r20533 = r20510 / r20526;
        float r20534 = r20533 / r20516;
        float r20535 = r20532 / r20534;
        float r20536 = fma(r20510, r20531, r20535);
        float r20537 = r20519 + r20536;
        float r20538 = r20501 + r20537;
        return r20538;
}

double f_od(double x1, double x2) {
        double r20539 = x1;
        double r20540 = 3;
        double r20541 = r20539 * r20540;
        double r20542 = r20539 * r20541;
        double r20543 = 2;
        double r20544 = x2;
        double r20545 = fma(r20543, r20544, r20539);
        double r20546 = r20542 - r20545;
        double r20547 = 1;
        double r20548 = fma(r20539, r20539, r20547);
        double r20549 = r20546 / r20548;
        double r20550 = fma(r20540, r20549, r20539);
        double r20551 = r20544 - r20539;
        double r20552 = r20551 + r20544;
        double r20553 = fma(r20539, r20541, r20552);
        double r20554 = r20553 / r20548;
        double r20555 = pow(r20539, r20540);
        double r20556 = fma(r20542, r20554, r20555);
        double r20557 = r20550 + r20556;
        double r20558 = r20539 * r20539;
        double r20559 = 4;
        double r20560 = r20548 / r20559;
        double r20561 = r20553 / r20560;
        double r20562 = 6;
        double r20563 = r20561 - r20562;
        double r20564 = r20539 + r20539;
        double r20565 = -r20540;
        double r20566 = r20564 * r20565;
        double r20567 = r20566 / r20548;
        double r20568 = r20567 * r20553;
        double r20569 = fma(r20558, r20563, r20568);
        double r20570 = r20548 * r20553;
        double r20571 = r20548 / r20564;
        double r20572 = r20571 / r20554;
        double r20573 = r20570 / r20572;
        double r20574 = fma(r20548, r20569, r20573);
        double r20575 = r20557 + r20574;
        double r20576 = r20539 + r20575;
        return r20576;
}

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 r20577, r20578, r20579, r20580, r20581, r20582, r20583, r20584, r20585, r20586, r20587, r20588, r20589, r20590, r20591, r20592, r20593, r20594, r20595, r20596, r20597, r20598, r20599, r20600, r20601, r20602, r20603, r20604, r20605, r20606, r20607, r20608, r20609, r20610, r20611;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r20577);
        mpfr_init_set_str(r20578, "2", 10, MPFR_RNDN);
        mpfr_init(r20579);
        mpfr_init_set_str(r20580, "3", 10, MPFR_RNDN);
        mpfr_init(r20581);
        mpfr_init(r20582);
        mpfr_init(r20583);
        mpfr_init(r20584);
        mpfr_init(r20585);
        mpfr_init(r20586);
        mpfr_init(r20587);
        mpfr_init_set_str(r20588, "1", 10, MPFR_RNDN);
        mpfr_init(r20589);
        mpfr_init(r20590);
        mpfr_init(r20591);
        mpfr_init(r20592);
        mpfr_init(r20593);
        mpfr_init_set_str(r20594, "4", 10, MPFR_RNDN);
        mpfr_init(r20595);
        mpfr_init_set_str(r20596, "6", 10, MPFR_RNDN);
        mpfr_init(r20597);
        mpfr_init(r20598);
        mpfr_init(r20599);
        mpfr_init(r20600);
        mpfr_init(r20601);
        mpfr_init(r20602);
        mpfr_init(r20603);
        mpfr_init(r20604);
        mpfr_init(r20605);
        mpfr_init(r20606);
        mpfr_init(r20607);
        mpfr_init(r20608);
        mpfr_init(r20609);
        mpfr_init(r20610);
        mpfr_init(r20611);
}

double f_im(double x1, double x2) {
        mpfr_set_d(r20577, x1, MPFR_RNDN);
        ;
        mpfr_mul(r20579, r20578, r20577, MPFR_RNDN);
        ;
        mpfr_mul(r20581, r20580, r20577, MPFR_RNDN);
        mpfr_mul(r20582, r20581, r20577, MPFR_RNDN);
        mpfr_set_d(r20583, x2, MPFR_RNDN);
        mpfr_mul(r20584, r20578, r20583, MPFR_RNDN);
        mpfr_add(r20585, r20582, r20584, MPFR_RNDN);
        mpfr_sub(r20586, r20585, r20577, MPFR_RNDN);
        mpfr_mul(r20587, r20577, r20577, MPFR_RNDN);
        ;
        mpfr_add(r20589, r20587, r20588, MPFR_RNDN);
        mpfr_div(r20590, r20586, r20589, MPFR_RNDN);
        mpfr_mul(r20591, r20579, r20590, MPFR_RNDN);
        mpfr_sub(r20592, r20590, r20580, MPFR_RNDN);
        mpfr_mul(r20593, r20591, r20592, MPFR_RNDN);
        ;
        mpfr_mul(r20595, r20594, r20590, MPFR_RNDN);
        ;
        mpfr_sub(r20597, r20595, r20596, MPFR_RNDN);
        mpfr_mul(r20598, r20587, r20597, MPFR_RNDN);
        mpfr_add(r20599, r20593, r20598, MPFR_RNDN);
        mpfr_mul(r20600, r20599, r20589, MPFR_RNDN);
        mpfr_mul(r20601, r20582, r20590, MPFR_RNDN);
        mpfr_add(r20602, r20600, r20601, MPFR_RNDN);
        mpfr_mul(r20603, r20587, r20577, MPFR_RNDN);
        mpfr_add(r20604, r20602, r20603, MPFR_RNDN);
        mpfr_add(r20605, r20604, r20577, MPFR_RNDN);
        mpfr_sub(r20606, r20582, r20584, MPFR_RNDN);
        mpfr_sub(r20607, r20606, r20577, MPFR_RNDN);
        mpfr_div(r20608, r20607, r20589, MPFR_RNDN);
        mpfr_mul(r20609, r20580, r20608, MPFR_RNDN);
        mpfr_add(r20610, r20605, r20609, MPFR_RNDN);
        mpfr_add(r20611, r20577, r20610, MPFR_RNDN);
        return mpfr_get_d(r20611, MPFR_RNDN);
}

static mpfr_t r20612, r20613, r20614, r20615, r20616, r20617, r20618, r20619, r20620, r20621, r20622, r20623, r20624, r20625, r20626, r20627, r20628, r20629, r20630, r20631, r20632, r20633, r20634, r20635, r20636, r20637, r20638, r20639, r20640, r20641, r20642, r20643, r20644, r20645, r20646, r20647, r20648, r20649;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r20612);
        mpfr_init_set_str(r20613, "3", 10, MPFR_RNDN);
        mpfr_init(r20614);
        mpfr_init(r20615);
        mpfr_init_set_str(r20616, "2", 10, MPFR_RNDN);
        mpfr_init(r20617);
        mpfr_init(r20618);
        mpfr_init(r20619);
        mpfr_init_set_str(r20620, "1", 10, MPFR_RNDN);
        mpfr_init(r20621);
        mpfr_init(r20622);
        mpfr_init(r20623);
        mpfr_init(r20624);
        mpfr_init(r20625);
        mpfr_init(r20626);
        mpfr_init(r20627);
        mpfr_init(r20628);
        mpfr_init(r20629);
        mpfr_init(r20630);
        mpfr_init(r20631);
        mpfr_init_set_str(r20632, "4", 10, MPFR_RNDN);
        mpfr_init(r20633);
        mpfr_init(r20634);
        mpfr_init_set_str(r20635, "6", 10, MPFR_RNDN);
        mpfr_init(r20636);
        mpfr_init(r20637);
        mpfr_init(r20638);
        mpfr_init(r20639);
        mpfr_init(r20640);
        mpfr_init(r20641);
        mpfr_init(r20642);
        mpfr_init(r20643);
        mpfr_init(r20644);
        mpfr_init(r20645);
        mpfr_init(r20646);
        mpfr_init(r20647);
        mpfr_init(r20648);
        mpfr_init(r20649);
}

double f_fm(double x1, double x2) {
        mpfr_set_d(r20612, x1, MPFR_RNDN);
        ;
        mpfr_mul(r20614, r20612, r20613, MPFR_RNDN);
        mpfr_mul(r20615, r20612, r20614, MPFR_RNDN);
        ;
        mpfr_set_d(r20617, x2, MPFR_RNDN);
        mpfr_fma(r20618, r20616, r20617, r20612, MPFR_RNDN);
        mpfr_sub(r20619, r20615, r20618, MPFR_RNDN);
        ;
        mpfr_fma(r20621, r20612, r20612, r20620, MPFR_RNDN);
        mpfr_div(r20622, r20619, r20621, MPFR_RNDN);
        mpfr_fma(r20623, r20613, r20622, r20612, MPFR_RNDN);
        mpfr_sub(r20624, r20617, r20612, MPFR_RNDN);
        mpfr_add(r20625, r20624, r20617, MPFR_RNDN);
        mpfr_fma(r20626, r20612, r20614, r20625, MPFR_RNDN);
        mpfr_div(r20627, r20626, r20621, MPFR_RNDN);
        mpfr_pow(r20628, r20612, r20613, MPFR_RNDN);
        mpfr_fma(r20629, r20615, r20627, r20628, MPFR_RNDN);
        mpfr_add(r20630, r20623, r20629, MPFR_RNDN);
        mpfr_mul(r20631, r20612, r20612, MPFR_RNDN);
        ;
        mpfr_div(r20633, r20621, r20632, MPFR_RNDN);
        mpfr_div(r20634, r20626, r20633, MPFR_RNDN);
        ;
        mpfr_sub(r20636, r20634, r20635, MPFR_RNDN);
        mpfr_add(r20637, r20612, r20612, MPFR_RNDN);
        mpfr_neg(r20638, r20613, MPFR_RNDN);
        mpfr_mul(r20639, r20637, r20638, MPFR_RNDN);
        mpfr_div(r20640, r20639, r20621, MPFR_RNDN);
        mpfr_mul(r20641, r20640, r20626, MPFR_RNDN);
        mpfr_fma(r20642, r20631, r20636, r20641, MPFR_RNDN);
        mpfr_mul(r20643, r20621, r20626, MPFR_RNDN);
        mpfr_div(r20644, r20621, r20637, MPFR_RNDN);
        mpfr_div(r20645, r20644, r20627, MPFR_RNDN);
        mpfr_div(r20646, r20643, r20645, MPFR_RNDN);
        mpfr_fma(r20647, r20621, r20642, r20646, MPFR_RNDN);
        mpfr_add(r20648, r20630, r20647, MPFR_RNDN);
        mpfr_add(r20649, r20612, r20648, MPFR_RNDN);
        return mpfr_get_d(r20649, MPFR_RNDN);
}

static mpfr_t r20650, r20651, r20652, r20653, r20654, r20655, r20656, r20657, r20658, r20659, r20660, r20661, r20662, r20663, r20664, r20665, r20666, r20667, r20668, r20669, r20670, r20671, r20672, r20673, r20674, r20675, r20676, r20677, r20678, r20679, r20680, r20681, r20682, r20683, r20684, r20685, r20686, r20687;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r20650);
        mpfr_init_set_str(r20651, "3", 10, MPFR_RNDN);
        mpfr_init(r20652);
        mpfr_init(r20653);
        mpfr_init_set_str(r20654, "2", 10, MPFR_RNDN);
        mpfr_init(r20655);
        mpfr_init(r20656);
        mpfr_init(r20657);
        mpfr_init_set_str(r20658, "1", 10, MPFR_RNDN);
        mpfr_init(r20659);
        mpfr_init(r20660);
        mpfr_init(r20661);
        mpfr_init(r20662);
        mpfr_init(r20663);
        mpfr_init(r20664);
        mpfr_init(r20665);
        mpfr_init(r20666);
        mpfr_init(r20667);
        mpfr_init(r20668);
        mpfr_init(r20669);
        mpfr_init_set_str(r20670, "4", 10, MPFR_RNDN);
        mpfr_init(r20671);
        mpfr_init(r20672);
        mpfr_init_set_str(r20673, "6", 10, MPFR_RNDN);
        mpfr_init(r20674);
        mpfr_init(r20675);
        mpfr_init(r20676);
        mpfr_init(r20677);
        mpfr_init(r20678);
        mpfr_init(r20679);
        mpfr_init(r20680);
        mpfr_init(r20681);
        mpfr_init(r20682);
        mpfr_init(r20683);
        mpfr_init(r20684);
        mpfr_init(r20685);
        mpfr_init(r20686);
        mpfr_init(r20687);
}

double f_dm(double x1, double x2) {
        mpfr_set_d(r20650, x1, MPFR_RNDN);
        ;
        mpfr_mul(r20652, r20650, r20651, MPFR_RNDN);
        mpfr_mul(r20653, r20650, r20652, MPFR_RNDN);
        ;
        mpfr_set_d(r20655, x2, MPFR_RNDN);
        mpfr_fma(r20656, r20654, r20655, r20650, MPFR_RNDN);
        mpfr_sub(r20657, r20653, r20656, MPFR_RNDN);
        ;
        mpfr_fma(r20659, r20650, r20650, r20658, MPFR_RNDN);
        mpfr_div(r20660, r20657, r20659, MPFR_RNDN);
        mpfr_fma(r20661, r20651, r20660, r20650, MPFR_RNDN);
        mpfr_sub(r20662, r20655, r20650, MPFR_RNDN);
        mpfr_add(r20663, r20662, r20655, MPFR_RNDN);
        mpfr_fma(r20664, r20650, r20652, r20663, MPFR_RNDN);
        mpfr_div(r20665, r20664, r20659, MPFR_RNDN);
        mpfr_pow(r20666, r20650, r20651, MPFR_RNDN);
        mpfr_fma(r20667, r20653, r20665, r20666, MPFR_RNDN);
        mpfr_add(r20668, r20661, r20667, MPFR_RNDN);
        mpfr_mul(r20669, r20650, r20650, MPFR_RNDN);
        ;
        mpfr_div(r20671, r20659, r20670, MPFR_RNDN);
        mpfr_div(r20672, r20664, r20671, MPFR_RNDN);
        ;
        mpfr_sub(r20674, r20672, r20673, MPFR_RNDN);
        mpfr_add(r20675, r20650, r20650, MPFR_RNDN);
        mpfr_neg(r20676, r20651, MPFR_RNDN);
        mpfr_mul(r20677, r20675, r20676, MPFR_RNDN);
        mpfr_div(r20678, r20677, r20659, MPFR_RNDN);
        mpfr_mul(r20679, r20678, r20664, MPFR_RNDN);
        mpfr_fma(r20680, r20669, r20674, r20679, MPFR_RNDN);
        mpfr_mul(r20681, r20659, r20664, MPFR_RNDN);
        mpfr_div(r20682, r20659, r20675, MPFR_RNDN);
        mpfr_div(r20683, r20682, r20665, MPFR_RNDN);
        mpfr_div(r20684, r20681, r20683, MPFR_RNDN);
        mpfr_fma(r20685, r20659, r20680, r20684, MPFR_RNDN);
        mpfr_add(r20686, r20668, r20685, MPFR_RNDN);
        mpfr_add(r20687, r20650, r20686, MPFR_RNDN);
        return mpfr_get_d(r20687, MPFR_RNDN);
}

