#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 r28574 = d1;
        float r28575 = 3;
        float r28576 = r28574 * r28575;
        float r28577 = d2;
        float r28578 = r28574 * r28577;
        float r28579 = r28576 + r28578;
        float r28580 = d3;
        float r28581 = r28574 * r28580;
        float r28582 = r28579 + r28581;
        return r28582;
}

double f_id(double d1, double d2, double d3) {
        double r28583 = d1;
        double r28584 = 3;
        double r28585 = r28583 * r28584;
        double r28586 = d2;
        double r28587 = r28583 * r28586;
        double r28588 = r28585 + r28587;
        double r28589 = d3;
        double r28590 = r28583 * r28589;
        double r28591 = r28588 + r28590;
        return r28591;
}


double f_of(float d1, float d2, float d3) {
        float r28592 = d2;
        float r28593 = 3;
        float r28594 = r28592 + r28593;
        float r28595 = d1;
        float r28596 = d3;
        float r28597 = r28595 * r28596;
        float r28598 = fma(r28594, r28595, r28597);
        return r28598;
}

double f_od(double d1, double d2, double d3) {
        double r28599 = d2;
        double r28600 = 3;
        double r28601 = r28599 + r28600;
        double r28602 = d1;
        double r28603 = d3;
        double r28604 = r28602 * r28603;
        double r28605 = fma(r28601, r28602, r28604);
        return r28605;
}

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 r28606, r28607, r28608, r28609, r28610, r28611, r28612, r28613, r28614;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28606);
        mpfr_init_set_str(r28607, "3", 10, MPFR_RNDN);
        mpfr_init(r28608);
        mpfr_init(r28609);
        mpfr_init(r28610);
        mpfr_init(r28611);
        mpfr_init(r28612);
        mpfr_init(r28613);
        mpfr_init(r28614);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r28606, d1, MPFR_RNDN);
        ;
        mpfr_mul(r28608, r28606, r28607, MPFR_RNDN);
        mpfr_set_d(r28609, d2, MPFR_RNDN);
        mpfr_mul(r28610, r28606, r28609, MPFR_RNDN);
        mpfr_add(r28611, r28608, r28610, MPFR_RNDN);
        mpfr_set_d(r28612, d3, MPFR_RNDN);
        mpfr_mul(r28613, r28606, r28612, MPFR_RNDN);
        mpfr_add(r28614, r28611, r28613, MPFR_RNDN);
        return mpfr_get_d(r28614, MPFR_RNDN);
}

static mpfr_t r28615, r28616, r28617, r28618, r28619, r28620, r28621;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28615);
        mpfr_init_set_str(r28616, "3", 10, MPFR_RNDN);
        mpfr_init(r28617);
        mpfr_init(r28618);
        mpfr_init(r28619);
        mpfr_init(r28620);
        mpfr_init(r28621);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r28615, d2, MPFR_RNDN);
        ;
        mpfr_add(r28617, r28615, r28616, MPFR_RNDN);
        mpfr_set_d(r28618, d1, MPFR_RNDN);
        mpfr_set_d(r28619, d3, MPFR_RNDN);
        mpfr_mul(r28620, r28618, r28619, MPFR_RNDN);
        mpfr_fma(r28621, r28617, r28618, r28620, MPFR_RNDN);
        return mpfr_get_d(r28621, MPFR_RNDN);
}

static mpfr_t r28622, r28623, r28624, r28625, r28626, r28627, r28628;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28622);
        mpfr_init_set_str(r28623, "3", 10, MPFR_RNDN);
        mpfr_init(r28624);
        mpfr_init(r28625);
        mpfr_init(r28626);
        mpfr_init(r28627);
        mpfr_init(r28628);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r28622, d2, MPFR_RNDN);
        ;
        mpfr_add(r28624, r28622, r28623, MPFR_RNDN);
        mpfr_set_d(r28625, d1, MPFR_RNDN);
        mpfr_set_d(r28626, d3, MPFR_RNDN);
        mpfr_mul(r28627, r28625, r28626, MPFR_RNDN);
        mpfr_fma(r28628, r28624, r28625, r28627, MPFR_RNDN);
        return mpfr_get_d(r28628, MPFR_RNDN);
}

