#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 r12802 = d1;
        float r12803 = d2;
        float r12804 = r12802 * r12803;
        float r12805 = d3;
        float r12806 = r12802 * r12805;
        float r12807 = r12804 + r12806;
        return r12807;
}

double f_id(double d1, double d2, double d3) {
        double r12808 = d1;
        double r12809 = d2;
        double r12810 = r12808 * r12809;
        double r12811 = d3;
        double r12812 = r12808 * r12811;
        double r12813 = r12810 + r12812;
        return r12813;
}


double f_of(float d1, float d2, float d3) {
        float r12814 = d2;
        float r12815 = d3;
        float r12816 = r12814 + r12815;
        float r12817 = d1;
        float r12818 = r12816 * r12817;
        return r12818;
}

double f_od(double d1, double d2, double d3) {
        double r12819 = d2;
        double r12820 = d3;
        double r12821 = r12819 + r12820;
        double r12822 = d1;
        double r12823 = r12821 * r12822;
        return r12823;
}

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 r12824, r12825, r12826, r12827, r12828, r12829;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r12824);
        mpfr_init(r12825);
        mpfr_init(r12826);
        mpfr_init(r12827);
        mpfr_init(r12828);
        mpfr_init(r12829);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r12824, d1, MPFR_RNDN);
        mpfr_set_d(r12825, d2, MPFR_RNDN);
        mpfr_mul(r12826, r12824, r12825, MPFR_RNDN);
        mpfr_set_d(r12827, d3, MPFR_RNDN);
        mpfr_mul(r12828, r12824, r12827, MPFR_RNDN);
        mpfr_add(r12829, r12826, r12828, MPFR_RNDN);
        return mpfr_get_d(r12829, MPFR_RNDN);
}

static mpfr_t r12830, r12831, r12832, r12833, r12834;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12830);
        mpfr_init(r12831);
        mpfr_init(r12832);
        mpfr_init(r12833);
        mpfr_init(r12834);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r12830, d2, MPFR_RNDN);
        mpfr_set_d(r12831, d3, MPFR_RNDN);
        mpfr_add(r12832, r12830, r12831, MPFR_RNDN);
        mpfr_set_d(r12833, d1, MPFR_RNDN);
        mpfr_mul(r12834, r12832, r12833, MPFR_RNDN);
        return mpfr_get_d(r12834, MPFR_RNDN);
}

static mpfr_t r12835, r12836, r12837, r12838, r12839;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12835);
        mpfr_init(r12836);
        mpfr_init(r12837);
        mpfr_init(r12838);
        mpfr_init(r12839);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r12835, d2, MPFR_RNDN);
        mpfr_set_d(r12836, d3, MPFR_RNDN);
        mpfr_add(r12837, r12835, r12836, MPFR_RNDN);
        mpfr_set_d(r12838, d1, MPFR_RNDN);
        mpfr_mul(r12839, r12837, r12838, MPFR_RNDN);
        return mpfr_get_d(r12839, MPFR_RNDN);
}

