#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 r28680 = d1;
        float r28681 = d2;
        float r28682 = r28680 * r28681;
        float r28683 = d3;
        float r28684 = r28680 * r28683;
        float r28685 = r28682 + r28684;
        return r28685;
}

double f_id(double d1, double d2, double d3) {
        double r28686 = d1;
        double r28687 = d2;
        double r28688 = r28686 * r28687;
        double r28689 = d3;
        double r28690 = r28686 * r28689;
        double r28691 = r28688 + r28690;
        return r28691;
}


double f_of(float d1, float d2, float d3) {
        float r28692 = d1;
        float r28693 = d2;
        float r28694 = r28692 * r28693;
        float r28695 = d3;
        float r28696 = r28692 * r28695;
        float r28697 = r28694 + r28696;
        return r28697;
}

double f_od(double d1, double d2, double d3) {
        double r28698 = d1;
        double r28699 = d2;
        double r28700 = r28698 * r28699;
        double r28701 = d3;
        double r28702 = r28698 * r28701;
        double r28703 = r28700 + r28702;
        return r28703;
}

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 r28704, r28705, r28706, r28707, r28708, r28709;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r28704);
        mpfr_init(r28705);
        mpfr_init(r28706);
        mpfr_init(r28707);
        mpfr_init(r28708);
        mpfr_init(r28709);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r28704, d1, MPFR_RNDN);
        mpfr_set_d(r28705, d2, MPFR_RNDN);
        mpfr_mul(r28706, r28704, r28705, MPFR_RNDN);
        mpfr_set_d(r28707, d3, MPFR_RNDN);
        mpfr_mul(r28708, r28704, r28707, MPFR_RNDN);
        mpfr_add(r28709, r28706, r28708, MPFR_RNDN);
        return mpfr_get_d(r28709, MPFR_RNDN);
}

static mpfr_t r28710, r28711, r28712, r28713, r28714, r28715;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28710);
        mpfr_init(r28711);
        mpfr_init(r28712);
        mpfr_init(r28713);
        mpfr_init(r28714);
        mpfr_init(r28715);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r28710, d1, MPFR_RNDN);
        mpfr_set_d(r28711, d2, MPFR_RNDN);
        mpfr_mul(r28712, r28710, r28711, MPFR_RNDN);
        mpfr_set_d(r28713, d3, MPFR_RNDN);
        mpfr_mul(r28714, r28710, r28713, MPFR_RNDN);
        mpfr_add(r28715, r28712, r28714, MPFR_RNDN);
        return mpfr_get_d(r28715, MPFR_RNDN);
}

static mpfr_t r28716, r28717, r28718, r28719, r28720, r28721;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28716);
        mpfr_init(r28717);
        mpfr_init(r28718);
        mpfr_init(r28719);
        mpfr_init(r28720);
        mpfr_init(r28721);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r28716, d1, MPFR_RNDN);
        mpfr_set_d(r28717, d2, MPFR_RNDN);
        mpfr_mul(r28718, r28716, r28717, MPFR_RNDN);
        mpfr_set_d(r28719, d3, MPFR_RNDN);
        mpfr_mul(r28720, r28716, r28719, MPFR_RNDN);
        mpfr_add(r28721, r28718, r28720, MPFR_RNDN);
        return mpfr_get_d(r28721, MPFR_RNDN);
}

