#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 r48946 = d1;
        float r48947 = d2;
        float r48948 = r48946 * r48947;
        float r48949 = d3;
        float r48950 = r48946 * r48949;
        float r48951 = r48948 + r48950;
        return r48951;
}

double f_id(double d1, double d2, double d3) {
        double r48952 = d1;
        double r48953 = d2;
        double r48954 = r48952 * r48953;
        double r48955 = d3;
        double r48956 = r48952 * r48955;
        double r48957 = r48954 + r48956;
        return r48957;
}


double f_of(float d1, float d2, float d3) {
        float r48958 = d3;
        float r48959 = d2;
        float r48960 = r48958 + r48959;
        float r48961 = d1;
        float r48962 = r48960 * r48961;
        return r48962;
}

double f_od(double d1, double d2, double d3) {
        double r48963 = d3;
        double r48964 = d2;
        double r48965 = r48963 + r48964;
        double r48966 = d1;
        double r48967 = r48965 * r48966;
        return r48967;
}

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 r48968, r48969, r48970, r48971, r48972, r48973;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r48968);
        mpfr_init(r48969);
        mpfr_init(r48970);
        mpfr_init(r48971);
        mpfr_init(r48972);
        mpfr_init(r48973);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r48968, d1, MPFR_RNDN);
        mpfr_set_d(r48969, d2, MPFR_RNDN);
        mpfr_mul(r48970, r48968, r48969, MPFR_RNDN);
        mpfr_set_d(r48971, d3, MPFR_RNDN);
        mpfr_mul(r48972, r48968, r48971, MPFR_RNDN);
        mpfr_add(r48973, r48970, r48972, MPFR_RNDN);
        return mpfr_get_d(r48973, MPFR_RNDN);
}

static mpfr_t r48974, r48975, r48976, r48977, r48978;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r48974);
        mpfr_init(r48975);
        mpfr_init(r48976);
        mpfr_init(r48977);
        mpfr_init(r48978);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r48974, d3, MPFR_RNDN);
        mpfr_set_d(r48975, d2, MPFR_RNDN);
        mpfr_add(r48976, r48974, r48975, MPFR_RNDN);
        mpfr_set_d(r48977, d1, MPFR_RNDN);
        mpfr_mul(r48978, r48976, r48977, MPFR_RNDN);
        return mpfr_get_d(r48978, MPFR_RNDN);
}

static mpfr_t r48979, r48980, r48981, r48982, r48983;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r48979);
        mpfr_init(r48980);
        mpfr_init(r48981);
        mpfr_init(r48982);
        mpfr_init(r48983);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r48979, d3, MPFR_RNDN);
        mpfr_set_d(r48980, d2, MPFR_RNDN);
        mpfr_add(r48981, r48979, r48980, MPFR_RNDN);
        mpfr_set_d(r48982, d1, MPFR_RNDN);
        mpfr_mul(r48983, r48981, r48982, MPFR_RNDN);
        return mpfr_get_d(r48983, MPFR_RNDN);
}

