#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 r51456 = d1;
        float r51457 = d2;
        float r51458 = r51456 * r51457;
        float r51459 = d3;
        float r51460 = r51456 * r51459;
        float r51461 = r51458 + r51460;
        return r51461;
}

double f_id(double d1, double d2, double d3) {
        double r51462 = d1;
        double r51463 = d2;
        double r51464 = r51462 * r51463;
        double r51465 = d3;
        double r51466 = r51462 * r51465;
        double r51467 = r51464 + r51466;
        return r51467;
}


double f_of(float d1, float d2, float d3) {
        float r51468 = d1;
        float r51469 = d2;
        float r51470 = r51468 * r51469;
        float r51471 = d3;
        float r51472 = r51468 * r51471;
        float r51473 = r51470 + r51472;
        return r51473;
}

double f_od(double d1, double d2, double d3) {
        double r51474 = d1;
        double r51475 = d2;
        double r51476 = r51474 * r51475;
        double r51477 = d3;
        double r51478 = r51474 * r51477;
        double r51479 = r51476 + r51478;
        return r51479;
}

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 r51480, r51481, r51482, r51483, r51484, r51485;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51480);
        mpfr_init(r51481);
        mpfr_init(r51482);
        mpfr_init(r51483);
        mpfr_init(r51484);
        mpfr_init(r51485);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r51480, d1, MPFR_RNDN);
        mpfr_set_d(r51481, d2, MPFR_RNDN);
        mpfr_mul(r51482, r51480, r51481, MPFR_RNDN);
        mpfr_set_d(r51483, d3, MPFR_RNDN);
        mpfr_mul(r51484, r51480, r51483, MPFR_RNDN);
        mpfr_add(r51485, r51482, r51484, MPFR_RNDN);
        return mpfr_get_d(r51485, MPFR_RNDN);
}

static mpfr_t r51486, r51487, r51488, r51489, r51490, r51491;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51486);
        mpfr_init(r51487);
        mpfr_init(r51488);
        mpfr_init(r51489);
        mpfr_init(r51490);
        mpfr_init(r51491);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r51486, d1, MPFR_RNDN);
        mpfr_set_d(r51487, d2, MPFR_RNDN);
        mpfr_mul(r51488, r51486, r51487, MPFR_RNDN);
        mpfr_set_d(r51489, d3, MPFR_RNDN);
        mpfr_mul(r51490, r51486, r51489, MPFR_RNDN);
        mpfr_add(r51491, r51488, r51490, MPFR_RNDN);
        return mpfr_get_d(r51491, MPFR_RNDN);
}

static mpfr_t r51492, r51493, r51494, r51495, r51496, r51497;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51492);
        mpfr_init(r51493);
        mpfr_init(r51494);
        mpfr_init(r51495);
        mpfr_init(r51496);
        mpfr_init(r51497);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r51492, d1, MPFR_RNDN);
        mpfr_set_d(r51493, d2, MPFR_RNDN);
        mpfr_mul(r51494, r51492, r51493, MPFR_RNDN);
        mpfr_set_d(r51495, d3, MPFR_RNDN);
        mpfr_mul(r51496, r51492, r51495, MPFR_RNDN);
        mpfr_add(r51497, r51494, r51496, MPFR_RNDN);
        return mpfr_get_d(r51497, MPFR_RNDN);
}

