#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 r11830 = d1;
        float r11831 = d2;
        float r11832 = r11830 * r11831;
        float r11833 = d3;
        float r11834 = r11830 * r11833;
        float r11835 = r11832 - r11834;
        float r11836 = d4;
        float r11837 = r11836 * r11830;
        float r11838 = r11835 + r11837;
        float r11839 = r11830 * r11830;
        float r11840 = r11838 - r11839;
        return r11840;
}

double f_id(double d1, double d2, double d3, double d4) {
        double r11841 = d1;
        double r11842 = d2;
        double r11843 = r11841 * r11842;
        double r11844 = d3;
        double r11845 = r11841 * r11844;
        double r11846 = r11843 - r11845;
        double r11847 = d4;
        double r11848 = r11847 * r11841;
        double r11849 = r11846 + r11848;
        double r11850 = r11841 * r11841;
        double r11851 = r11849 - r11850;
        return r11851;
}


double f_of(float d1, float d2, float d3, float d4) {
        float r11852 = d2;
        float r11853 = d3;
        float r11854 = r11852 - r11853;
        float r11855 = d1;
        float r11856 = d4;
        float r11857 = r11855 * r11856;
        float r11858 = fma(r11854, r11855, r11857);
        float r11859 = r11855 * r11855;
        float r11860 = r11858 - r11859;
        return r11860;
}

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

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 r11870, r11871, r11872, r11873, r11874, r11875, r11876, r11877, r11878, r11879, r11880;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r11870);
        mpfr_init(r11871);
        mpfr_init(r11872);
        mpfr_init(r11873);
        mpfr_init(r11874);
        mpfr_init(r11875);
        mpfr_init(r11876);
        mpfr_init(r11877);
        mpfr_init(r11878);
        mpfr_init(r11879);
        mpfr_init(r11880);
}

double f_im(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r11870, d1, MPFR_RNDN);
        mpfr_set_d(r11871, d2, MPFR_RNDN);
        mpfr_mul(r11872, r11870, r11871, MPFR_RNDN);
        mpfr_set_d(r11873, d3, MPFR_RNDN);
        mpfr_mul(r11874, r11870, r11873, MPFR_RNDN);
        mpfr_sub(r11875, r11872, r11874, MPFR_RNDN);
        mpfr_set_d(r11876, d4, MPFR_RNDN);
        mpfr_mul(r11877, r11876, r11870, MPFR_RNDN);
        mpfr_add(r11878, r11875, r11877, MPFR_RNDN);
        mpfr_mul(r11879, r11870, r11870, MPFR_RNDN);
        mpfr_sub(r11880, r11878, r11879, MPFR_RNDN);
        return mpfr_get_d(r11880, MPFR_RNDN);
}

static mpfr_t r11881, r11882, r11883, r11884, r11885, r11886, r11887, r11888, r11889;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11881);
        mpfr_init(r11882);
        mpfr_init(r11883);
        mpfr_init(r11884);
        mpfr_init(r11885);
        mpfr_init(r11886);
        mpfr_init(r11887);
        mpfr_init(r11888);
        mpfr_init(r11889);
}

double f_fm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r11881, d2, MPFR_RNDN);
        mpfr_set_d(r11882, d3, MPFR_RNDN);
        mpfr_sub(r11883, r11881, r11882, MPFR_RNDN);
        mpfr_set_d(r11884, d1, MPFR_RNDN);
        mpfr_set_d(r11885, d4, MPFR_RNDN);
        mpfr_mul(r11886, r11884, r11885, MPFR_RNDN);
        mpfr_fma(r11887, r11883, r11884, r11886, MPFR_RNDN);
        mpfr_mul(r11888, r11884, r11884, MPFR_RNDN);
        mpfr_sub(r11889, r11887, r11888, MPFR_RNDN);
        return mpfr_get_d(r11889, MPFR_RNDN);
}

static mpfr_t r11890, r11891, r11892, r11893, r11894, r11895, r11896, r11897, r11898;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11890);
        mpfr_init(r11891);
        mpfr_init(r11892);
        mpfr_init(r11893);
        mpfr_init(r11894);
        mpfr_init(r11895);
        mpfr_init(r11896);
        mpfr_init(r11897);
        mpfr_init(r11898);
}

double f_dm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r11890, d2, MPFR_RNDN);
        mpfr_set_d(r11891, d3, MPFR_RNDN);
        mpfr_sub(r11892, r11890, r11891, MPFR_RNDN);
        mpfr_set_d(r11893, d1, MPFR_RNDN);
        mpfr_set_d(r11894, d4, MPFR_RNDN);
        mpfr_mul(r11895, r11893, r11894, MPFR_RNDN);
        mpfr_fma(r11896, r11892, r11893, r11895, MPFR_RNDN);
        mpfr_mul(r11897, r11893, r11893, MPFR_RNDN);
        mpfr_sub(r11898, r11896, r11897, MPFR_RNDN);
        return mpfr_get_d(r11898, MPFR_RNDN);
}

