#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 r27036 = d1;
        float r27037 = d2;
        float r27038 = r27036 * r27037;
        float r27039 = d3;
        float r27040 = r27036 * r27039;
        float r27041 = r27038 + r27040;
        return r27041;
}

double f_id(double d1, double d2, double d3) {
        double r27042 = d1;
        double r27043 = d2;
        double r27044 = r27042 * r27043;
        double r27045 = d3;
        double r27046 = r27042 * r27045;
        double r27047 = r27044 + r27046;
        return r27047;
}


double f_of(float d1, float d2, float d3) {
        float r27048 = d1;
        float r27049 = d2;
        float r27050 = r27048 * r27049;
        float r27051 = d3;
        float r27052 = r27048 * r27051;
        float r27053 = r27050 + r27052;
        return r27053;
}

double f_od(double d1, double d2, double d3) {
        double r27054 = d1;
        double r27055 = d2;
        double r27056 = r27054 * r27055;
        double r27057 = d3;
        double r27058 = r27054 * r27057;
        double r27059 = r27056 + r27058;
        return r27059;
}

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 r27060, r27061, r27062, r27063, r27064, r27065;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r27060);
        mpfr_init(r27061);
        mpfr_init(r27062);
        mpfr_init(r27063);
        mpfr_init(r27064);
        mpfr_init(r27065);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r27060, d1, MPFR_RNDN);
        mpfr_set_d(r27061, d2, MPFR_RNDN);
        mpfr_mul(r27062, r27060, r27061, MPFR_RNDN);
        mpfr_set_d(r27063, d3, MPFR_RNDN);
        mpfr_mul(r27064, r27060, r27063, MPFR_RNDN);
        mpfr_add(r27065, r27062, r27064, MPFR_RNDN);
        return mpfr_get_d(r27065, MPFR_RNDN);
}

static mpfr_t r27066, r27067, r27068, r27069, r27070, r27071;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27066);
        mpfr_init(r27067);
        mpfr_init(r27068);
        mpfr_init(r27069);
        mpfr_init(r27070);
        mpfr_init(r27071);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r27066, d1, MPFR_RNDN);
        mpfr_set_d(r27067, d2, MPFR_RNDN);
        mpfr_mul(r27068, r27066, r27067, MPFR_RNDN);
        mpfr_set_d(r27069, d3, MPFR_RNDN);
        mpfr_mul(r27070, r27066, r27069, MPFR_RNDN);
        mpfr_add(r27071, r27068, r27070, MPFR_RNDN);
        return mpfr_get_d(r27071, MPFR_RNDN);
}

static mpfr_t r27072, r27073, r27074, r27075, r27076, r27077;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27072);
        mpfr_init(r27073);
        mpfr_init(r27074);
        mpfr_init(r27075);
        mpfr_init(r27076);
        mpfr_init(r27077);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r27072, d1, MPFR_RNDN);
        mpfr_set_d(r27073, d2, MPFR_RNDN);
        mpfr_mul(r27074, r27072, r27073, MPFR_RNDN);
        mpfr_set_d(r27075, d3, MPFR_RNDN);
        mpfr_mul(r27076, r27072, r27075, MPFR_RNDN);
        mpfr_add(r27077, r27074, r27076, MPFR_RNDN);
        return mpfr_get_d(r27077, MPFR_RNDN);
}

