#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 r9448 = x;
        float r9449 = y;
        float r9450 = z;
        float r9451 = fma(r9448, r9449, r9450);
        float r9452 = 1;
        float r9453 = r9448 * r9449;
        float r9454 = r9453 + r9450;
        float r9455 = r9452 + r9454;
        float r9456 = r9451 - r9455;
        return r9456;
}

double f_id(double x, double y, double z) {
        double r9457 = x;
        double r9458 = y;
        double r9459 = z;
        double r9460 = fma(r9457, r9458, r9459);
        double r9461 = 1;
        double r9462 = r9457 * r9458;
        double r9463 = r9462 + r9459;
        double r9464 = r9461 + r9463;
        double r9465 = r9460 - r9464;
        return r9465;
}


double f_of(float x, float y, float z) {
        float r9466 = x;
        float r9467 = y;
        float r9468 = z;
        float r9469 = fma(r9466, r9467, r9468);
        float r9470 = r9467 * r9466;
        float r9471 = r9469 - r9470;
        float r9472 = 1;
        float r9473 = r9472 + r9468;
        float r9474 = r9471 - r9473;
        float r9475 = 3;
        float r9476 = pow(r9474, r9475);
        float r9477 = cbrt(r9476);
        float r9478 = -8.160519111197536e-155;
        bool r9479 = r9477 <= r9478;
        float r9480 = r9472 - r9470;
        float r9481 = r9469 - r9468;
        float r9482 = r9480 * r9481;
        float r9483 = r9482 - r9472;
        float r9484 = r9483 / r9480;
        float r9485 = r9479 ? r9474 : r9484;
        return r9485;
}

double f_od(double x, double y, double z) {
        double r9486 = x;
        double r9487 = y;
        double r9488 = z;
        double r9489 = fma(r9486, r9487, r9488);
        double r9490 = r9487 * r9486;
        double r9491 = r9489 - r9490;
        double r9492 = 1;
        double r9493 = r9492 + r9488;
        double r9494 = r9491 - r9493;
        double r9495 = 3;
        double r9496 = pow(r9494, r9495);
        double r9497 = cbrt(r9496);
        double r9498 = -8.160519111197536e-155;
        bool r9499 = r9497 <= r9498;
        double r9500 = r9492 - r9490;
        double r9501 = r9489 - r9488;
        double r9502 = r9500 * r9501;
        double r9503 = r9502 - r9492;
        double r9504 = r9503 / r9500;
        double r9505 = r9499 ? r9494 : r9504;
        return r9505;
}

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 r9506, r9507, r9508, r9509, r9510, r9511, r9512, r9513, r9514;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9506);
        mpfr_init(r9507);
        mpfr_init(r9508);
        mpfr_init(r9509);
        mpfr_init_set_str(r9510, "1", 10, MPFR_RNDN);
        mpfr_init(r9511);
        mpfr_init(r9512);
        mpfr_init(r9513);
        mpfr_init(r9514);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r9506, x, MPFR_RNDN);
        mpfr_set_d(r9507, y, MPFR_RNDN);
        mpfr_set_d(r9508, z, MPFR_RNDN);
        mpfr_fma(r9509, r9506, r9507, r9508, MPFR_RNDN);
        ;
        mpfr_mul(r9511, r9506, r9507, MPFR_RNDN);
        mpfr_add(r9512, r9511, r9508, MPFR_RNDN);
        mpfr_add(r9513, r9510, r9512, MPFR_RNDN);
        mpfr_sub(r9514, r9509, r9513, MPFR_RNDN);
        return mpfr_get_d(r9514, MPFR_RNDN);
}

