#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "FastMath dist4";

double f_if(float d1, float d2, float d3, float d4) {
        float r28708 = d1;
        float r28709 = d2;
        float r28710 = r28708 * r28709;
        float r28711 = d3;
        float r28712 = r28708 * r28711;
        float r28713 = r28710 - r28712;
        float r28714 = d4;
        float r28715 = r28714 * r28708;
        float r28716 = r28713 + r28715;
        float r28717 = r28708 * r28708;
        float r28718 = r28716 - r28717;
        return r28718;
}

double f_id(double d1, double d2, double d3, double d4) {
        double r28719 = d1;
        double r28720 = d2;
        double r28721 = r28719 * r28720;
        double r28722 = d3;
        double r28723 = r28719 * r28722;
        double r28724 = r28721 - r28723;
        double r28725 = d4;
        double r28726 = r28725 * r28719;
        double r28727 = r28724 + r28726;
        double r28728 = r28719 * r28719;
        double r28729 = r28727 - r28728;
        return r28729;
}


double f_of(float d1, float d2, float d3, float d4) {
        float r28730 = d1;
        float r28731 = d2;
        float r28732 = r28730 * r28731;
        float r28733 = d3;
        float r28734 = r28730 * r28733;
        float r28735 = r28732 - r28734;
        float r28736 = d4;
        float r28737 = r28736 * r28730;
        float r28738 = r28735 + r28737;
        float r28739 = r28730 * r28730;
        float r28740 = r28738 - r28739;
        return r28740;
}

double f_od(double d1, double d2, double d3, double d4) {
        double r28741 = d1;
        double r28742 = d2;
        double r28743 = r28741 * r28742;
        double r28744 = d3;
        double r28745 = r28741 * r28744;
        double r28746 = r28743 - r28745;
        double r28747 = d4;
        double r28748 = r28747 * r28741;
        double r28749 = r28746 + r28748;
        double r28750 = r28741 * r28741;
        double r28751 = r28749 - r28750;
        return r28751;
}

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 r28752, r28753, r28754, r28755, r28756, r28757, r28758, r28759, r28760, r28761, r28762;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r28752);
        mpfr_init(r28753);
        mpfr_init(r28754);
        mpfr_init(r28755);
        mpfr_init(r28756);
        mpfr_init(r28757);
        mpfr_init(r28758);
        mpfr_init(r28759);
        mpfr_init(r28760);
        mpfr_init(r28761);
        mpfr_init(r28762);
}

double f_im(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r28752, d1, MPFR_RNDN);
        mpfr_set_d(r28753, d2, MPFR_RNDN);
        mpfr_mul(r28754, r28752, r28753, MPFR_RNDN);
        mpfr_set_d(r28755, d3, MPFR_RNDN);
        mpfr_mul(r28756, r28752, r28755, MPFR_RNDN);
        mpfr_sub(r28757, r28754, r28756, MPFR_RNDN);
        mpfr_set_d(r28758, d4, MPFR_RNDN);
        mpfr_mul(r28759, r28758, r28752, MPFR_RNDN);
        mpfr_add(r28760, r28757, r28759, MPFR_RNDN);
        mpfr_mul(r28761, r28752, r28752, MPFR_RNDN);
        mpfr_sub(r28762, r28760, r28761, MPFR_RNDN);
        return mpfr_get_d(r28762, MPFR_RNDN);
}

static mpfr_t r28763, r28764, r28765, r28766, r28767, r28768, r28769, r28770, r28771, r28772, r28773;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28763);
        mpfr_init(r28764);
        mpfr_init(r28765);
        mpfr_init(r28766);
        mpfr_init(r28767);
        mpfr_init(r28768);
        mpfr_init(r28769);
        mpfr_init(r28770);
        mpfr_init(r28771);
        mpfr_init(r28772);
        mpfr_init(r28773);
}

double f_fm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r28763, d1, MPFR_RNDN);
        mpfr_set_d(r28764, d2, MPFR_RNDN);
        mpfr_mul(r28765, r28763, r28764, MPFR_RNDN);
        mpfr_set_d(r28766, d3, MPFR_RNDN);
        mpfr_mul(r28767, r28763, r28766, MPFR_RNDN);
        mpfr_sub(r28768, r28765, r28767, MPFR_RNDN);
        mpfr_set_d(r28769, d4, MPFR_RNDN);
        mpfr_mul(r28770, r28769, r28763, MPFR_RNDN);
        mpfr_add(r28771, r28768, r28770, MPFR_RNDN);
        mpfr_mul(r28772, r28763, r28763, MPFR_RNDN);
        mpfr_sub(r28773, r28771, r28772, MPFR_RNDN);
        return mpfr_get_d(r28773, MPFR_RNDN);
}

static mpfr_t r28774, r28775, r28776, r28777, r28778, r28779, r28780, r28781, r28782, r28783, r28784;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28774);
        mpfr_init(r28775);
        mpfr_init(r28776);
        mpfr_init(r28777);
        mpfr_init(r28778);
        mpfr_init(r28779);
        mpfr_init(r28780);
        mpfr_init(r28781);
        mpfr_init(r28782);
        mpfr_init(r28783);
        mpfr_init(r28784);
}

double f_dm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r28774, d1, MPFR_RNDN);
        mpfr_set_d(r28775, d2, MPFR_RNDN);
        mpfr_mul(r28776, r28774, r28775, MPFR_RNDN);
        mpfr_set_d(r28777, d3, MPFR_RNDN);
        mpfr_mul(r28778, r28774, r28777, MPFR_RNDN);
        mpfr_sub(r28779, r28776, r28778, MPFR_RNDN);
        mpfr_set_d(r28780, d4, MPFR_RNDN);
        mpfr_mul(r28781, r28780, r28774, MPFR_RNDN);
        mpfr_add(r28782, r28779, r28781, MPFR_RNDN);
        mpfr_mul(r28783, r28774, r28774, MPFR_RNDN);
        mpfr_sub(r28784, r28782, r28783, MPFR_RNDN);
        return mpfr_get_d(r28784, MPFR_RNDN);
}

