#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 r12694 = d1;
        float r12695 = d2;
        float r12696 = r12694 * r12695;
        float r12697 = d3;
        float r12698 = r12694 * r12697;
        float r12699 = r12696 - r12698;
        float r12700 = d4;
        float r12701 = r12700 * r12694;
        float r12702 = r12699 + r12701;
        float r12703 = r12694 * r12694;
        float r12704 = r12702 - r12703;
        return r12704;
}

double f_id(double d1, double d2, double d3, double d4) {
        double r12705 = d1;
        double r12706 = d2;
        double r12707 = r12705 * r12706;
        double r12708 = d3;
        double r12709 = r12705 * r12708;
        double r12710 = r12707 - r12709;
        double r12711 = d4;
        double r12712 = r12711 * r12705;
        double r12713 = r12710 + r12712;
        double r12714 = r12705 * r12705;
        double r12715 = r12713 - r12714;
        return r12715;
}


double f_of(float d1, float d2, float d3, float d4) {
        float r12716 = d1;
        float r12717 = d2;
        float r12718 = r12716 * r12717;
        float r12719 = d3;
        float r12720 = r12719 * r12716;
        float r12721 = r12718 - r12720;
        float r12722 = d4;
        float r12723 = r12716 * r12722;
        float r12724 = r12721 + r12723;
        float r12725 = r12716 * r12716;
        float r12726 = r12724 - r12725;
        return r12726;
}

double f_od(double d1, double d2, double d3, double d4) {
        double r12727 = d1;
        double r12728 = d2;
        double r12729 = r12727 * r12728;
        double r12730 = d3;
        double r12731 = r12730 * r12727;
        double r12732 = r12729 - r12731;
        double r12733 = d4;
        double r12734 = r12727 * r12733;
        double r12735 = r12732 + r12734;
        double r12736 = r12727 * r12727;
        double r12737 = r12735 - r12736;
        return r12737;
}

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 r12738, r12739, r12740, r12741, r12742, r12743, r12744, r12745, r12746, r12747, r12748;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r12738);
        mpfr_init(r12739);
        mpfr_init(r12740);
        mpfr_init(r12741);
        mpfr_init(r12742);
        mpfr_init(r12743);
        mpfr_init(r12744);
        mpfr_init(r12745);
        mpfr_init(r12746);
        mpfr_init(r12747);
        mpfr_init(r12748);
}

double f_im(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r12738, d1, MPFR_RNDN);
        mpfr_set_d(r12739, d2, MPFR_RNDN);
        mpfr_mul(r12740, r12738, r12739, MPFR_RNDN);
        mpfr_set_d(r12741, d3, MPFR_RNDN);
        mpfr_mul(r12742, r12738, r12741, MPFR_RNDN);
        mpfr_sub(r12743, r12740, r12742, MPFR_RNDN);
        mpfr_set_d(r12744, d4, MPFR_RNDN);
        mpfr_mul(r12745, r12744, r12738, MPFR_RNDN);
        mpfr_add(r12746, r12743, r12745, MPFR_RNDN);
        mpfr_mul(r12747, r12738, r12738, MPFR_RNDN);
        mpfr_sub(r12748, r12746, r12747, MPFR_RNDN);
        return mpfr_get_d(r12748, MPFR_RNDN);
}

static mpfr_t r12749, r12750, r12751, r12752, r12753, r12754, r12755, r12756, r12757, r12758, r12759;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12749);
        mpfr_init(r12750);
        mpfr_init(r12751);
        mpfr_init(r12752);
        mpfr_init(r12753);
        mpfr_init(r12754);
        mpfr_init(r12755);
        mpfr_init(r12756);
        mpfr_init(r12757);
        mpfr_init(r12758);
        mpfr_init(r12759);
}

double f_fm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r12749, d1, MPFR_RNDN);
        mpfr_set_d(r12750, d2, MPFR_RNDN);
        mpfr_mul(r12751, r12749, r12750, MPFR_RNDN);
        mpfr_set_d(r12752, d3, MPFR_RNDN);
        mpfr_mul(r12753, r12752, r12749, MPFR_RNDN);
        mpfr_sub(r12754, r12751, r12753, MPFR_RNDN);
        mpfr_set_d(r12755, d4, MPFR_RNDN);
        mpfr_mul(r12756, r12749, r12755, MPFR_RNDN);
        mpfr_add(r12757, r12754, r12756, MPFR_RNDN);
        mpfr_mul(r12758, r12749, r12749, MPFR_RNDN);
        mpfr_sub(r12759, r12757, r12758, MPFR_RNDN);
        return mpfr_get_d(r12759, MPFR_RNDN);
}

static mpfr_t r12760, r12761, r12762, r12763, r12764, r12765, r12766, r12767, r12768, r12769, r12770;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12760);
        mpfr_init(r12761);
        mpfr_init(r12762);
        mpfr_init(r12763);
        mpfr_init(r12764);
        mpfr_init(r12765);
        mpfr_init(r12766);
        mpfr_init(r12767);
        mpfr_init(r12768);
        mpfr_init(r12769);
        mpfr_init(r12770);
}

double f_dm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r12760, d1, MPFR_RNDN);
        mpfr_set_d(r12761, d2, MPFR_RNDN);
        mpfr_mul(r12762, r12760, r12761, MPFR_RNDN);
        mpfr_set_d(r12763, d3, MPFR_RNDN);
        mpfr_mul(r12764, r12763, r12760, MPFR_RNDN);
        mpfr_sub(r12765, r12762, r12764, MPFR_RNDN);
        mpfr_set_d(r12766, d4, MPFR_RNDN);
        mpfr_mul(r12767, r12760, r12766, MPFR_RNDN);
        mpfr_add(r12768, r12765, r12767, MPFR_RNDN);
        mpfr_mul(r12769, r12760, r12760, MPFR_RNDN);
        mpfr_sub(r12770, r12768, r12769, MPFR_RNDN);
        return mpfr_get_d(r12770, MPFR_RNDN);
}

