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

char *name = "FastMath dist";

double f_if(float d1, float d2, float d3) {
        float r28132 = d1;
        float r28133 = d2;
        float r28134 = r28132 * r28133;
        float r28135 = d3;
        float r28136 = r28132 * r28135;
        float r28137 = r28134 + r28136;
        return r28137;
}

double f_id(double d1, double d2, double d3) {
        double r28138 = d1;
        double r28139 = d2;
        double r28140 = r28138 * r28139;
        double r28141 = d3;
        double r28142 = r28138 * r28141;
        double r28143 = r28140 + r28142;
        return r28143;
}


double f_of(float d1, float d2, float d3) {
        float r28144 = d3;
        float r28145 = d2;
        float r28146 = r28144 + r28145;
        float r28147 = d1;
        float r28148 = r28146 * r28147;
        return r28148;
}

double f_od(double d1, double d2, double d3) {
        double r28149 = d3;
        double r28150 = d2;
        double r28151 = r28149 + r28150;
        double r28152 = d1;
        double r28153 = r28151 * r28152;
        return r28153;
}

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 r28154, r28155, r28156, r28157, r28158, r28159;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r28154);
        mpfr_init(r28155);
        mpfr_init(r28156);
        mpfr_init(r28157);
        mpfr_init(r28158);
        mpfr_init(r28159);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r28154, d1, MPFR_RNDN);
        mpfr_set_d(r28155, d2, MPFR_RNDN);
        mpfr_mul(r28156, r28154, r28155, MPFR_RNDN);
        mpfr_set_d(r28157, d3, MPFR_RNDN);
        mpfr_mul(r28158, r28154, r28157, MPFR_RNDN);
        mpfr_add(r28159, r28156, r28158, MPFR_RNDN);
        return mpfr_get_d(r28159, MPFR_RNDN);
}

static mpfr_t r28160, r28161, r28162, r28163, r28164;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28160);
        mpfr_init(r28161);
        mpfr_init(r28162);
        mpfr_init(r28163);
        mpfr_init(r28164);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r28160, d3, MPFR_RNDN);
        mpfr_set_d(r28161, d2, MPFR_RNDN);
        mpfr_add(r28162, r28160, r28161, MPFR_RNDN);
        mpfr_set_d(r28163, d1, MPFR_RNDN);
        mpfr_mul(r28164, r28162, r28163, MPFR_RNDN);
        return mpfr_get_d(r28164, MPFR_RNDN);
}

static mpfr_t r28165, r28166, r28167, r28168, r28169;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28165);
        mpfr_init(r28166);
        mpfr_init(r28167);
        mpfr_init(r28168);
        mpfr_init(r28169);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r28165, d3, MPFR_RNDN);
        mpfr_set_d(r28166, d2, MPFR_RNDN);
        mpfr_add(r28167, r28165, r28166, MPFR_RNDN);
        mpfr_set_d(r28168, d1, MPFR_RNDN);
        mpfr_mul(r28169, r28167, r28168, MPFR_RNDN);
        return mpfr_get_d(r28169, MPFR_RNDN);
}

