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

char *name = "FastMath test3";

double f_if(float d1, float d2, float d3) {
        float r56509824 = d1;
        float r56509825 = 3;
        float r56509826 = r56509824 * r56509825;
        float r56509827 = d2;
        float r56509828 = r56509824 * r56509827;
        float r56509829 = r56509826 + r56509828;
        float r56509830 = d3;
        float r56509831 = r56509824 * r56509830;
        float r56509832 = r56509829 + r56509831;
        return r56509832;
}

double f_id(double d1, double d2, double d3) {
        double r56509833 = d1;
        double r56509834 = 3;
        double r56509835 = r56509833 * r56509834;
        double r56509836 = d2;
        double r56509837 = r56509833 * r56509836;
        double r56509838 = r56509835 + r56509837;
        double r56509839 = d3;
        double r56509840 = r56509833 * r56509839;
        double r56509841 = r56509838 + r56509840;
        return r56509841;
}


double f_of(float d1, float d2, float d3) {
        float r56509842 = d2;
        float r56509843 = 3;
        float r56509844 = r56509842 + r56509843;
        float r56509845 = d3;
        float r56509846 = r56509844 + r56509845;
        float r56509847 = d1;
        float r56509848 = r56509846 * r56509847;
        return r56509848;
}

double f_od(double d1, double d2, double d3) {
        double r56509849 = d2;
        double r56509850 = 3;
        double r56509851 = r56509849 + r56509850;
        double r56509852 = d3;
        double r56509853 = r56509851 + r56509852;
        double r56509854 = d1;
        double r56509855 = r56509853 * r56509854;
        return r56509855;
}

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 r56509856, r56509857, r56509858, r56509859, r56509860, r56509861, r56509862, r56509863, r56509864;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r56509856);
        mpfr_init_set_str(r56509857, "3", 10, MPFR_RNDN);
        mpfr_init(r56509858);
        mpfr_init(r56509859);
        mpfr_init(r56509860);
        mpfr_init(r56509861);
        mpfr_init(r56509862);
        mpfr_init(r56509863);
        mpfr_init(r56509864);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r56509856, d1, MPFR_RNDN);
        ;
        mpfr_mul(r56509858, r56509856, r56509857, MPFR_RNDN);
        mpfr_set_d(r56509859, d2, MPFR_RNDN);
        mpfr_mul(r56509860, r56509856, r56509859, MPFR_RNDN);
        mpfr_add(r56509861, r56509858, r56509860, MPFR_RNDN);
        mpfr_set_d(r56509862, d3, MPFR_RNDN);
        mpfr_mul(r56509863, r56509856, r56509862, MPFR_RNDN);
        mpfr_add(r56509864, r56509861, r56509863, MPFR_RNDN);
        return mpfr_get_d(r56509864, MPFR_RNDN);
}

static mpfr_t r56509865, r56509866, r56509867, r56509868, r56509869, r56509870, r56509871;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r56509865);
        mpfr_init_set_str(r56509866, "3", 10, MPFR_RNDN);
        mpfr_init(r56509867);
        mpfr_init(r56509868);
        mpfr_init(r56509869);
        mpfr_init(r56509870);
        mpfr_init(r56509871);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r56509865, d2, MPFR_RNDN);
        ;
        mpfr_add(r56509867, r56509865, r56509866, MPFR_RNDN);
        mpfr_set_d(r56509868, d3, MPFR_RNDN);
        mpfr_add(r56509869, r56509867, r56509868, MPFR_RNDN);
        mpfr_set_d(r56509870, d1, MPFR_RNDN);
        mpfr_mul(r56509871, r56509869, r56509870, MPFR_RNDN);
        return mpfr_get_d(r56509871, MPFR_RNDN);
}

static mpfr_t r56509872, r56509873, r56509874, r56509875, r56509876, r56509877, r56509878;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r56509872);
        mpfr_init_set_str(r56509873, "3", 10, MPFR_RNDN);
        mpfr_init(r56509874);
        mpfr_init(r56509875);
        mpfr_init(r56509876);
        mpfr_init(r56509877);
        mpfr_init(r56509878);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r56509872, d2, MPFR_RNDN);
        ;
        mpfr_add(r56509874, r56509872, r56509873, MPFR_RNDN);
        mpfr_set_d(r56509875, d3, MPFR_RNDN);
        mpfr_add(r56509876, r56509874, r56509875, MPFR_RNDN);
        mpfr_set_d(r56509877, d1, MPFR_RNDN);
        mpfr_mul(r56509878, r56509876, r56509877, MPFR_RNDN);
        return mpfr_get_d(r56509878, MPFR_RNDN);
}

