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

char *name = "simple fma test";

double f_if(float x, float y, float z) {
        float r16280426 = x;
        float r16280427 = y;
        float r16280428 = z;
        float r16280429 = fma(r16280426, r16280427, r16280428);
        float r16280430 = 1;
        float r16280431 = r16280426 * r16280427;
        float r16280432 = r16280431 + r16280428;
        float r16280433 = r16280430 + r16280432;
        float r16280434 = r16280429 - r16280433;
        return r16280434;
}

double f_id(double x, double y, double z) {
        double r16280435 = x;
        double r16280436 = y;
        double r16280437 = z;
        double r16280438 = fma(r16280435, r16280436, r16280437);
        double r16280439 = 1;
        double r16280440 = r16280435 * r16280436;
        double r16280441 = r16280440 + r16280437;
        double r16280442 = r16280439 + r16280441;
        double r16280443 = r16280438 - r16280442;
        return r16280443;
}


double f_of(float x, float y, float z) {
        float r16280444 = z;
        float r16280445 = -1.7210213825870034e+55;
        bool r16280446 = r16280444 <= r16280445;
        float r16280447 = x;
        float r16280448 = y;
        float r16280449 = fma(r16280447, r16280448, r16280444);
        float r16280450 = r16280449 - r16280444;
        float r16280451 = r16280447 * r16280448;
        float r16280452 = 1;
        float r16280453 = r16280451 + r16280452;
        float r16280454 = r16280450 - r16280453;
        float r16280455 = 6.03684444331961e+16;
        bool r16280456 = r16280444 <= r16280455;
        float r16280457 = r16280451 / r16280452;
        float r16280458 = r16280451 - r16280444;
        float r16280459 = r16280451 / r16280458;
        float r16280460 = r16280457 * r16280459;
        float r16280461 = r16280449 - r16280460;
        float r16280462 = r16280444 * r16280444;
        float r16280463 = r16280462 / r16280458;
        float r16280464 = r16280452 - r16280463;
        float r16280465 = r16280461 - r16280464;
        float r16280466 = exp(r16280465);
        float r16280467 = log(r16280466);
        float r16280468 = r16280456 ? r16280467 : r16280454;
        float r16280469 = r16280446 ? r16280454 : r16280468;
        return r16280469;
}

double f_od(double x, double y, double z) {
        double r16280470 = z;
        double r16280471 = -1.7210213825870034e+55;
        bool r16280472 = r16280470 <= r16280471;
        double r16280473 = x;
        double r16280474 = y;
        double r16280475 = fma(r16280473, r16280474, r16280470);
        double r16280476 = r16280475 - r16280470;
        double r16280477 = r16280473 * r16280474;
        double r16280478 = 1;
        double r16280479 = r16280477 + r16280478;
        double r16280480 = r16280476 - r16280479;
        double r16280481 = 6.03684444331961e+16;
        bool r16280482 = r16280470 <= r16280481;
        double r16280483 = r16280477 / r16280478;
        double r16280484 = r16280477 - r16280470;
        double r16280485 = r16280477 / r16280484;
        double r16280486 = r16280483 * r16280485;
        double r16280487 = r16280475 - r16280486;
        double r16280488 = r16280470 * r16280470;
        double r16280489 = r16280488 / r16280484;
        double r16280490 = r16280478 - r16280489;
        double r16280491 = r16280487 - r16280490;
        double r16280492 = exp(r16280491);
        double r16280493 = log(r16280492);
        double r16280494 = r16280482 ? r16280493 : r16280480;
        double r16280495 = r16280472 ? r16280480 : r16280494;
        return r16280495;
}

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 r16280496, r16280497, r16280498, r16280499, r16280500, r16280501, r16280502, r16280503, r16280504;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r16280496);
        mpfr_init(r16280497);
        mpfr_init(r16280498);
        mpfr_init(r16280499);
        mpfr_init_set_str(r16280500, "1", 10, MPFR_RNDN);
        mpfr_init(r16280501);
        mpfr_init(r16280502);
        mpfr_init(r16280503);
        mpfr_init(r16280504);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r16280496, x, MPFR_RNDN);
        mpfr_set_d(r16280497, y, MPFR_RNDN);
        mpfr_set_d(r16280498, z, MPFR_RNDN);
        mpfr_fma(r16280499, r16280496, r16280497, r16280498, MPFR_RNDN);
        ;
        mpfr_mul(r16280501, r16280496, r16280497, MPFR_RNDN);
        mpfr_add(r16280502, r16280501, r16280498, MPFR_RNDN);
        mpfr_add(r16280503, r16280500, r16280502, MPFR_RNDN);
        mpfr_sub(r16280504, r16280499, r16280503, MPFR_RNDN);
        return mpfr_get_d(r16280504, MPFR_RNDN);
}

