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

char *name = "FastMath test3";

double f_if(float d1, float d2, float d3) {
        float r28374 = d1;
        float r28375 = 3;
        float r28376 = r28374 * r28375;
        float r28377 = d2;
        float r28378 = r28374 * r28377;
        float r28379 = r28376 + r28378;
        float r28380 = d3;
        float r28381 = r28374 * r28380;
        float r28382 = r28379 + r28381;
        return r28382;
}

double f_id(double d1, double d2, double d3) {
        double r28383 = d1;
        double r28384 = 3;
        double r28385 = r28383 * r28384;
        double r28386 = d2;
        double r28387 = r28383 * r28386;
        double r28388 = r28385 + r28387;
        double r28389 = d3;
        double r28390 = r28383 * r28389;
        double r28391 = r28388 + r28390;
        return r28391;
}


double f_of(float d1, float d2, float d3) {
        float r28392 = d2;
        float r28393 = 3;
        float r28394 = r28392 + r28393;
        float r28395 = d1;
        float r28396 = d3;
        float r28397 = r28395 * r28396;
        float r28398 = fma(r28394, r28395, r28397);
        return r28398;
}

double f_od(double d1, double d2, double d3) {
        double r28399 = d2;
        double r28400 = 3;
        double r28401 = r28399 + r28400;
        double r28402 = d1;
        double r28403 = d3;
        double r28404 = r28402 * r28403;
        double r28405 = fma(r28401, r28402, r28404);
        return r28405;
}

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 r28406, r28407, r28408, r28409, r28410, r28411, r28412, r28413, r28414;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28406);
        mpfr_init_set_str(r28407, "3", 10, MPFR_RNDN);
        mpfr_init(r28408);
        mpfr_init(r28409);
        mpfr_init(r28410);
        mpfr_init(r28411);
        mpfr_init(r28412);
        mpfr_init(r28413);
        mpfr_init(r28414);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r28406, d1, MPFR_RNDN);
        ;
        mpfr_mul(r28408, r28406, r28407, MPFR_RNDN);
        mpfr_set_d(r28409, d2, MPFR_RNDN);
        mpfr_mul(r28410, r28406, r28409, MPFR_RNDN);
        mpfr_add(r28411, r28408, r28410, MPFR_RNDN);
        mpfr_set_d(r28412, d3, MPFR_RNDN);
        mpfr_mul(r28413, r28406, r28412, MPFR_RNDN);
        mpfr_add(r28414, r28411, r28413, MPFR_RNDN);
        return mpfr_get_d(r28414, MPFR_RNDN);
}

static mpfr_t r28415, r28416, r28417, r28418, r28419, r28420, r28421;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28415);
        mpfr_init_set_str(r28416, "3", 10, MPFR_RNDN);
        mpfr_init(r28417);
        mpfr_init(r28418);
        mpfr_init(r28419);
        mpfr_init(r28420);
        mpfr_init(r28421);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r28415, d2, MPFR_RNDN);
        ;
        mpfr_add(r28417, r28415, r28416, MPFR_RNDN);
        mpfr_set_d(r28418, d1, MPFR_RNDN);
        mpfr_set_d(r28419, d3, MPFR_RNDN);
        mpfr_mul(r28420, r28418, r28419, MPFR_RNDN);
        mpfr_fma(r28421, r28417, r28418, r28420, MPFR_RNDN);
        return mpfr_get_d(r28421, MPFR_RNDN);
}

static mpfr_t r28422, r28423, r28424, r28425, r28426, r28427, r28428;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28422);
        mpfr_init_set_str(r28423, "3", 10, MPFR_RNDN);
        mpfr_init(r28424);
        mpfr_init(r28425);
        mpfr_init(r28426);
        mpfr_init(r28427);
        mpfr_init(r28428);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r28422, d2, MPFR_RNDN);
        ;
        mpfr_add(r28424, r28422, r28423, MPFR_RNDN);
        mpfr_set_d(r28425, d1, MPFR_RNDN);
        mpfr_set_d(r28426, d3, MPFR_RNDN);
        mpfr_mul(r28427, r28425, r28426, MPFR_RNDN);
        mpfr_fma(r28428, r28424, r28425, r28427, MPFR_RNDN);
        return mpfr_get_d(r28428, MPFR_RNDN);
}

