#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 r12840 = d1;
        float r12841 = d2;
        float r12842 = r12840 * r12841;
        float r12843 = d3;
        float r12844 = r12840 * r12843;
        float r12845 = r12842 + r12844;
        return r12845;
}

double f_id(double d1, double d2, double d3) {
        double r12846 = d1;
        double r12847 = d2;
        double r12848 = r12846 * r12847;
        double r12849 = d3;
        double r12850 = r12846 * r12849;
        double r12851 = r12848 + r12850;
        return r12851;
}


double f_of(float d1, float d2, float d3) {
        float r12852 = d2;
        float r12853 = d3;
        float r12854 = r12852 + r12853;
        float r12855 = d1;
        float r12856 = r12854 * r12855;
        return r12856;
}

double f_od(double d1, double d2, double d3) {
        double r12857 = d2;
        double r12858 = d3;
        double r12859 = r12857 + r12858;
        double r12860 = d1;
        double r12861 = r12859 * r12860;
        return r12861;
}

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 r12862, r12863, r12864, r12865, r12866, r12867;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r12862);
        mpfr_init(r12863);
        mpfr_init(r12864);
        mpfr_init(r12865);
        mpfr_init(r12866);
        mpfr_init(r12867);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r12862, d1, MPFR_RNDN);
        mpfr_set_d(r12863, d2, MPFR_RNDN);
        mpfr_mul(r12864, r12862, r12863, MPFR_RNDN);
        mpfr_set_d(r12865, d3, MPFR_RNDN);
        mpfr_mul(r12866, r12862, r12865, MPFR_RNDN);
        mpfr_add(r12867, r12864, r12866, MPFR_RNDN);
        return mpfr_get_d(r12867, MPFR_RNDN);
}

static mpfr_t r12868, r12869, r12870, r12871, r12872;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12868);
        mpfr_init(r12869);
        mpfr_init(r12870);
        mpfr_init(r12871);
        mpfr_init(r12872);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r12868, d2, MPFR_RNDN);
        mpfr_set_d(r12869, d3, MPFR_RNDN);
        mpfr_add(r12870, r12868, r12869, MPFR_RNDN);
        mpfr_set_d(r12871, d1, MPFR_RNDN);
        mpfr_mul(r12872, r12870, r12871, MPFR_RNDN);
        return mpfr_get_d(r12872, MPFR_RNDN);
}

static mpfr_t r12873, r12874, r12875, r12876, r12877;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12873);
        mpfr_init(r12874);
        mpfr_init(r12875);
        mpfr_init(r12876);
        mpfr_init(r12877);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r12873, d2, MPFR_RNDN);
        mpfr_set_d(r12874, d3, MPFR_RNDN);
        mpfr_add(r12875, r12873, r12874, MPFR_RNDN);
        mpfr_set_d(r12876, d1, MPFR_RNDN);
        mpfr_mul(r12877, r12875, r12876, MPFR_RNDN);
        return mpfr_get_d(r12877, MPFR_RNDN);
}

