#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 r28536 = d1;
        float r28537 = 3;
        float r28538 = r28536 * r28537;
        float r28539 = d2;
        float r28540 = r28536 * r28539;
        float r28541 = r28538 + r28540;
        float r28542 = d3;
        float r28543 = r28536 * r28542;
        float r28544 = r28541 + r28543;
        return r28544;
}

double f_id(double d1, double d2, double d3) {
        double r28545 = d1;
        double r28546 = 3;
        double r28547 = r28545 * r28546;
        double r28548 = d2;
        double r28549 = r28545 * r28548;
        double r28550 = r28547 + r28549;
        double r28551 = d3;
        double r28552 = r28545 * r28551;
        double r28553 = r28550 + r28552;
        return r28553;
}


double f_of(float d1, float d2, float d3) {
        float r28554 = d2;
        float r28555 = 3;
        float r28556 = r28554 + r28555;
        float r28557 = d1;
        float r28558 = d3;
        float r28559 = r28557 * r28558;
        float r28560 = fma(r28556, r28557, r28559);
        return r28560;
}

double f_od(double d1, double d2, double d3) {
        double r28561 = d2;
        double r28562 = 3;
        double r28563 = r28561 + r28562;
        double r28564 = d1;
        double r28565 = d3;
        double r28566 = r28564 * r28565;
        double r28567 = fma(r28563, r28564, r28566);
        return r28567;
}

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 r28568, r28569, r28570, r28571, r28572, r28573, r28574, r28575, r28576;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28568);
        mpfr_init_set_str(r28569, "3", 10, MPFR_RNDN);
        mpfr_init(r28570);
        mpfr_init(r28571);
        mpfr_init(r28572);
        mpfr_init(r28573);
        mpfr_init(r28574);
        mpfr_init(r28575);
        mpfr_init(r28576);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r28568, d1, MPFR_RNDN);
        ;
        mpfr_mul(r28570, r28568, r28569, MPFR_RNDN);
        mpfr_set_d(r28571, d2, MPFR_RNDN);
        mpfr_mul(r28572, r28568, r28571, MPFR_RNDN);
        mpfr_add(r28573, r28570, r28572, MPFR_RNDN);
        mpfr_set_d(r28574, d3, MPFR_RNDN);
        mpfr_mul(r28575, r28568, r28574, MPFR_RNDN);
        mpfr_add(r28576, r28573, r28575, MPFR_RNDN);
        return mpfr_get_d(r28576, MPFR_RNDN);
}

static mpfr_t r28577, r28578, r28579, r28580, r28581, r28582, r28583;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28577);
        mpfr_init_set_str(r28578, "3", 10, MPFR_RNDN);
        mpfr_init(r28579);
        mpfr_init(r28580);
        mpfr_init(r28581);
        mpfr_init(r28582);
        mpfr_init(r28583);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r28577, d2, MPFR_RNDN);
        ;
        mpfr_add(r28579, r28577, r28578, MPFR_RNDN);
        mpfr_set_d(r28580, d1, MPFR_RNDN);
        mpfr_set_d(r28581, d3, MPFR_RNDN);
        mpfr_mul(r28582, r28580, r28581, MPFR_RNDN);
        mpfr_fma(r28583, r28579, r28580, r28582, MPFR_RNDN);
        return mpfr_get_d(r28583, MPFR_RNDN);
}

static mpfr_t r28584, r28585, r28586, r28587, r28588, r28589, r28590;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28584);
        mpfr_init_set_str(r28585, "3", 10, MPFR_RNDN);
        mpfr_init(r28586);
        mpfr_init(r28587);
        mpfr_init(r28588);
        mpfr_init(r28589);
        mpfr_init(r28590);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r28584, d2, MPFR_RNDN);
        ;
        mpfr_add(r28586, r28584, r28585, MPFR_RNDN);
        mpfr_set_d(r28587, d1, MPFR_RNDN);
        mpfr_set_d(r28588, d3, MPFR_RNDN);
        mpfr_mul(r28589, r28587, r28588, MPFR_RNDN);
        mpfr_fma(r28590, r28586, r28587, r28589, MPFR_RNDN);
        return mpfr_get_d(r28590, MPFR_RNDN);
}

