#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 r12371 = d1;
        float r12372 = d2;
        float r12373 = r12371 * r12372;
        float r12374 = d3;
        float r12375 = r12371 * r12374;
        float r12376 = r12373 - r12375;
        float r12377 = d4;
        float r12378 = r12377 * r12371;
        float r12379 = r12376 + r12378;
        float r12380 = r12371 * r12371;
        float r12381 = r12379 - r12380;
        return r12381;
}

double f_id(double d1, double d2, double d3, double d4) {
        double r12382 = d1;
        double r12383 = d2;
        double r12384 = r12382 * r12383;
        double r12385 = d3;
        double r12386 = r12382 * r12385;
        double r12387 = r12384 - r12386;
        double r12388 = d4;
        double r12389 = r12388 * r12382;
        double r12390 = r12387 + r12389;
        double r12391 = r12382 * r12382;
        double r12392 = r12390 - r12391;
        return r12392;
}


double f_of(float d1, float d2, float d3, float d4) {
        float r12393 = d1;
        float r12394 = d4;
        float r12395 = d2;
        float r12396 = r12394 + r12395;
        float r12397 = d3;
        float r12398 = r12397 + r12393;
        float r12399 = r12396 - r12398;
        float r12400 = r12393 * r12399;
        return r12400;
}

double f_od(double d1, double d2, double d3, double d4) {
        double r12401 = d1;
        double r12402 = d4;
        double r12403 = d2;
        double r12404 = r12402 + r12403;
        double r12405 = d3;
        double r12406 = r12405 + r12401;
        double r12407 = r12404 - r12406;
        double r12408 = r12401 * r12407;
        return r12408;
}

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 r12409, r12410, r12411, r12412, r12413, r12414, r12415, r12416, r12417, r12418, r12419;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r12409);
        mpfr_init(r12410);
        mpfr_init(r12411);
        mpfr_init(r12412);
        mpfr_init(r12413);
        mpfr_init(r12414);
        mpfr_init(r12415);
        mpfr_init(r12416);
        mpfr_init(r12417);
        mpfr_init(r12418);
        mpfr_init(r12419);
}

double f_im(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r12409, d1, MPFR_RNDN);
        mpfr_set_d(r12410, d2, MPFR_RNDN);
        mpfr_mul(r12411, r12409, r12410, MPFR_RNDN);
        mpfr_set_d(r12412, d3, MPFR_RNDN);
        mpfr_mul(r12413, r12409, r12412, MPFR_RNDN);
        mpfr_sub(r12414, r12411, r12413, MPFR_RNDN);
        mpfr_set_d(r12415, d4, MPFR_RNDN);
        mpfr_mul(r12416, r12415, r12409, MPFR_RNDN);
        mpfr_add(r12417, r12414, r12416, MPFR_RNDN);
        mpfr_mul(r12418, r12409, r12409, MPFR_RNDN);
        mpfr_sub(r12419, r12417, r12418, MPFR_RNDN);
        return mpfr_get_d(r12419, MPFR_RNDN);
}

static mpfr_t r12420, r12421, r12422, r12423, r12424, r12425, r12426, r12427;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12420);
        mpfr_init(r12421);
        mpfr_init(r12422);
        mpfr_init(r12423);
        mpfr_init(r12424);
        mpfr_init(r12425);
        mpfr_init(r12426);
        mpfr_init(r12427);
}

double f_fm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r12420, d1, MPFR_RNDN);
        mpfr_set_d(r12421, d4, MPFR_RNDN);
        mpfr_set_d(r12422, d2, MPFR_RNDN);
        mpfr_add(r12423, r12421, r12422, MPFR_RNDN);
        mpfr_set_d(r12424, d3, MPFR_RNDN);
        mpfr_add(r12425, r12424, r12420, MPFR_RNDN);
        mpfr_sub(r12426, r12423, r12425, MPFR_RNDN);
        mpfr_mul(r12427, r12420, r12426, MPFR_RNDN);
        return mpfr_get_d(r12427, MPFR_RNDN);
}

static mpfr_t r12428, r12429, r12430, r12431, r12432, r12433, r12434, r12435;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12428);
        mpfr_init(r12429);
        mpfr_init(r12430);
        mpfr_init(r12431);
        mpfr_init(r12432);
        mpfr_init(r12433);
        mpfr_init(r12434);
        mpfr_init(r12435);
}

double f_dm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r12428, d1, MPFR_RNDN);
        mpfr_set_d(r12429, d4, MPFR_RNDN);
        mpfr_set_d(r12430, d2, MPFR_RNDN);
        mpfr_add(r12431, r12429, r12430, MPFR_RNDN);
        mpfr_set_d(r12432, d3, MPFR_RNDN);
        mpfr_add(r12433, r12432, r12428, MPFR_RNDN);
        mpfr_sub(r12434, r12431, r12433, MPFR_RNDN);
        mpfr_mul(r12435, r12428, r12434, MPFR_RNDN);
        return mpfr_get_d(r12435, MPFR_RNDN);
}

