#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 r12721 = d1;
        float r12722 = d2;
        float r12723 = r12721 * r12722;
        float r12724 = d3;
        float r12725 = r12721 * r12724;
        float r12726 = r12723 + r12725;
        return r12726;
}

double f_id(double d1, double d2, double d3) {
        double r12727 = d1;
        double r12728 = d2;
        double r12729 = r12727 * r12728;
        double r12730 = d3;
        double r12731 = r12727 * r12730;
        double r12732 = r12729 + r12731;
        return r12732;
}


double f_of(float d1, float d2, float d3) {
        float r12733 = d2;
        float r12734 = d3;
        float r12735 = r12733 + r12734;
        float r12736 = d1;
        float r12737 = r12735 * r12736;
        return r12737;
}

double f_od(double d1, double d2, double d3) {
        double r12738 = d2;
        double r12739 = d3;
        double r12740 = r12738 + r12739;
        double r12741 = d1;
        double r12742 = r12740 * r12741;
        return r12742;
}

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 r12743, r12744, r12745, r12746, r12747, r12748;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r12743);
        mpfr_init(r12744);
        mpfr_init(r12745);
        mpfr_init(r12746);
        mpfr_init(r12747);
        mpfr_init(r12748);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r12743, d1, MPFR_RNDN);
        mpfr_set_d(r12744, d2, MPFR_RNDN);
        mpfr_mul(r12745, r12743, r12744, MPFR_RNDN);
        mpfr_set_d(r12746, d3, MPFR_RNDN);
        mpfr_mul(r12747, r12743, r12746, MPFR_RNDN);
        mpfr_add(r12748, r12745, r12747, MPFR_RNDN);
        return mpfr_get_d(r12748, MPFR_RNDN);
}

static mpfr_t r12749, r12750, r12751, r12752, r12753;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12749);
        mpfr_init(r12750);
        mpfr_init(r12751);
        mpfr_init(r12752);
        mpfr_init(r12753);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r12749, d2, MPFR_RNDN);
        mpfr_set_d(r12750, d3, MPFR_RNDN);
        mpfr_add(r12751, r12749, r12750, MPFR_RNDN);
        mpfr_set_d(r12752, d1, MPFR_RNDN);
        mpfr_mul(r12753, r12751, r12752, MPFR_RNDN);
        return mpfr_get_d(r12753, MPFR_RNDN);
}

static mpfr_t r12754, r12755, r12756, r12757, r12758;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12754);
        mpfr_init(r12755);
        mpfr_init(r12756);
        mpfr_init(r12757);
        mpfr_init(r12758);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r12754, d2, MPFR_RNDN);
        mpfr_set_d(r12755, d3, MPFR_RNDN);
        mpfr_add(r12756, r12754, r12755, MPFR_RNDN);
        mpfr_set_d(r12757, d1, MPFR_RNDN);
        mpfr_mul(r12758, r12756, r12757, MPFR_RNDN);
        return mpfr_get_d(r12758, MPFR_RNDN);
}

