#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 r11982 = d1;
        float r11983 = d2;
        float r11984 = r11982 * r11983;
        float r11985 = d3;
        float r11986 = r11982 * r11985;
        float r11987 = r11984 + r11986;
        return r11987;
}

double f_id(double d1, double d2, double d3) {
        double r11988 = d1;
        double r11989 = d2;
        double r11990 = r11988 * r11989;
        double r11991 = d3;
        double r11992 = r11988 * r11991;
        double r11993 = r11990 + r11992;
        return r11993;
}


double f_of(float d1, float d2, float d3) {
        float r11994 = d2;
        float r11995 = d3;
        float r11996 = r11994 + r11995;
        float r11997 = d1;
        float r11998 = r11996 * r11997;
        return r11998;
}

double f_od(double d1, double d2, double d3) {
        double r11999 = d2;
        double r12000 = d3;
        double r12001 = r11999 + r12000;
        double r12002 = d1;
        double r12003 = r12001 * r12002;
        return r12003;
}

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 r12004, r12005, r12006, r12007, r12008, r12009;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r12004);
        mpfr_init(r12005);
        mpfr_init(r12006);
        mpfr_init(r12007);
        mpfr_init(r12008);
        mpfr_init(r12009);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r12004, d1, MPFR_RNDN);
        mpfr_set_d(r12005, d2, MPFR_RNDN);
        mpfr_mul(r12006, r12004, r12005, MPFR_RNDN);
        mpfr_set_d(r12007, d3, MPFR_RNDN);
        mpfr_mul(r12008, r12004, r12007, MPFR_RNDN);
        mpfr_add(r12009, r12006, r12008, MPFR_RNDN);
        return mpfr_get_d(r12009, MPFR_RNDN);
}

static mpfr_t r12010, r12011, r12012, r12013, r12014;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12010);
        mpfr_init(r12011);
        mpfr_init(r12012);
        mpfr_init(r12013);
        mpfr_init(r12014);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r12010, d2, MPFR_RNDN);
        mpfr_set_d(r12011, d3, MPFR_RNDN);
        mpfr_add(r12012, r12010, r12011, MPFR_RNDN);
        mpfr_set_d(r12013, d1, MPFR_RNDN);
        mpfr_mul(r12014, r12012, r12013, MPFR_RNDN);
        return mpfr_get_d(r12014, MPFR_RNDN);
}

static mpfr_t r12015, r12016, r12017, r12018, r12019;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12015);
        mpfr_init(r12016);
        mpfr_init(r12017);
        mpfr_init(r12018);
        mpfr_init(r12019);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r12015, d2, MPFR_RNDN);
        mpfr_set_d(r12016, d3, MPFR_RNDN);
        mpfr_add(r12017, r12015, r12016, MPFR_RNDN);
        mpfr_set_d(r12018, d1, MPFR_RNDN);
        mpfr_mul(r12019, r12017, r12018, MPFR_RNDN);
        return mpfr_get_d(r12019, MPFR_RNDN);
}

