#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 r26405 = d1;
        float r26406 = d2;
        float r26407 = r26405 * r26406;
        float r26408 = d3;
        float r26409 = r26405 * r26408;
        float r26410 = r26407 - r26409;
        float r26411 = d4;
        float r26412 = r26411 * r26405;
        float r26413 = r26410 + r26412;
        float r26414 = r26405 * r26405;
        float r26415 = r26413 - r26414;
        return r26415;
}

double f_id(double d1, double d2, double d3, double d4) {
        double r26416 = d1;
        double r26417 = d2;
        double r26418 = r26416 * r26417;
        double r26419 = d3;
        double r26420 = r26416 * r26419;
        double r26421 = r26418 - r26420;
        double r26422 = d4;
        double r26423 = r26422 * r26416;
        double r26424 = r26421 + r26423;
        double r26425 = r26416 * r26416;
        double r26426 = r26424 - r26425;
        return r26426;
}


double f_of(float d1, float d2, float d3, float d4) {
        float r26427 = d4;
        float r26428 = d3;
        float r26429 = r26427 - r26428;
        float r26430 = d2;
        float r26431 = d1;
        float r26432 = r26430 - r26431;
        float r26433 = r26429 + r26432;
        float r26434 = r26433 * r26431;
        return r26434;
}

double f_od(double d1, double d2, double d3, double d4) {
        double r26435 = d4;
        double r26436 = d3;
        double r26437 = r26435 - r26436;
        double r26438 = d2;
        double r26439 = d1;
        double r26440 = r26438 - r26439;
        double r26441 = r26437 + r26440;
        double r26442 = r26441 * r26439;
        return r26442;
}

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 r26443, r26444, r26445, r26446, r26447, r26448, r26449, r26450, r26451, r26452, r26453;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r26443);
        mpfr_init(r26444);
        mpfr_init(r26445);
        mpfr_init(r26446);
        mpfr_init(r26447);
        mpfr_init(r26448);
        mpfr_init(r26449);
        mpfr_init(r26450);
        mpfr_init(r26451);
        mpfr_init(r26452);
        mpfr_init(r26453);
}

double f_im(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r26443, d1, MPFR_RNDN);
        mpfr_set_d(r26444, d2, MPFR_RNDN);
        mpfr_mul(r26445, r26443, r26444, MPFR_RNDN);
        mpfr_set_d(r26446, d3, MPFR_RNDN);
        mpfr_mul(r26447, r26443, r26446, MPFR_RNDN);
        mpfr_sub(r26448, r26445, r26447, MPFR_RNDN);
        mpfr_set_d(r26449, d4, MPFR_RNDN);
        mpfr_mul(r26450, r26449, r26443, MPFR_RNDN);
        mpfr_add(r26451, r26448, r26450, MPFR_RNDN);
        mpfr_mul(r26452, r26443, r26443, MPFR_RNDN);
        mpfr_sub(r26453, r26451, r26452, MPFR_RNDN);
        return mpfr_get_d(r26453, MPFR_RNDN);
}

static mpfr_t r26454, r26455, r26456, r26457, r26458, r26459, r26460, r26461;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r26454);
        mpfr_init(r26455);
        mpfr_init(r26456);
        mpfr_init(r26457);
        mpfr_init(r26458);
        mpfr_init(r26459);
        mpfr_init(r26460);
        mpfr_init(r26461);
}

double f_fm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r26454, d4, MPFR_RNDN);
        mpfr_set_d(r26455, d3, MPFR_RNDN);
        mpfr_sub(r26456, r26454, r26455, MPFR_RNDN);
        mpfr_set_d(r26457, d2, MPFR_RNDN);
        mpfr_set_d(r26458, d1, MPFR_RNDN);
        mpfr_sub(r26459, r26457, r26458, MPFR_RNDN);
        mpfr_add(r26460, r26456, r26459, MPFR_RNDN);
        mpfr_mul(r26461, r26460, r26458, MPFR_RNDN);
        return mpfr_get_d(r26461, MPFR_RNDN);
}

static mpfr_t r26462, r26463, r26464, r26465, r26466, r26467, r26468, r26469;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r26462);
        mpfr_init(r26463);
        mpfr_init(r26464);
        mpfr_init(r26465);
        mpfr_init(r26466);
        mpfr_init(r26467);
        mpfr_init(r26468);
        mpfr_init(r26469);
}

double f_dm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r26462, d4, MPFR_RNDN);
        mpfr_set_d(r26463, d3, MPFR_RNDN);
        mpfr_sub(r26464, r26462, r26463, MPFR_RNDN);
        mpfr_set_d(r26465, d2, MPFR_RNDN);
        mpfr_set_d(r26466, d1, MPFR_RNDN);
        mpfr_sub(r26467, r26465, r26466, MPFR_RNDN);
        mpfr_add(r26468, r26464, r26467, MPFR_RNDN);
        mpfr_mul(r26469, r26468, r26466, MPFR_RNDN);
        return mpfr_get_d(r26469, MPFR_RNDN);
}

