#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 r51264 = d1;
        float r51265 = d2;
        float r51266 = r51264 * r51265;
        float r51267 = d3;
        float r51268 = r51264 * r51267;
        float r51269 = r51266 - r51268;
        float r51270 = d4;
        float r51271 = r51270 * r51264;
        float r51272 = r51269 + r51271;
        float r51273 = r51264 * r51264;
        float r51274 = r51272 - r51273;
        return r51274;
}

double f_id(double d1, double d2, double d3, double d4) {
        double r51275 = d1;
        double r51276 = d2;
        double r51277 = r51275 * r51276;
        double r51278 = d3;
        double r51279 = r51275 * r51278;
        double r51280 = r51277 - r51279;
        double r51281 = d4;
        double r51282 = r51281 * r51275;
        double r51283 = r51280 + r51282;
        double r51284 = r51275 * r51275;
        double r51285 = r51283 - r51284;
        return r51285;
}


double f_of(float d1, float d2, float d3, float d4) {
        float r51286 = d1;
        float r51287 = d2;
        float r51288 = r51286 * r51287;
        float r51289 = d3;
        float r51290 = r51286 * r51289;
        float r51291 = r51288 - r51290;
        float r51292 = d4;
        float r51293 = r51292 * r51286;
        float r51294 = r51291 + r51293;
        float r51295 = r51286 * r51286;
        float r51296 = r51294 - r51295;
        return r51296;
}

double f_od(double d1, double d2, double d3, double d4) {
        double r51297 = d1;
        double r51298 = d2;
        double r51299 = r51297 * r51298;
        double r51300 = d3;
        double r51301 = r51297 * r51300;
        double r51302 = r51299 - r51301;
        double r51303 = d4;
        double r51304 = r51303 * r51297;
        double r51305 = r51302 + r51304;
        double r51306 = r51297 * r51297;
        double r51307 = r51305 - r51306;
        return r51307;
}

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 r51308, r51309, r51310, r51311, r51312, r51313, r51314, r51315, r51316, r51317, r51318;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51308);
        mpfr_init(r51309);
        mpfr_init(r51310);
        mpfr_init(r51311);
        mpfr_init(r51312);
        mpfr_init(r51313);
        mpfr_init(r51314);
        mpfr_init(r51315);
        mpfr_init(r51316);
        mpfr_init(r51317);
        mpfr_init(r51318);
}

double f_im(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r51308, d1, MPFR_RNDN);
        mpfr_set_d(r51309, d2, MPFR_RNDN);
        mpfr_mul(r51310, r51308, r51309, MPFR_RNDN);
        mpfr_set_d(r51311, d3, MPFR_RNDN);
        mpfr_mul(r51312, r51308, r51311, MPFR_RNDN);
        mpfr_sub(r51313, r51310, r51312, MPFR_RNDN);
        mpfr_set_d(r51314, d4, MPFR_RNDN);
        mpfr_mul(r51315, r51314, r51308, MPFR_RNDN);
        mpfr_add(r51316, r51313, r51315, MPFR_RNDN);
        mpfr_mul(r51317, r51308, r51308, MPFR_RNDN);
        mpfr_sub(r51318, r51316, r51317, MPFR_RNDN);
        return mpfr_get_d(r51318, MPFR_RNDN);
}

static mpfr_t r51319, r51320, r51321, r51322, r51323, r51324, r51325, r51326, r51327, r51328, r51329;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51319);
        mpfr_init(r51320);
        mpfr_init(r51321);
        mpfr_init(r51322);
        mpfr_init(r51323);
        mpfr_init(r51324);
        mpfr_init(r51325);
        mpfr_init(r51326);
        mpfr_init(r51327);
        mpfr_init(r51328);
        mpfr_init(r51329);
}

double f_fm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r51319, d1, MPFR_RNDN);
        mpfr_set_d(r51320, d2, MPFR_RNDN);
        mpfr_mul(r51321, r51319, r51320, MPFR_RNDN);
        mpfr_set_d(r51322, d3, MPFR_RNDN);
        mpfr_mul(r51323, r51319, r51322, MPFR_RNDN);
        mpfr_sub(r51324, r51321, r51323, MPFR_RNDN);
        mpfr_set_d(r51325, d4, MPFR_RNDN);
        mpfr_mul(r51326, r51325, r51319, MPFR_RNDN);
        mpfr_add(r51327, r51324, r51326, MPFR_RNDN);
        mpfr_mul(r51328, r51319, r51319, MPFR_RNDN);
        mpfr_sub(r51329, r51327, r51328, MPFR_RNDN);
        return mpfr_get_d(r51329, MPFR_RNDN);
}

static mpfr_t r51330, r51331, r51332, r51333, r51334, r51335, r51336, r51337, r51338, r51339, r51340;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51330);
        mpfr_init(r51331);
        mpfr_init(r51332);
        mpfr_init(r51333);
        mpfr_init(r51334);
        mpfr_init(r51335);
        mpfr_init(r51336);
        mpfr_init(r51337);
        mpfr_init(r51338);
        mpfr_init(r51339);
        mpfr_init(r51340);
}

double f_dm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r51330, d1, MPFR_RNDN);
        mpfr_set_d(r51331, d2, MPFR_RNDN);
        mpfr_mul(r51332, r51330, r51331, MPFR_RNDN);
        mpfr_set_d(r51333, d3, MPFR_RNDN);
        mpfr_mul(r51334, r51330, r51333, MPFR_RNDN);
        mpfr_sub(r51335, r51332, r51334, MPFR_RNDN);
        mpfr_set_d(r51336, d4, MPFR_RNDN);
        mpfr_mul(r51337, r51336, r51330, MPFR_RNDN);
        mpfr_add(r51338, r51335, r51337, MPFR_RNDN);
        mpfr_mul(r51339, r51330, r51330, MPFR_RNDN);
        mpfr_sub(r51340, r51338, r51339, MPFR_RNDN);
        return mpfr_get_d(r51340, MPFR_RNDN);
}

