#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "FastMath dist";

double f_if(float d1, float d2, float d3) {
        float r28854 = d1;
        float r28855 = d2;
        float r28856 = r28854 * r28855;
        float r28857 = d3;
        float r28858 = r28854 * r28857;
        float r28859 = r28856 + r28858;
        return r28859;
}

double f_id(double d1, double d2, double d3) {
        double r28860 = d1;
        double r28861 = d2;
        double r28862 = r28860 * r28861;
        double r28863 = d3;
        double r28864 = r28860 * r28863;
        double r28865 = r28862 + r28864;
        return r28865;
}


double f_of(float d1, float d2, float d3) {
        float r28866 = d1;
        float r28867 = d2;
        float r28868 = r28866 * r28867;
        float r28869 = d3;
        float r28870 = r28866 * r28869;
        float r28871 = r28868 + r28870;
        return r28871;
}

double f_od(double d1, double d2, double d3) {
        double r28872 = d1;
        double r28873 = d2;
        double r28874 = r28872 * r28873;
        double r28875 = d3;
        double r28876 = r28872 * r28875;
        double r28877 = r28874 + r28876;
        return r28877;
}

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 r28878, r28879, r28880, r28881, r28882, r28883;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r28878);
        mpfr_init(r28879);
        mpfr_init(r28880);
        mpfr_init(r28881);
        mpfr_init(r28882);
        mpfr_init(r28883);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r28878, d1, MPFR_RNDN);
        mpfr_set_d(r28879, d2, MPFR_RNDN);
        mpfr_mul(r28880, r28878, r28879, MPFR_RNDN);
        mpfr_set_d(r28881, d3, MPFR_RNDN);
        mpfr_mul(r28882, r28878, r28881, MPFR_RNDN);
        mpfr_add(r28883, r28880, r28882, MPFR_RNDN);
        return mpfr_get_d(r28883, MPFR_RNDN);
}

static mpfr_t r28884, r28885, r28886, r28887, r28888, r28889;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28884);
        mpfr_init(r28885);
        mpfr_init(r28886);
        mpfr_init(r28887);
        mpfr_init(r28888);
        mpfr_init(r28889);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r28884, d1, MPFR_RNDN);
        mpfr_set_d(r28885, d2, MPFR_RNDN);
        mpfr_mul(r28886, r28884, r28885, MPFR_RNDN);
        mpfr_set_d(r28887, d3, MPFR_RNDN);
        mpfr_mul(r28888, r28884, r28887, MPFR_RNDN);
        mpfr_add(r28889, r28886, r28888, MPFR_RNDN);
        return mpfr_get_d(r28889, MPFR_RNDN);
}

static mpfr_t r28890, r28891, r28892, r28893, r28894, r28895;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28890);
        mpfr_init(r28891);
        mpfr_init(r28892);
        mpfr_init(r28893);
        mpfr_init(r28894);
        mpfr_init(r28895);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r28890, d1, MPFR_RNDN);
        mpfr_set_d(r28891, d2, MPFR_RNDN);
        mpfr_mul(r28892, r28890, r28891, MPFR_RNDN);
        mpfr_set_d(r28893, d3, MPFR_RNDN);
        mpfr_mul(r28894, r28890, r28893, MPFR_RNDN);
        mpfr_add(r28895, r28892, r28894, MPFR_RNDN);
        return mpfr_get_d(r28895, MPFR_RNDN);
}