static mpfr_t r16280505, r16280506, r16280507, r16280508, r16280509, r16280510, r16280511, r16280512, r16280513, r16280514, r16280515, r16280516, r16280517, r16280518, r16280519, r16280520, r16280521, r16280522, r16280523, r16280524, r16280525, r16280526, r16280527, r16280528, r16280529, r16280530;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r16280505);
        mpfr_init_set_str(r16280506, "-1.7210213825870034e+55", 10, MPFR_RNDN);
        mpfr_init(r16280507);
        mpfr_init(r16280508);
        mpfr_init(r16280509);
        mpfr_init(r16280510);
        mpfr_init(r16280511);
        mpfr_init(r16280512);
        mpfr_init_set_str(r16280513, "1", 10, MPFR_RNDN);
        mpfr_init(r16280514);
        mpfr_init(r16280515);
        mpfr_init_set_str(r16280516, "6.03684444331961e+16", 10, MPFR_RNDN);
        mpfr_init(r16280517);
        mpfr_init(r16280518);
        mpfr_init(r16280519);
        mpfr_init(r16280520);
        mpfr_init(r16280521);
        mpfr_init(r16280522);
        mpfr_init(r16280523);
        mpfr_init(r16280524);
        mpfr_init(r16280525);
        mpfr_init(r16280526);
        mpfr_init(r16280527);
        mpfr_init(r16280528);
        mpfr_init(r16280529);
        mpfr_init(r16280530);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r16280505, z, MPFR_RNDN);
        ;
        mpfr_set_si(r16280507, mpfr_cmp(r16280505, r16280506) <= 0, MPFR_RNDN);
        mpfr_set_d(r16280508, x, MPFR_RNDN);
        mpfr_set_d(r16280509, y, MPFR_RNDN);
        mpfr_fma(r16280510, r16280508, r16280509, r16280505, MPFR_RNDN);
        mpfr_sub(r16280511, r16280510, r16280505, MPFR_RNDN);
        mpfr_mul(r16280512, r16280508, r16280509, MPFR_RNDN);
        ;
        mpfr_add(r16280514, r16280512, r16280513, MPFR_RNDN);
        mpfr_sub(r16280515, r16280511, r16280514, MPFR_RNDN);
        ;
        mpfr_set_si(r16280517, mpfr_cmp(r16280505, r16280516) <= 0, MPFR_RNDN);
        mpfr_div(r16280518, r16280512, r16280513, MPFR_RNDN);
        mpfr_sub(r16280519, r16280512, r16280505, MPFR_RNDN);
        mpfr_div(r16280520, r16280512, r16280519, MPFR_RNDN);
        mpfr_mul(r16280521, r16280518, r16280520, MPFR_RNDN);
        mpfr_sub(r16280522, r16280510, r16280521, MPFR_RNDN);
        mpfr_mul(r16280523, r16280505, r16280505, MPFR_RNDN);
        mpfr_div(r16280524, r16280523, r16280519, MPFR_RNDN);
        mpfr_sub(r16280525, r16280513, r16280524, MPFR_RNDN);
        mpfr_sub(r16280526, r16280522, r16280525, MPFR_RNDN);
        mpfr_exp(r16280527, r16280526, MPFR_RNDN);
        mpfr_log(r16280528, r16280527, MPFR_RNDN);
        if (mpfr_get_si(r16280517, MPFR_RNDN)) { mpfr_set(r16280529, r16280528, MPFR_RNDN); } else { mpfr_set(r16280529, r16280515, MPFR_RNDN); };
        if (mpfr_get_si(r16280507, MPFR_RNDN)) { mpfr_set(r16280530, r16280515, MPFR_RNDN); } else { mpfr_set(r16280530, r16280529, MPFR_RNDN); };
        return mpfr_get_d(r16280530, MPFR_RNDN);
}

