#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 r26457 = d1;
        float r26458 = d2;
        float r26459 = r26457 * r26458;
        float r26460 = d3;
        float r26461 = r26457 * r26460;
        float r26462 = r26459 - r26461;
        float r26463 = d4;
        float r26464 = r26463 * r26457;
        float r26465 = r26462 + r26464;
        float r26466 = r26457 * r26457;
        float r26467 = r26465 - r26466;
        return r26467;
}

double f_id(double d1, double d2, double d3, double d4) {
        double r26468 = d1;
        double r26469 = d2;
        double r26470 = r26468 * r26469;
        double r26471 = d3;
        double r26472 = r26468 * r26471;
        double r26473 = r26470 - r26472;
        double r26474 = d4;
        double r26475 = r26474 * r26468;
        double r26476 = r26473 + r26475;
        double r26477 = r26468 * r26468;
        double r26478 = r26476 - r26477;
        return r26478;
}


double f_of(float d1, float d2, float d3, float d4) {
        float r26479 = d4;
        float r26480 = d3;
        float r26481 = r26479 - r26480;
        float r26482 = d2;
        float r26483 = d1;
        float r26484 = r26482 - r26483;
        float r26485 = r26481 + r26484;
        float r26486 = r26485 * r26483;
        return r26486;
}

double f_od(double d1, double d2, double d3, double d4) {
        double r26487 = d4;
        double r26488 = d3;
        double r26489 = r26487 - r26488;
        double r26490 = d2;
        double r26491 = d1;
        double r26492 = r26490 - r26491;
        double r26493 = r26489 + r26492;
        double r26494 = r26493 * r26491;
        return r26494;
}

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 r26495, r26496, r26497, r26498, r26499, r26500, r26501, r26502, r26503, r26504, r26505;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r26495);
        mpfr_init(r26496);
        mpfr_init(r26497);
        mpfr_init(r26498);
        mpfr_init(r26499);
        mpfr_init(r26500);
        mpfr_init(r26501);
        mpfr_init(r26502);
        mpfr_init(r26503);
        mpfr_init(r26504);
        mpfr_init(r26505);
}

double f_im(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r26495, d1, MPFR_RNDN);
        mpfr_set_d(r26496, d2, MPFR_RNDN);
        mpfr_mul(r26497, r26495, r26496, MPFR_RNDN);
        mpfr_set_d(r26498, d3, MPFR_RNDN);
        mpfr_mul(r26499, r26495, r26498, MPFR_RNDN);
        mpfr_sub(r26500, r26497, r26499, MPFR_RNDN);
        mpfr_set_d(r26501, d4, MPFR_RNDN);
        mpfr_mul(r26502, r26501, r26495, MPFR_RNDN);
        mpfr_add(r26503, r26500, r26502, MPFR_RNDN);
        mpfr_mul(r26504, r26495, r26495, MPFR_RNDN);
        mpfr_sub(r26505, r26503, r26504, MPFR_RNDN);
        return mpfr_get_d(r26505, MPFR_RNDN);
}

static mpfr_t r26506, r26507, r26508, r26509, r26510, r26511, r26512, r26513;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r26506);
        mpfr_init(r26507);
        mpfr_init(r26508);
        mpfr_init(r26509);
        mpfr_init(r26510);
        mpfr_init(r26511);
        mpfr_init(r26512);
        mpfr_init(r26513);
}

double f_fm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r26506, d4, MPFR_RNDN);
        mpfr_set_d(r26507, d3, MPFR_RNDN);
        mpfr_sub(r26508, r26506, r26507, MPFR_RNDN);
        mpfr_set_d(r26509, d2, MPFR_RNDN);
        mpfr_set_d(r26510, d1, MPFR_RNDN);
        mpfr_sub(r26511, r26509, r26510, MPFR_RNDN);
        mpfr_add(r26512, r26508, r26511, MPFR_RNDN);
        mpfr_mul(r26513, r26512, r26510, MPFR_RNDN);
        return mpfr_get_d(r26513, MPFR_RNDN);
}

static mpfr_t r26514, r26515, r26516, r26517, r26518, r26519, r26520, r26521;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r26514);
        mpfr_init(r26515);
        mpfr_init(r26516);
        mpfr_init(r26517);
        mpfr_init(r26518);
        mpfr_init(r26519);
        mpfr_init(r26520);
        mpfr_init(r26521);
}

double f_dm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r26514, d4, MPFR_RNDN);
        mpfr_set_d(r26515, d3, MPFR_RNDN);
        mpfr_sub(r26516, r26514, r26515, MPFR_RNDN);
        mpfr_set_d(r26517, d2, MPFR_RNDN);
        mpfr_set_d(r26518, d1, MPFR_RNDN);
        mpfr_sub(r26519, r26517, r26518, MPFR_RNDN);
        mpfr_add(r26520, r26516, r26519, MPFR_RNDN);
        mpfr_mul(r26521, r26520, r26518, MPFR_RNDN);
        return mpfr_get_d(r26521, MPFR_RNDN);
}