static mpfr_t r9515, r9516, r9517, r9518, r9519, r9520, r9521, r9522, r9523, r9524, r9525, r9526, r9527, r9528, r9529, r9530, r9531, r9532, r9533, r9534;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9515);
        mpfr_init(r9516);
        mpfr_init(r9517);
        mpfr_init(r9518);
        mpfr_init(r9519);
        mpfr_init(r9520);
        mpfr_init_set_str(r9521, "1", 10, MPFR_RNDN);
        mpfr_init(r9522);
        mpfr_init(r9523);
        mpfr_init_set_str(r9524, "3", 10, MPFR_RNDN);
        mpfr_init(r9525);
        mpfr_init(r9526);
        mpfr_init_set_str(r9527, "-8.160519111197536e-155", 10, MPFR_RNDN);
        mpfr_init(r9528);
        mpfr_init(r9529);
        mpfr_init(r9530);
        mpfr_init(r9531);
        mpfr_init(r9532);
        mpfr_init(r9533);
        mpfr_init(r9534);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r9515, x, MPFR_RNDN);
        mpfr_set_d(r9516, y, MPFR_RNDN);
        mpfr_set_d(r9517, z, MPFR_RNDN);
        mpfr_fma(r9518, r9515, r9516, r9517, MPFR_RNDN);
        mpfr_mul(r9519, r9516, r9515, MPFR_RNDN);
        mpfr_sub(r9520, r9518, r9519, MPFR_RNDN);
        ;
        mpfr_add(r9522, r9521, r9517, MPFR_RNDN);
        mpfr_sub(r9523, r9520, r9522, MPFR_RNDN);
        ;
        mpfr_pow(r9525, r9523, r9524, MPFR_RNDN);
        mpfr_cbrt(r9526, r9525, MPFR_RNDN);
        ;
        mpfr_set_si(r9528, mpfr_cmp(r9526, r9527) <= 0, MPFR_RNDN);
        mpfr_sub(r9529, r9521, r9519, MPFR_RNDN);
        mpfr_sub(r9530, r9518, r9517, MPFR_RNDN);
        mpfr_mul(r9531, r9529, r9530, MPFR_RNDN);
        mpfr_sub(r9532, r9531, r9521, MPFR_RNDN);
        mpfr_div(r9533, r9532, r9529, MPFR_RNDN);
        if (mpfr_get_si(r9528, MPFR_RNDN)) { mpfr_set(r9534, r9523, MPFR_RNDN); } else { mpfr_set(r9534, r9533, MPFR_RNDN); };
        return mpfr_get_d(r9534, MPFR_RNDN);
}

static mpfr_t r9535, r9536, r9537, r9538, r9539, r9540, r9541, r9542, r9543, r9544, r9545, r9546, r9547, r9548, r9549, r9550, r9551, r9552, r9553, r9554;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r9535);
        mpfr_init(r9536);
        mpfr_init(r9537);
        mpfr_init(r9538);
        mpfr_init(r9539);
        mpfr_init(r9540);
        mpfr_init_set_str(r9541, "1", 10, MPFR_RNDN);
        mpfr_init(r9542);
        mpfr_init(r9543);
        mpfr_init_set_str(r9544, "3", 10, MPFR_RNDN);
        mpfr_init(r9545);
        mpfr_init(r9546);
        mpfr_init_set_str(r9547, "-8.160519111197536e-155", 10, MPFR_RNDN);
        mpfr_init(r9548);
        mpfr_init(r9549);
        mpfr_init(r9550);
        mpfr_init(r9551);
        mpfr_init(r9552);
        mpfr_init(r9553);
        mpfr_init(r9554);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r9535, x, MPFR_RNDN);
        mpfr_set_d(r9536, y, MPFR_RNDN);
        mpfr_set_d(r9537, z, MPFR_RNDN);
        mpfr_fma(r9538, r9535, r9536, r9537, MPFR_RNDN);
        mpfr_mul(r9539, r9536, r9535, MPFR_RNDN);
        mpfr_sub(r9540, r9538, r9539, MPFR_RNDN);
        ;
        mpfr_add(r9542, r9541, r9537, MPFR_RNDN);
        mpfr_sub(r9543, r9540, r9542, MPFR_RNDN);
        ;
        mpfr_pow(r9545, r9543, r9544, MPFR_RNDN);
        mpfr_cbrt(r9546, r9545, MPFR_RNDN);
        ;
        mpfr_set_si(r9548, mpfr_cmp(r9546, r9547) <= 0, MPFR_RNDN);
        mpfr_sub(r9549, r9541, r9539, MPFR_RNDN);
        mpfr_sub(r9550, r9538, r9537, MPFR_RNDN);
        mpfr_mul(r9551, r9549, r9550, MPFR_RNDN);
        mpfr_sub(r9552, r9551, r9541, MPFR_RNDN);
        mpfr_div(r9553, r9552, r9549, MPFR_RNDN);
        if (mpfr_get_si(r9548, MPFR_RNDN)) { mpfr_set(r9554, r9543, MPFR_RNDN); } else { mpfr_set(r9554, r9553, MPFR_RNDN); };
        return mpfr_get_d(r9554, MPFR_RNDN);
}

