#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 r51302 = d1;
        float r51303 = d2;
        float r51304 = r51302 * r51303;
        float r51305 = d3;
        float r51306 = r51302 * r51305;
        float r51307 = r51304 - r51306;
        float r51308 = d4;
        float r51309 = r51308 * r51302;
        float r51310 = r51307 + r51309;
        float r51311 = r51302 * r51302;
        float r51312 = r51310 - r51311;
        return r51312;
}

double f_id(double d1, double d2, double d3, double d4) {
        double r51313 = d1;
        double r51314 = d2;
        double r51315 = r51313 * r51314;
        double r51316 = d3;
        double r51317 = r51313 * r51316;
        double r51318 = r51315 - r51317;
        double r51319 = d4;
        double r51320 = r51319 * r51313;
        double r51321 = r51318 + r51320;
        double r51322 = r51313 * r51313;
        double r51323 = r51321 - r51322;
        return r51323;
}


double f_of(float d1, float d2, float d3, float d4) {
        float r51324 = d1;
        float r51325 = d2;
        float r51326 = r51324 * r51325;
        float r51327 = d3;
        float r51328 = r51324 * r51327;
        float r51329 = r51326 - r51328;
        float r51330 = d4;
        float r51331 = r51330 * r51324;
        float r51332 = r51329 + r51331;
        float r51333 = r51324 * r51324;
        float r51334 = r51332 - r51333;
        return r51334;
}

double f_od(double d1, double d2, double d3, double d4) {
        double r51335 = d1;
        double r51336 = d2;
        double r51337 = r51335 * r51336;
        double r51338 = d3;
        double r51339 = r51335 * r51338;
        double r51340 = r51337 - r51339;
        double r51341 = d4;
        double r51342 = r51341 * r51335;
        double r51343 = r51340 + r51342;
        double r51344 = r51335 * r51335;
        double r51345 = r51343 - r51344;
        return r51345;
}

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 r51346, r51347, r51348, r51349, r51350, r51351, r51352, r51353, r51354, r51355, r51356;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51346);
        mpfr_init(r51347);
        mpfr_init(r51348);
        mpfr_init(r51349);
        mpfr_init(r51350);
        mpfr_init(r51351);
        mpfr_init(r51352);
        mpfr_init(r51353);
        mpfr_init(r51354);
        mpfr_init(r51355);
        mpfr_init(r51356);
}

double f_im(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r51346, d1, MPFR_RNDN);
        mpfr_set_d(r51347, d2, MPFR_RNDN);
        mpfr_mul(r51348, r51346, r51347, MPFR_RNDN);
        mpfr_set_d(r51349, d3, MPFR_RNDN);
        mpfr_mul(r51350, r51346, r51349, MPFR_RNDN);
        mpfr_sub(r51351, r51348, r51350, MPFR_RNDN);
        mpfr_set_d(r51352, d4, MPFR_RNDN);
        mpfr_mul(r51353, r51352, r51346, MPFR_RNDN);
        mpfr_add(r51354, r51351, r51353, MPFR_RNDN);
        mpfr_mul(r51355, r51346, r51346, MPFR_RNDN);
        mpfr_sub(r51356, r51354, r51355, MPFR_RNDN);
        return mpfr_get_d(r51356, MPFR_RNDN);
}

static mpfr_t r51357, r51358, r51359, r51360, r51361, r51362, r51363, r51364, r51365, r51366, r51367;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51357);
        mpfr_init(r51358);
        mpfr_init(r51359);
        mpfr_init(r51360);
        mpfr_init(r51361);
        mpfr_init(r51362);
        mpfr_init(r51363);
        mpfr_init(r51364);
        mpfr_init(r51365);
        mpfr_init(r51366);
        mpfr_init(r51367);
}

double f_fm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r51357, d1, MPFR_RNDN);
        mpfr_set_d(r51358, d2, MPFR_RNDN);
        mpfr_mul(r51359, r51357, r51358, MPFR_RNDN);
        mpfr_set_d(r51360, d3, MPFR_RNDN);
        mpfr_mul(r51361, r51357, r51360, MPFR_RNDN);
        mpfr_sub(r51362, r51359, r51361, MPFR_RNDN);
        mpfr_set_d(r51363, d4, MPFR_RNDN);
        mpfr_mul(r51364, r51363, r51357, MPFR_RNDN);
        mpfr_add(r51365, r51362, r51364, MPFR_RNDN);
        mpfr_mul(r51366, r51357, r51357, MPFR_RNDN);
        mpfr_sub(r51367, r51365, r51366, MPFR_RNDN);
        return mpfr_get_d(r51367, MPFR_RNDN);
}

static mpfr_t r51368, r51369, r51370, r51371, r51372, r51373, r51374, r51375, r51376, r51377, r51378;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51368);
        mpfr_init(r51369);
        mpfr_init(r51370);
        mpfr_init(r51371);
        mpfr_init(r51372);
        mpfr_init(r51373);
        mpfr_init(r51374);
        mpfr_init(r51375);
        mpfr_init(r51376);
        mpfr_init(r51377);
        mpfr_init(r51378);
}

double f_dm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r51368, d1, MPFR_RNDN);
        mpfr_set_d(r51369, d2, MPFR_RNDN);
        mpfr_mul(r51370, r51368, r51369, MPFR_RNDN);
        mpfr_set_d(r51371, d3, MPFR_RNDN);
        mpfr_mul(r51372, r51368, r51371, MPFR_RNDN);
        mpfr_sub(r51373, r51370, r51372, MPFR_RNDN);
        mpfr_set_d(r51374, d4, MPFR_RNDN);
        mpfr_mul(r51375, r51374, r51368, MPFR_RNDN);
        mpfr_add(r51376, r51373, r51375, MPFR_RNDN);
        mpfr_mul(r51377, r51368, r51368, MPFR_RNDN);
        mpfr_sub(r51378, r51376, r51377, MPFR_RNDN);
        return mpfr_get_d(r51378, MPFR_RNDN);
}

