#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 r28494 = d1;
        float r28495 = d2;
        float r28496 = r28494 * r28495;
        float r28497 = d3;
        float r28498 = r28494 * r28497;
        float r28499 = r28496 - r28498;
        float r28500 = d4;
        float r28501 = r28500 * r28494;
        float r28502 = r28499 + r28501;
        float r28503 = r28494 * r28494;
        float r28504 = r28502 - r28503;
        return r28504;
}

double f_id(double d1, double d2, double d3, double d4) {
        double r28505 = d1;
        double r28506 = d2;
        double r28507 = r28505 * r28506;
        double r28508 = d3;
        double r28509 = r28505 * r28508;
        double r28510 = r28507 - r28509;
        double r28511 = d4;
        double r28512 = r28511 * r28505;
        double r28513 = r28510 + r28512;
        double r28514 = r28505 * r28505;
        double r28515 = r28513 - r28514;
        return r28515;
}


double f_of(float d1, float d2, float d3, float d4) {
        float r28516 = d4;
        float r28517 = d3;
        float r28518 = r28516 - r28517;
        float r28519 = d2;
        float r28520 = d1;
        float r28521 = r28519 - r28520;
        float r28522 = r28518 + r28521;
        float r28523 = r28522 * r28520;
        return r28523;
}

double f_od(double d1, double d2, double d3, double d4) {
        double r28524 = d4;
        double r28525 = d3;
        double r28526 = r28524 - r28525;
        double r28527 = d2;
        double r28528 = d1;
        double r28529 = r28527 - r28528;
        double r28530 = r28526 + r28529;
        double r28531 = r28530 * r28528;
        return r28531;
}

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 r28532, r28533, r28534, r28535, r28536, r28537, r28538, r28539, r28540, r28541, r28542;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r28532);
        mpfr_init(r28533);
        mpfr_init(r28534);
        mpfr_init(r28535);
        mpfr_init(r28536);
        mpfr_init(r28537);
        mpfr_init(r28538);
        mpfr_init(r28539);
        mpfr_init(r28540);
        mpfr_init(r28541);
        mpfr_init(r28542);
}

double f_im(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r28532, d1, MPFR_RNDN);
        mpfr_set_d(r28533, d2, MPFR_RNDN);
        mpfr_mul(r28534, r28532, r28533, MPFR_RNDN);
        mpfr_set_d(r28535, d3, MPFR_RNDN);
        mpfr_mul(r28536, r28532, r28535, MPFR_RNDN);
        mpfr_sub(r28537, r28534, r28536, MPFR_RNDN);
        mpfr_set_d(r28538, d4, MPFR_RNDN);
        mpfr_mul(r28539, r28538, r28532, MPFR_RNDN);
        mpfr_add(r28540, r28537, r28539, MPFR_RNDN);
        mpfr_mul(r28541, r28532, r28532, MPFR_RNDN);
        mpfr_sub(r28542, r28540, r28541, MPFR_RNDN);
        return mpfr_get_d(r28542, MPFR_RNDN);
}

static mpfr_t r28543, r28544, r28545, r28546, r28547, r28548, r28549, r28550;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r28543);
        mpfr_init(r28544);
        mpfr_init(r28545);
        mpfr_init(r28546);
        mpfr_init(r28547);
        mpfr_init(r28548);
        mpfr_init(r28549);
        mpfr_init(r28550);
}

double f_fm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r28543, d4, MPFR_RNDN);
        mpfr_set_d(r28544, d3, MPFR_RNDN);
        mpfr_sub(r28545, r28543, r28544, MPFR_RNDN);
        mpfr_set_d(r28546, d2, MPFR_RNDN);
        mpfr_set_d(r28547, d1, MPFR_RNDN);
        mpfr_sub(r28548, r28546, r28547, MPFR_RNDN);
        mpfr_add(r28549, r28545, r28548, MPFR_RNDN);
        mpfr_mul(r28550, r28549, r28547, MPFR_RNDN);
        return mpfr_get_d(r28550, MPFR_RNDN);
}

static mpfr_t r28551, r28552, r28553, r28554, r28555, r28556, r28557, r28558;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r28551);
        mpfr_init(r28552);
        mpfr_init(r28553);
        mpfr_init(r28554);
        mpfr_init(r28555);
        mpfr_init(r28556);
        mpfr_init(r28557);
        mpfr_init(r28558);
}

double f_dm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r28551, d4, MPFR_RNDN);
        mpfr_set_d(r28552, d3, MPFR_RNDN);
        mpfr_sub(r28553, r28551, r28552, MPFR_RNDN);
        mpfr_set_d(r28554, d2, MPFR_RNDN);
        mpfr_set_d(r28555, d1, MPFR_RNDN);
        mpfr_sub(r28556, r28554, r28555, MPFR_RNDN);
        mpfr_add(r28557, r28553, r28556, MPFR_RNDN);
        mpfr_mul(r28558, r28557, r28555, MPFR_RNDN);
        return mpfr_get_d(r28558, MPFR_RNDN);
}

