#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 r28485 = d1;
        float r28486 = d2;
        float r28487 = r28485 * r28486;
        float r28488 = d3;
        float r28489 = r28485 * r28488;
        float r28490 = r28487 + r28489;
        return r28490;
}

double f_id(double d1, double d2, double d3) {
        double r28491 = d1;
        double r28492 = d2;
        double r28493 = r28491 * r28492;
        double r28494 = d3;
        double r28495 = r28491 * r28494;
        double r28496 = r28493 + r28495;
        return r28496;
}


double f_of(float d1, float d2, float d3) {
        float r28497 = d1;
        float r28498 = d2;
        float r28499 = r28497 * r28498;
        float r28500 = d3;
        float r28501 = r28497 * r28500;
        float r28502 = r28499 + r28501;
        return r28502;
}

double f_od(double d1, double d2, double d3) {
        double r28503 = d1;
        double r28504 = d2;
        double r28505 = r28503 * r28504;
        double r28506 = d3;
        double r28507 = r28503 * r28506;
        double r28508 = r28505 + r28507;
        return r28508;
}

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 r28509, r28510, r28511, r28512, r28513, r28514;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r28509);
        mpfr_init(r28510);
        mpfr_init(r28511);
        mpfr_init(r28512);
        mpfr_init(r28513);
        mpfr_init(r28514);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r28509, d1, MPFR_RNDN);
        mpfr_set_d(r28510, d2, MPFR_RNDN);
        mpfr_mul(r28511, r28509, r28510, MPFR_RNDN);
        mpfr_set_d(r28512, d3, MPFR_RNDN);
        mpfr_mul(r28513, r28509, r28512, MPFR_RNDN);
        mpfr_add(r28514, r28511, r28513, MPFR_RNDN);
        return mpfr_get_d(r28514, MPFR_RNDN);
}

static mpfr_t r28515, r28516, r28517, r28518, r28519, r28520;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28515);
        mpfr_init(r28516);
        mpfr_init(r28517);
        mpfr_init(r28518);
        mpfr_init(r28519);
        mpfr_init(r28520);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r28515, d1, MPFR_RNDN);
        mpfr_set_d(r28516, d2, MPFR_RNDN);
        mpfr_mul(r28517, r28515, r28516, MPFR_RNDN);
        mpfr_set_d(r28518, d3, MPFR_RNDN);
        mpfr_mul(r28519, r28515, r28518, MPFR_RNDN);
        mpfr_add(r28520, r28517, r28519, MPFR_RNDN);
        return mpfr_get_d(r28520, MPFR_RNDN);
}

static mpfr_t r28521, r28522, r28523, r28524, r28525, r28526;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28521);
        mpfr_init(r28522);
        mpfr_init(r28523);
        mpfr_init(r28524);
        mpfr_init(r28525);
        mpfr_init(r28526);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r28521, d1, MPFR_RNDN);
        mpfr_set_d(r28522, d2, MPFR_RNDN);
        mpfr_mul(r28523, r28521, r28522, MPFR_RNDN);
        mpfr_set_d(r28524, d3, MPFR_RNDN);
        mpfr_mul(r28525, r28521, r28524, MPFR_RNDN);
        mpfr_add(r28526, r28523, r28525, MPFR_RNDN);
        return mpfr_get_d(r28526, MPFR_RNDN);
}