static mpfr_t r16280531, r16280532, r16280533, r16280534, r16280535, r16280536, r16280537, r16280538, r16280539, r16280540, r16280541, r16280542, r16280543, r16280544, r16280545, r16280546, r16280547, r16280548, r16280549, r16280550, r16280551, r16280552, r16280553, r16280554, r16280555, r16280556;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r16280531);
        mpfr_init_set_str(r16280532, "-1.7210213825870034e+55", 10, MPFR_RNDN);
        mpfr_init(r16280533);
        mpfr_init(r16280534);
        mpfr_init(r16280535);
        mpfr_init(r16280536);
        mpfr_init(r16280537);
        mpfr_init(r16280538);
        mpfr_init_set_str(r16280539, "1", 10, MPFR_RNDN);
        mpfr_init(r16280540);
        mpfr_init(r16280541);
        mpfr_init_set_str(r16280542, "6.03684444331961e+16", 10, MPFR_RNDN);
        mpfr_init(r16280543);
        mpfr_init(r16280544);
        mpfr_init(r16280545);
        mpfr_init(r16280546);
        mpfr_init(r16280547);
        mpfr_init(r16280548);
        mpfr_init(r16280549);
        mpfr_init(r16280550);
        mpfr_init(r16280551);
        mpfr_init(r16280552);
        mpfr_init(r16280553);
        mpfr_init(r16280554);
        mpfr_init(r16280555);
        mpfr_init(r16280556);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r16280531, z, MPFR_RNDN);
        ;
        mpfr_set_si(r16280533, mpfr_cmp(r16280531, r16280532) <= 0, MPFR_RNDN);
        mpfr_set_d(r16280534, x, MPFR_RNDN);
        mpfr_set_d(r16280535, y, MPFR_RNDN);
        mpfr_fma(r16280536, r16280534, r16280535, r16280531, MPFR_RNDN);
        mpfr_sub(r16280537, r16280536, r16280531, MPFR_RNDN);
        mpfr_mul(r16280538, r16280534, r16280535, MPFR_RNDN);
        ;
        mpfr_add(r16280540, r16280538, r16280539, MPFR_RNDN);
        mpfr_sub(r16280541, r16280537, r16280540, MPFR_RNDN);
        ;
        mpfr_set_si(r16280543, mpfr_cmp(r16280531, r16280542) <= 0, MPFR_RNDN);
        mpfr_div(r16280544, r16280538, r16280539, MPFR_RNDN);
        mpfr_sub(r16280545, r16280538, r16280531, MPFR_RNDN);
        mpfr_div(r16280546, r16280538, r16280545, MPFR_RNDN);
        mpfr_mul(r16280547, r16280544, r16280546, MPFR_RNDN);
        mpfr_sub(r16280548, r16280536, r16280547, MPFR_RNDN);
        mpfr_mul(r16280549, r16280531, r16280531, MPFR_RNDN);
        mpfr_div(r16280550, r16280549, r16280545, MPFR_RNDN);
        mpfr_sub(r16280551, r16280539, r16280550, MPFR_RNDN);
        mpfr_sub(r16280552, r16280548, r16280551, MPFR_RNDN);
        mpfr_exp(r16280553, r16280552, MPFR_RNDN);
        mpfr_log(r16280554, r16280553, MPFR_RNDN);
        if (mpfr_get_si(r16280543, MPFR_RNDN)) { mpfr_set(r16280555, r16280554, MPFR_RNDN); } else { mpfr_set(r16280555, r16280541, MPFR_RNDN); };
        if (mpfr_get_si(r16280533, MPFR_RNDN)) { mpfr_set(r16280556, r16280541, MPFR_RNDN); } else { mpfr_set(r16280556, r16280555, MPFR_RNDN); };
        return mpfr_get_d(r16280556, MPFR_RNDN);
}

