#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 r51418 = d1;
        float r51419 = d2;
        float r51420 = r51418 * r51419;
        float r51421 = d3;
        float r51422 = r51418 * r51421;
        float r51423 = r51420 + r51422;
        return r51423;
}

double f_id(double d1, double d2, double d3) {
        double r51424 = d1;
        double r51425 = d2;
        double r51426 = r51424 * r51425;
        double r51427 = d3;
        double r51428 = r51424 * r51427;
        double r51429 = r51426 + r51428;
        return r51429;
}


double f_of(float d1, float d2, float d3) {
        float r51430 = d1;
        float r51431 = d2;
        float r51432 = r51430 * r51431;
        float r51433 = d3;
        float r51434 = r51430 * r51433;
        float r51435 = r51432 + r51434;
        return r51435;
}

double f_od(double d1, double d2, double d3) {
        double r51436 = d1;
        double r51437 = d2;
        double r51438 = r51436 * r51437;
        double r51439 = d3;
        double r51440 = r51436 * r51439;
        double r51441 = r51438 + r51440;
        return r51441;
}

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 r51442, r51443, r51444, r51445, r51446, r51447;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51442);
        mpfr_init(r51443);
        mpfr_init(r51444);
        mpfr_init(r51445);
        mpfr_init(r51446);
        mpfr_init(r51447);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r51442, d1, MPFR_RNDN);
        mpfr_set_d(r51443, d2, MPFR_RNDN);
        mpfr_mul(r51444, r51442, r51443, MPFR_RNDN);
        mpfr_set_d(r51445, d3, MPFR_RNDN);
        mpfr_mul(r51446, r51442, r51445, MPFR_RNDN);
        mpfr_add(r51447, r51444, r51446, MPFR_RNDN);
        return mpfr_get_d(r51447, MPFR_RNDN);
}

static mpfr_t r51448, r51449, r51450, r51451, r51452, r51453;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51448);
        mpfr_init(r51449);
        mpfr_init(r51450);
        mpfr_init(r51451);
        mpfr_init(r51452);
        mpfr_init(r51453);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r51448, d1, MPFR_RNDN);
        mpfr_set_d(r51449, d2, MPFR_RNDN);
        mpfr_mul(r51450, r51448, r51449, MPFR_RNDN);
        mpfr_set_d(r51451, d3, MPFR_RNDN);
        mpfr_mul(r51452, r51448, r51451, MPFR_RNDN);
        mpfr_add(r51453, r51450, r51452, MPFR_RNDN);
        return mpfr_get_d(r51453, MPFR_RNDN);
}

static mpfr_t r51454, r51455, r51456, r51457, r51458, r51459;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51454);
        mpfr_init(r51455);
        mpfr_init(r51456);
        mpfr_init(r51457);
        mpfr_init(r51458);
        mpfr_init(r51459);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r51454, d1, MPFR_RNDN);
        mpfr_set_d(r51455, d2, MPFR_RNDN);
        mpfr_mul(r51456, r51454, r51455, MPFR_RNDN);
        mpfr_set_d(r51457, d3, MPFR_RNDN);
        mpfr_mul(r51458, r51454, r51457, MPFR_RNDN);
        mpfr_add(r51459, r51456, r51458, MPFR_RNDN);
        return mpfr_get_d(r51459, MPFR_RNDN);
}

