#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 r28546 = d1;
        float r28547 = d2;
        float r28548 = r28546 * r28547;
        float r28549 = d3;
        float r28550 = r28546 * r28549;
        float r28551 = r28548 - r28550;
        float r28552 = d4;
        float r28553 = r28552 * r28546;
        float r28554 = r28551 + r28553;
        float r28555 = r28546 * r28546;
        float r28556 = r28554 - r28555;
        return r28556;
}

double f_id(double d1, double d2, double d3, double d4) {
        double r28557 = d1;
        double r28558 = d2;
        double r28559 = r28557 * r28558;
        double r28560 = d3;
        double r28561 = r28557 * r28560;
        double r28562 = r28559 - r28561;
        double r28563 = d4;
        double r28564 = r28563 * r28557;
        double r28565 = r28562 + r28564;
        double r28566 = r28557 * r28557;
        double r28567 = r28565 - r28566;
        return r28567;
}


double f_of(float d1, float d2, float d3, float d4) {
        float r28568 = d1;
        float r28569 = d4;
        float r28570 = r28569 - r28568;
        float r28571 = d2;
        float r28572 = d3;
        float r28573 = r28571 - r28572;
        float r28574 = r28570 + r28573;
        float r28575 = r28568 * r28574;
        return r28575;
}

double f_od(double d1, double d2, double d3, double d4) {
        double r28576 = d1;
        double r28577 = d4;
        double r28578 = r28577 - r28576;
        double r28579 = d2;
        double r28580 = d3;
        double r28581 = r28579 - r28580;
        double r28582 = r28578 + r28581;
        double r28583 = r28576 * r28582;
        return r28583;
}

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 r28584, r28585, r28586, r28587, r28588, r28589, r28590, r28591, r28592, r28593, r28594;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r28584);
        mpfr_init(r28585);
        mpfr_init(r28586);
        mpfr_init(r28587);
        mpfr_init(r28588);
        mpfr_init(r28589);
        mpfr_init(r28590);
        mpfr_init(r28591);
        mpfr_init(r28592);
        mpfr_init(r28593);
        mpfr_init(r28594);
}

double f_im(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r28584, d1, MPFR_RNDN);
        mpfr_set_d(r28585, d2, MPFR_RNDN);
        mpfr_mul(r28586, r28584, r28585, MPFR_RNDN);
        mpfr_set_d(r28587, d3, MPFR_RNDN);
        mpfr_mul(r28588, r28584, r28587, MPFR_RNDN);
        mpfr_sub(r28589, r28586, r28588, MPFR_RNDN);
        mpfr_set_d(r28590, d4, MPFR_RNDN);
        mpfr_mul(r28591, r28590, r28584, MPFR_RNDN);
        mpfr_add(r28592, r28589, r28591, MPFR_RNDN);
        mpfr_mul(r28593, r28584, r28584, MPFR_RNDN);
        mpfr_sub(r28594, r28592, r28593, MPFR_RNDN);
        return mpfr_get_d(r28594, MPFR_RNDN);
}

static mpfr_t r28595, r28596, r28597, r28598, r28599, r28600, r28601, r28602;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28595);
        mpfr_init(r28596);
        mpfr_init(r28597);
        mpfr_init(r28598);
        mpfr_init(r28599);
        mpfr_init(r28600);
        mpfr_init(r28601);
        mpfr_init(r28602);
}

double f_fm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r28595, d1, MPFR_RNDN);
        mpfr_set_d(r28596, d4, MPFR_RNDN);
        mpfr_sub(r28597, r28596, r28595, MPFR_RNDN);
        mpfr_set_d(r28598, d2, MPFR_RNDN);
        mpfr_set_d(r28599, d3, MPFR_RNDN);
        mpfr_sub(r28600, r28598, r28599, MPFR_RNDN);
        mpfr_add(r28601, r28597, r28600, MPFR_RNDN);
        mpfr_mul(r28602, r28595, r28601, MPFR_RNDN);
        return mpfr_get_d(r28602, MPFR_RNDN);
}

static mpfr_t r28603, r28604, r28605, r28606, r28607, r28608, r28609, r28610;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28603);
        mpfr_init(r28604);
        mpfr_init(r28605);
        mpfr_init(r28606);
        mpfr_init(r28607);
        mpfr_init(r28608);
        mpfr_init(r28609);
        mpfr_init(r28610);
}

double f_dm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r28603, d1, MPFR_RNDN);
        mpfr_set_d(r28604, d4, MPFR_RNDN);
        mpfr_sub(r28605, r28604, r28603, MPFR_RNDN);
        mpfr_set_d(r28606, d2, MPFR_RNDN);
        mpfr_set_d(r28607, d3, MPFR_RNDN);
        mpfr_sub(r28608, r28606, r28607, MPFR_RNDN);
        mpfr_add(r28609, r28605, r28608, MPFR_RNDN);
        mpfr_mul(r28610, r28603, r28609, MPFR_RNDN);
        return mpfr_get_d(r28610, MPFR_RNDN);
}

