#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 r48816 = d1;
        float r48817 = d2;
        float r48818 = r48816 * r48817;
        float r48819 = d3;
        float r48820 = r48816 * r48819;
        float r48821 = r48818 - r48820;
        float r48822 = d4;
        float r48823 = r48822 * r48816;
        float r48824 = r48821 + r48823;
        float r48825 = r48816 * r48816;
        float r48826 = r48824 - r48825;
        return r48826;
}

double f_id(double d1, double d2, double d3, double d4) {
        double r48827 = d1;
        double r48828 = d2;
        double r48829 = r48827 * r48828;
        double r48830 = d3;
        double r48831 = r48827 * r48830;
        double r48832 = r48829 - r48831;
        double r48833 = d4;
        double r48834 = r48833 * r48827;
        double r48835 = r48832 + r48834;
        double r48836 = r48827 * r48827;
        double r48837 = r48835 - r48836;
        return r48837;
}


double f_of(float d1, float d2, float d3, float d4) {
        float r48838 = d1;
        float r48839 = d2;
        float r48840 = d3;
        float r48841 = r48839 - r48840;
        float r48842 = r48838 * r48841;
        float r48843 = d4;
        float r48844 = r48843 - r48838;
        float r48845 = r48838 * r48844;
        float r48846 = r48842 + r48845;
        return r48846;
}

double f_od(double d1, double d2, double d3, double d4) {
        double r48847 = d1;
        double r48848 = d2;
        double r48849 = d3;
        double r48850 = r48848 - r48849;
        double r48851 = r48847 * r48850;
        double r48852 = d4;
        double r48853 = r48852 - r48847;
        double r48854 = r48847 * r48853;
        double r48855 = r48851 + r48854;
        return r48855;
}

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 r48856, r48857, r48858, r48859, r48860, r48861, r48862, r48863, r48864, r48865, r48866;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r48856);
        mpfr_init(r48857);
        mpfr_init(r48858);
        mpfr_init(r48859);
        mpfr_init(r48860);
        mpfr_init(r48861);
        mpfr_init(r48862);
        mpfr_init(r48863);
        mpfr_init(r48864);
        mpfr_init(r48865);
        mpfr_init(r48866);
}

double f_im(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r48856, d1, MPFR_RNDN);
        mpfr_set_d(r48857, d2, MPFR_RNDN);
        mpfr_mul(r48858, r48856, r48857, MPFR_RNDN);
        mpfr_set_d(r48859, d3, MPFR_RNDN);
        mpfr_mul(r48860, r48856, r48859, MPFR_RNDN);
        mpfr_sub(r48861, r48858, r48860, MPFR_RNDN);
        mpfr_set_d(r48862, d4, MPFR_RNDN);
        mpfr_mul(r48863, r48862, r48856, MPFR_RNDN);
        mpfr_add(r48864, r48861, r48863, MPFR_RNDN);
        mpfr_mul(r48865, r48856, r48856, MPFR_RNDN);
        mpfr_sub(r48866, r48864, r48865, MPFR_RNDN);
        return mpfr_get_d(r48866, MPFR_RNDN);
}

static mpfr_t r48867, r48868, r48869, r48870, r48871, r48872, r48873, r48874, r48875;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r48867);
        mpfr_init(r48868);
        mpfr_init(r48869);
        mpfr_init(r48870);
        mpfr_init(r48871);
        mpfr_init(r48872);
        mpfr_init(r48873);
        mpfr_init(r48874);
        mpfr_init(r48875);
}

double f_fm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r48867, d1, MPFR_RNDN);
        mpfr_set_d(r48868, d2, MPFR_RNDN);
        mpfr_set_d(r48869, d3, MPFR_RNDN);
        mpfr_sub(r48870, r48868, r48869, MPFR_RNDN);
        mpfr_mul(r48871, r48867, r48870, MPFR_RNDN);
        mpfr_set_d(r48872, d4, MPFR_RNDN);
        mpfr_sub(r48873, r48872, r48867, MPFR_RNDN);
        mpfr_mul(r48874, r48867, r48873, MPFR_RNDN);
        mpfr_add(r48875, r48871, r48874, MPFR_RNDN);
        return mpfr_get_d(r48875, MPFR_RNDN);
}

static mpfr_t r48876, r48877, r48878, r48879, r48880, r48881, r48882, r48883, r48884;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r48876);
        mpfr_init(r48877);
        mpfr_init(r48878);
        mpfr_init(r48879);
        mpfr_init(r48880);
        mpfr_init(r48881);
        mpfr_init(r48882);
        mpfr_init(r48883);
        mpfr_init(r48884);
}

double f_dm(double d1, double d2, double d3, double d4) {
        mpfr_set_d(r48876, d1, MPFR_RNDN);
        mpfr_set_d(r48877, d2, MPFR_RNDN);
        mpfr_set_d(r48878, d3, MPFR_RNDN);
        mpfr_sub(r48879, r48877, r48878, MPFR_RNDN);
        mpfr_mul(r48880, r48876, r48879, MPFR_RNDN);
        mpfr_set_d(r48881, d4, MPFR_RNDN);
        mpfr_sub(r48882, r48881, r48876, MPFR_RNDN);
        mpfr_mul(r48883, r48876, r48882, MPFR_RNDN);
        mpfr_add(r48884, r48880, r48883, MPFR_RNDN);
        return mpfr_get_d(r48884, MPFR_RNDN);
}

