#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 r55759632 = d1;
        float r55759633 = 3;
        float r55759634 = r55759632 * r55759633;
        float r55759635 = d2;
        float r55759636 = r55759632 * r55759635;
        float r55759637 = r55759634 + r55759636;
        float r55759638 = d3;
        float r55759639 = r55759632 * r55759638;
        float r55759640 = r55759637 + r55759639;
        return r55759640;
}

double f_id(double d1, double d2, double d3) {
        double r55759641 = d1;
        double r55759642 = 3;
        double r55759643 = r55759641 * r55759642;
        double r55759644 = d2;
        double r55759645 = r55759641 * r55759644;
        double r55759646 = r55759643 + r55759645;
        double r55759647 = d3;
        double r55759648 = r55759641 * r55759647;
        double r55759649 = r55759646 + r55759648;
        return r55759649;
}


double f_of(float d1, float d2, float d3) {
        float r55759650 = d1;
        float r55759651 = 3;
        float r55759652 = d2;
        float r55759653 = d3;
        float r55759654 = r55759652 + r55759653;
        float r55759655 = r55759651 + r55759654;
        float r55759656 = r55759650 * r55759655;
        return r55759656;
}

double f_od(double d1, double d2, double d3) {
        double r55759657 = d1;
        double r55759658 = 3;
        double r55759659 = d2;
        double r55759660 = d3;
        double r55759661 = r55759659 + r55759660;
        double r55759662 = r55759658 + r55759661;
        double r55759663 = r55759657 * r55759662;
        return r55759663;
}

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 r55759664, r55759665, r55759666, r55759667, r55759668, r55759669, r55759670, r55759671, r55759672;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r55759664);
        mpfr_init_set_str(r55759665, "3", 10, MPFR_RNDN);
        mpfr_init(r55759666);
        mpfr_init(r55759667);
        mpfr_init(r55759668);
        mpfr_init(r55759669);
        mpfr_init(r55759670);
        mpfr_init(r55759671);
        mpfr_init(r55759672);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r55759664, d1, MPFR_RNDN);
        ;
        mpfr_mul(r55759666, r55759664, r55759665, MPFR_RNDN);
        mpfr_set_d(r55759667, d2, MPFR_RNDN);
        mpfr_mul(r55759668, r55759664, r55759667, MPFR_RNDN);
        mpfr_add(r55759669, r55759666, r55759668, MPFR_RNDN);
        mpfr_set_d(r55759670, d3, MPFR_RNDN);
        mpfr_mul(r55759671, r55759664, r55759670, MPFR_RNDN);
        mpfr_add(r55759672, r55759669, r55759671, MPFR_RNDN);
        return mpfr_get_d(r55759672, MPFR_RNDN);
}

static mpfr_t r55759673, r55759674, r55759675, r55759676, r55759677, r55759678, r55759679;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r55759673);
        mpfr_init_set_str(r55759674, "3", 10, MPFR_RNDN);
        mpfr_init(r55759675);
        mpfr_init(r55759676);
        mpfr_init(r55759677);
        mpfr_init(r55759678);
        mpfr_init(r55759679);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r55759673, d1, MPFR_RNDN);
        ;
        mpfr_set_d(r55759675, d2, MPFR_RNDN);
        mpfr_set_d(r55759676, d3, MPFR_RNDN);
        mpfr_add(r55759677, r55759675, r55759676, MPFR_RNDN);
        mpfr_add(r55759678, r55759674, r55759677, MPFR_RNDN);
        mpfr_mul(r55759679, r55759673, r55759678, MPFR_RNDN);
        return mpfr_get_d(r55759679, MPFR_RNDN);
}

static mpfr_t r55759680, r55759681, r55759682, r55759683, r55759684, r55759685, r55759686;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r55759680);
        mpfr_init_set_str(r55759681, "3", 10, MPFR_RNDN);
        mpfr_init(r55759682);
        mpfr_init(r55759683);
        mpfr_init(r55759684);
        mpfr_init(r55759685);
        mpfr_init(r55759686);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r55759680, d1, MPFR_RNDN);
        ;
        mpfr_set_d(r55759682, d2, MPFR_RNDN);
        mpfr_set_d(r55759683, d3, MPFR_RNDN);
        mpfr_add(r55759684, r55759682, r55759683, MPFR_RNDN);
        mpfr_add(r55759685, r55759681, r55759684, MPFR_RNDN);
        mpfr_mul(r55759686, r55759680, r55759685, MPFR_RNDN);
        return mpfr_get_d(r55759686, MPFR_RNDN);
}

