#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 r11848 = d1;
        float r11849 = d2;
        float r11850 = r11848 * r11849;
        float r11851 = d3;
        float r11852 = r11848 * r11851;
        float r11853 = r11850 - r11852;
        float r11854 = d4;
        float r11855 = r11854 * r11848;
        float r11856 = r11853 + r11855;
        float r11857 = r11848 * r11848;
        float r11858 = r11856 - r11857;
        return r11858;
}

double f_id(double d1, double d2, double d3, double d4) {
        double r11859 = d1;
        double r11860 = d2;
        double r11861 = r11859 * r11860;
        double r11862 = d3;
        double r11863 = r11859 * r11862;
        double r11864 = r11861 - r11863;
        double r11865 = d4;
        double r11866 = r11865 * r11859;
        double r11867 = r11864 + r11866;
        double r11868 = r11859 * r11859;
        double r11869 = r11867 - r11868;
        return r11869;
}


double f_of(float d1, float d2, float d3, float d4) {
        float r11870 = d2;
        float r11871 = d1;
        float r11872 = r11870 - r11871;
        float r11873 = d4;
        float r11874 = d3;
        float r11875 = r11873 - r11874;
        float r11876 = r11872 + r11875;
        float r11877 = r11876 * r11871;
        return r11877;
}

double f_od(double d1, double d2, double d3, double d4) {
        double r11878 = d2;
        double r11879 = d1;
        double r11880 = r11878 - r11879;
        double r11881 = d4;
        double r11882 = d3;
        double r11883 = r11881 - r11882;
        double r11884 = r11880 + r11883;
        double r11885 = r11884 * r11879;
        return r11885;
}

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 r11886, r11887, r11888, r11889, r11890, r11891, r11892, r11893, r11894, r11895, r11896;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r11886);
        mpfr_init(r11887);
        mpfr_init(r11888);
        mpfr_init(r11889);
        mpfr_init(r11890);
        mpfr_init(r11891);
        mpfr_init(r11892);
        mpfr_init(r11893);
        mpfr_init(r11894);
        mpfr_init(r11895);
        mpfr_init(r11896);
}

double f_im(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r11886, d1, MPFR_RNDN);
        mpfr_set_d(r11887, d2, MPFR_RNDN);
        mpfr_mul(r11888, r11886, r11887, MPFR_RNDN);
        mpfr_set_d(r11889, d3, MPFR_RNDN);
        mpfr_mul(r11890, r11886, r11889, MPFR_RNDN);
        mpfr_sub(r11891, r11888, r11890, MPFR_RNDN);
        mpfr_set_d(r11892, d4, MPFR_RNDN);
        mpfr_mul(r11893, r11892, r11886, MPFR_RNDN);
        mpfr_add(r11894, r11891, r11893, MPFR_RNDN);
        mpfr_mul(r11895, r11886, r11886, MPFR_RNDN);
        mpfr_sub(r11896, r11894, r11895, MPFR_RNDN);
        return mpfr_get_d(r11896, MPFR_RNDN);
}

static mpfr_t r11897, r11898, r11899, r11900, r11901, r11902, r11903, r11904;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11897);
        mpfr_init(r11898);
        mpfr_init(r11899);
        mpfr_init(r11900);
        mpfr_init(r11901);
        mpfr_init(r11902);
        mpfr_init(r11903);
        mpfr_init(r11904);
}

double f_fm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r11897, d2, MPFR_RNDN);
        mpfr_set_d(r11898, d1, MPFR_RNDN);
        mpfr_sub(r11899, r11897, r11898, MPFR_RNDN);
        mpfr_set_d(r11900, d4, MPFR_RNDN);
        mpfr_set_d(r11901, d3, MPFR_RNDN);
        mpfr_sub(r11902, r11900, r11901, MPFR_RNDN);
        mpfr_add(r11903, r11899, r11902, MPFR_RNDN);
        mpfr_mul(r11904, r11903, r11898, MPFR_RNDN);
        return mpfr_get_d(r11904, MPFR_RNDN);
}

static mpfr_t r11905, r11906, r11907, r11908, r11909, r11910, r11911, r11912;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11905);
        mpfr_init(r11906);
        mpfr_init(r11907);
        mpfr_init(r11908);
        mpfr_init(r11909);
        mpfr_init(r11910);
        mpfr_init(r11911);
        mpfr_init(r11912);
}

double f_dm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r11905, d2, MPFR_RNDN);
        mpfr_set_d(r11906, d1, MPFR_RNDN);
        mpfr_sub(r11907, r11905, r11906, MPFR_RNDN);
        mpfr_set_d(r11908, d4, MPFR_RNDN);
        mpfr_set_d(r11909, d3, MPFR_RNDN);
        mpfr_sub(r11910, r11908, r11909, MPFR_RNDN);
        mpfr_add(r11911, r11907, r11910, MPFR_RNDN);
        mpfr_mul(r11912, r11911, r11906, MPFR_RNDN);
        return mpfr_get_d(r11912, MPFR_RNDN);
}

