#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 r38208 = x;
        float r38209 = y;
        float r38210 = z;
        float r38211 = fma(r38208, r38209, r38210);
        float r38212 = 1;
        float r38213 = r38208 * r38209;
        float r38214 = r38213 + r38210;
        float r38215 = r38212 + r38214;
        float r38216 = r38211 - r38215;
        return r38216;
}

double f_id(double x, double y, double z) {
        double r38217 = x;
        double r38218 = y;
        double r38219 = z;
        double r38220 = fma(r38217, r38218, r38219);
        double r38221 = 1;
        double r38222 = r38217 * r38218;
        double r38223 = r38222 + r38219;
        double r38224 = r38221 + r38223;
        double r38225 = r38220 - r38224;
        return r38225;
}


double f_of(float x, float y, float z) {
        float r38226 = x;
        float r38227 = y;
        float r38228 = z;
        float r38229 = fma(r38226, r38227, r38228);
        float r38230 = r38229 - r38228;
        float r38231 = 1;
        float r38232 = r38227 * r38226;
        float r38233 = r38231 + r38232;
        float r38234 = r38230 - r38233;
        float r38235 = cbrt(r38234);
        float r38236 = r38235 * r38235;
        float r38237 = r38236 * r38235;
        return r38237;
}

double f_od(double x, double y, double z) {
        double r38238 = x;
        double r38239 = y;
        double r38240 = z;
        double r38241 = fma(r38238, r38239, r38240);
        double r38242 = r38241 - r38240;
        double r38243 = 1;
        double r38244 = r38239 * r38238;
        double r38245 = r38243 + r38244;
        double r38246 = r38242 - r38245;
        double r38247 = cbrt(r38246);
        double r38248 = r38247 * r38247;
        double r38249 = r38248 * r38247;
        return r38249;
}

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 r38250, r38251, r38252, r38253, r38254, r38255, r38256, r38257, r38258;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r38250);
        mpfr_init(r38251);
        mpfr_init(r38252);
        mpfr_init(r38253);
        mpfr_init_set_str(r38254, "1", 10, MPFR_RNDN);
        mpfr_init(r38255);
        mpfr_init(r38256);
        mpfr_init(r38257);
        mpfr_init(r38258);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r38250, x, MPFR_RNDN);
        mpfr_set_d(r38251, y, MPFR_RNDN);
        mpfr_set_d(r38252, z, MPFR_RNDN);
        mpfr_fma(r38253, r38250, r38251, r38252, MPFR_RNDN);
        ;
        mpfr_mul(r38255, r38250, r38251, MPFR_RNDN);
        mpfr_add(r38256, r38255, r38252, MPFR_RNDN);
        mpfr_add(r38257, r38254, r38256, MPFR_RNDN);
        mpfr_sub(r38258, r38253, r38257, MPFR_RNDN);
        return mpfr_get_d(r38258, MPFR_RNDN);
}

static mpfr_t r38259, r38260, r38261, r38262, r38263, r38264, r38265, r38266, r38267, r38268, r38269, r38270;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r38259);
        mpfr_init(r38260);
        mpfr_init(r38261);
        mpfr_init(r38262);
        mpfr_init(r38263);
        mpfr_init_set_str(r38264, "1", 10, MPFR_RNDN);
        mpfr_init(r38265);
        mpfr_init(r38266);
        mpfr_init(r38267);
        mpfr_init(r38268);
        mpfr_init(r38269);
        mpfr_init(r38270);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r38259, x, MPFR_RNDN);
        mpfr_set_d(r38260, y, MPFR_RNDN);
        mpfr_set_d(r38261, z, MPFR_RNDN);
        mpfr_fma(r38262, r38259, r38260, r38261, MPFR_RNDN);
        mpfr_sub(r38263, r38262, r38261, MPFR_RNDN);
        ;
        mpfr_mul(r38265, r38260, r38259, MPFR_RNDN);
        mpfr_add(r38266, r38264, r38265, MPFR_RNDN);
        mpfr_sub(r38267, r38263, r38266, MPFR_RNDN);
        mpfr_cbrt(r38268, r38267, MPFR_RNDN);
        mpfr_mul(r38269, r38268, r38268, MPFR_RNDN);
        mpfr_mul(r38270, r38269, r38268, MPFR_RNDN);
        return mpfr_get_d(r38270, MPFR_RNDN);
}

static mpfr_t r38271, r38272, r38273, r38274, r38275, r38276, r38277, r38278, r38279, r38280, r38281, r38282;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r38271);
        mpfr_init(r38272);
        mpfr_init(r38273);
        mpfr_init(r38274);
        mpfr_init(r38275);
        mpfr_init_set_str(r38276, "1", 10, MPFR_RNDN);
        mpfr_init(r38277);
        mpfr_init(r38278);
        mpfr_init(r38279);
        mpfr_init(r38280);
        mpfr_init(r38281);
        mpfr_init(r38282);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r38271, x, MPFR_RNDN);
        mpfr_set_d(r38272, y, MPFR_RNDN);
        mpfr_set_d(r38273, z, MPFR_RNDN);
        mpfr_fma(r38274, r38271, r38272, r38273, MPFR_RNDN);
        mpfr_sub(r38275, r38274, r38273, MPFR_RNDN);
        ;
        mpfr_mul(r38277, r38272, r38271, MPFR_RNDN);
        mpfr_add(r38278, r38276, r38277, MPFR_RNDN);
        mpfr_sub(r38279, r38275, r38278, MPFR_RNDN);
        mpfr_cbrt(r38280, r38279, MPFR_RNDN);
        mpfr_mul(r38281, r38280, r38280, MPFR_RNDN);
        mpfr_mul(r38282, r38281, r38280, MPFR_RNDN);
        return mpfr_get_d(r38282, MPFR_RNDN);
}

