#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 r51496 = d1;
        float r51497 = d2;
        float r51498 = r51496 * r51497;
        float r51499 = d3;
        float r51500 = r51496 * r51499;
        float r51501 = r51498 - r51500;
        float r51502 = d4;
        float r51503 = r51502 * r51496;
        float r51504 = r51501 + r51503;
        float r51505 = r51496 * r51496;
        float r51506 = r51504 - r51505;
        return r51506;
}

double f_id(double d1, double d2, double d3, double d4) {
        double r51507 = d1;
        double r51508 = d2;
        double r51509 = r51507 * r51508;
        double r51510 = d3;
        double r51511 = r51507 * r51510;
        double r51512 = r51509 - r51511;
        double r51513 = d4;
        double r51514 = r51513 * r51507;
        double r51515 = r51512 + r51514;
        double r51516 = r51507 * r51507;
        double r51517 = r51515 - r51516;
        return r51517;
}


double f_of(float d1, float d2, float d3, float d4) {
        float r51518 = d1;
        float r51519 = d2;
        float r51520 = r51518 * r51519;
        float r51521 = d3;
        float r51522 = r51518 * r51521;
        float r51523 = r51520 - r51522;
        float r51524 = d4;
        float r51525 = r51524 * r51518;
        float r51526 = r51523 + r51525;
        float r51527 = r51518 * r51518;
        float r51528 = r51526 - r51527;
        return r51528;
}

double f_od(double d1, double d2, double d3, double d4) {
        double r51529 = d1;
        double r51530 = d2;
        double r51531 = r51529 * r51530;
        double r51532 = d3;
        double r51533 = r51529 * r51532;
        double r51534 = r51531 - r51533;
        double r51535 = d4;
        double r51536 = r51535 * r51529;
        double r51537 = r51534 + r51536;
        double r51538 = r51529 * r51529;
        double r51539 = r51537 - r51538;
        return r51539;
}

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 r51540, r51541, r51542, r51543, r51544, r51545, r51546, r51547, r51548, r51549, r51550;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51540);
        mpfr_init(r51541);
        mpfr_init(r51542);
        mpfr_init(r51543);
        mpfr_init(r51544);
        mpfr_init(r51545);
        mpfr_init(r51546);
        mpfr_init(r51547);
        mpfr_init(r51548);
        mpfr_init(r51549);
        mpfr_init(r51550);
}

double f_im(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r51540, d1, MPFR_RNDN);
        mpfr_set_d(r51541, d2, MPFR_RNDN);
        mpfr_mul(r51542, r51540, r51541, MPFR_RNDN);
        mpfr_set_d(r51543, d3, MPFR_RNDN);
        mpfr_mul(r51544, r51540, r51543, MPFR_RNDN);
        mpfr_sub(r51545, r51542, r51544, MPFR_RNDN);
        mpfr_set_d(r51546, d4, MPFR_RNDN);
        mpfr_mul(r51547, r51546, r51540, MPFR_RNDN);
        mpfr_add(r51548, r51545, r51547, MPFR_RNDN);
        mpfr_mul(r51549, r51540, r51540, MPFR_RNDN);
        mpfr_sub(r51550, r51548, r51549, MPFR_RNDN);
        return mpfr_get_d(r51550, MPFR_RNDN);
}

static mpfr_t r51551, r51552, r51553, r51554, r51555, r51556, r51557, r51558, r51559, r51560, r51561;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51551);
        mpfr_init(r51552);
        mpfr_init(r51553);
        mpfr_init(r51554);
        mpfr_init(r51555);
        mpfr_init(r51556);
        mpfr_init(r51557);
        mpfr_init(r51558);
        mpfr_init(r51559);
        mpfr_init(r51560);
        mpfr_init(r51561);
}

double f_fm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r51551, d1, MPFR_RNDN);
        mpfr_set_d(r51552, d2, MPFR_RNDN);
        mpfr_mul(r51553, r51551, r51552, MPFR_RNDN);
        mpfr_set_d(r51554, d3, MPFR_RNDN);
        mpfr_mul(r51555, r51551, r51554, MPFR_RNDN);
        mpfr_sub(r51556, r51553, r51555, MPFR_RNDN);
        mpfr_set_d(r51557, d4, MPFR_RNDN);
        mpfr_mul(r51558, r51557, r51551, MPFR_RNDN);
        mpfr_add(r51559, r51556, r51558, MPFR_RNDN);
        mpfr_mul(r51560, r51551, r51551, MPFR_RNDN);
        mpfr_sub(r51561, r51559, r51560, MPFR_RNDN);
        return mpfr_get_d(r51561, MPFR_RNDN);
}

static mpfr_t r51562, r51563, r51564, r51565, r51566, r51567, r51568, r51569, r51570, r51571, r51572;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51562);
        mpfr_init(r51563);
        mpfr_init(r51564);
        mpfr_init(r51565);
        mpfr_init(r51566);
        mpfr_init(r51567);
        mpfr_init(r51568);
        mpfr_init(r51569);
        mpfr_init(r51570);
        mpfr_init(r51571);
        mpfr_init(r51572);
}

double f_dm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r51562, d1, MPFR_RNDN);
        mpfr_set_d(r51563, d2, MPFR_RNDN);
        mpfr_mul(r51564, r51562, r51563, MPFR_RNDN);
        mpfr_set_d(r51565, d3, MPFR_RNDN);
        mpfr_mul(r51566, r51562, r51565, MPFR_RNDN);
        mpfr_sub(r51567, r51564, r51566, MPFR_RNDN);
        mpfr_set_d(r51568, d4, MPFR_RNDN);
        mpfr_mul(r51569, r51568, r51562, MPFR_RNDN);
        mpfr_add(r51570, r51567, r51569, MPFR_RNDN);
        mpfr_mul(r51571, r51562, r51562, MPFR_RNDN);
        mpfr_sub(r51572, r51570, r51571, MPFR_RNDN);
        return mpfr_get_d(r51572, MPFR_RNDN);
}

