#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 r26888 = d1;
        float r26889 = d2;
        float r26890 = r26888 * r26889;
        float r26891 = d3;
        float r26892 = r26888 * r26891;
        float r26893 = r26890 - r26892;
        float r26894 = d4;
        float r26895 = r26894 * r26888;
        float r26896 = r26893 + r26895;
        float r26897 = r26888 * r26888;
        float r26898 = r26896 - r26897;
        return r26898;
}

double f_id(double d1, double d2, double d3, double d4) {
        double r26899 = d1;
        double r26900 = d2;
        double r26901 = r26899 * r26900;
        double r26902 = d3;
        double r26903 = r26899 * r26902;
        double r26904 = r26901 - r26903;
        double r26905 = d4;
        double r26906 = r26905 * r26899;
        double r26907 = r26904 + r26906;
        double r26908 = r26899 * r26899;
        double r26909 = r26907 - r26908;
        return r26909;
}


double f_of(float d1, float d2, float d3, float d4) {
        float r26910 = d4;
        float r26911 = d3;
        float r26912 = r26910 - r26911;
        float r26913 = d2;
        float r26914 = d1;
        float r26915 = r26913 - r26914;
        float r26916 = r26912 + r26915;
        float r26917 = r26916 * r26914;
        return r26917;
}

double f_od(double d1, double d2, double d3, double d4) {
        double r26918 = d4;
        double r26919 = d3;
        double r26920 = r26918 - r26919;
        double r26921 = d2;
        double r26922 = d1;
        double r26923 = r26921 - r26922;
        double r26924 = r26920 + r26923;
        double r26925 = r26924 * r26922;
        return r26925;
}

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 r26926, r26927, r26928, r26929, r26930, r26931, r26932, r26933, r26934, r26935, r26936;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r26926);
        mpfr_init(r26927);
        mpfr_init(r26928);
        mpfr_init(r26929);
        mpfr_init(r26930);
        mpfr_init(r26931);
        mpfr_init(r26932);
        mpfr_init(r26933);
        mpfr_init(r26934);
        mpfr_init(r26935);
        mpfr_init(r26936);
}

double f_im(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r26926, d1, MPFR_RNDN);
        mpfr_set_d(r26927, d2, MPFR_RNDN);
        mpfr_mul(r26928, r26926, r26927, MPFR_RNDN);
        mpfr_set_d(r26929, d3, MPFR_RNDN);
        mpfr_mul(r26930, r26926, r26929, MPFR_RNDN);
        mpfr_sub(r26931, r26928, r26930, MPFR_RNDN);
        mpfr_set_d(r26932, d4, MPFR_RNDN);
        mpfr_mul(r26933, r26932, r26926, MPFR_RNDN);
        mpfr_add(r26934, r26931, r26933, MPFR_RNDN);
        mpfr_mul(r26935, r26926, r26926, MPFR_RNDN);
        mpfr_sub(r26936, r26934, r26935, MPFR_RNDN);
        return mpfr_get_d(r26936, MPFR_RNDN);
}

static mpfr_t r26937, r26938, r26939, r26940, r26941, r26942, r26943, r26944;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r26937);
        mpfr_init(r26938);
        mpfr_init(r26939);
        mpfr_init(r26940);
        mpfr_init(r26941);
        mpfr_init(r26942);
        mpfr_init(r26943);
        mpfr_init(r26944);
}

double f_fm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r26937, d4, MPFR_RNDN);
        mpfr_set_d(r26938, d3, MPFR_RNDN);
        mpfr_sub(r26939, r26937, r26938, MPFR_RNDN);
        mpfr_set_d(r26940, d2, MPFR_RNDN);
        mpfr_set_d(r26941, d1, MPFR_RNDN);
        mpfr_sub(r26942, r26940, r26941, MPFR_RNDN);
        mpfr_add(r26943, r26939, r26942, MPFR_RNDN);
        mpfr_mul(r26944, r26943, r26941, MPFR_RNDN);
        return mpfr_get_d(r26944, MPFR_RNDN);
}

static mpfr_t r26945, r26946, r26947, r26948, r26949, r26950, r26951, r26952;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r26945);
        mpfr_init(r26946);
        mpfr_init(r26947);
        mpfr_init(r26948);
        mpfr_init(r26949);
        mpfr_init(r26950);
        mpfr_init(r26951);
        mpfr_init(r26952);
}

double f_dm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r26945, d4, MPFR_RNDN);
        mpfr_set_d(r26946, d3, MPFR_RNDN);
        mpfr_sub(r26947, r26945, r26946, MPFR_RNDN);
        mpfr_set_d(r26948, d2, MPFR_RNDN);
        mpfr_set_d(r26949, d1, MPFR_RNDN);
        mpfr_sub(r26950, r26948, r26949, MPFR_RNDN);
        mpfr_add(r26951, r26947, r26950, MPFR_RNDN);
        mpfr_mul(r26952, r26951, r26949, MPFR_RNDN);
        return mpfr_get_d(r26952, MPFR_RNDN);
}

