#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 r27022 = d1;
        float r27023 = d2;
        float r27024 = r27022 * r27023;
        float r27025 = d3;
        float r27026 = r27022 * r27025;
        float r27027 = r27024 + r27026;
        return r27027;
}

double f_id(double d1, double d2, double d3) {
        double r27028 = d1;
        double r27029 = d2;
        double r27030 = r27028 * r27029;
        double r27031 = d3;
        double r27032 = r27028 * r27031;
        double r27033 = r27030 + r27032;
        return r27033;
}


double f_of(float d1, float d2, float d3) {
        float r27034 = d1;
        float r27035 = d3;
        float r27036 = d2;
        float r27037 = r27035 + r27036;
        float r27038 = r27034 * r27037;
        return r27038;
}

double f_od(double d1, double d2, double d3) {
        double r27039 = d1;
        double r27040 = d3;
        double r27041 = d2;
        double r27042 = r27040 + r27041;
        double r27043 = r27039 * r27042;
        return r27043;
}

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 r27044, r27045, r27046, r27047, r27048, r27049;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r27044);
        mpfr_init(r27045);
        mpfr_init(r27046);
        mpfr_init(r27047);
        mpfr_init(r27048);
        mpfr_init(r27049);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r27044, d1, MPFR_RNDN);
        mpfr_set_d(r27045, d2, MPFR_RNDN);
        mpfr_mul(r27046, r27044, r27045, MPFR_RNDN);
        mpfr_set_d(r27047, d3, MPFR_RNDN);
        mpfr_mul(r27048, r27044, r27047, MPFR_RNDN);
        mpfr_add(r27049, r27046, r27048, MPFR_RNDN);
        return mpfr_get_d(r27049, MPFR_RNDN);
}

static mpfr_t r27050, r27051, r27052, r27053, r27054;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r27050);
        mpfr_init(r27051);
        mpfr_init(r27052);
        mpfr_init(r27053);
        mpfr_init(r27054);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r27050, d1, MPFR_RNDN);
        mpfr_set_d(r27051, d3, MPFR_RNDN);
        mpfr_set_d(r27052, d2, MPFR_RNDN);
        mpfr_add(r27053, r27051, r27052, MPFR_RNDN);
        mpfr_mul(r27054, r27050, r27053, MPFR_RNDN);
        return mpfr_get_d(r27054, MPFR_RNDN);
}

static mpfr_t r27055, r27056, r27057, r27058, r27059;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r27055);
        mpfr_init(r27056);
        mpfr_init(r27057);
        mpfr_init(r27058);
        mpfr_init(r27059);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r27055, d1, MPFR_RNDN);
        mpfr_set_d(r27056, d3, MPFR_RNDN);
        mpfr_set_d(r27057, d2, MPFR_RNDN);
        mpfr_add(r27058, r27056, r27057, MPFR_RNDN);
        mpfr_mul(r27059, r27055, r27058, MPFR_RNDN);
        return mpfr_get_d(r27059, MPFR_RNDN);
}

