#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 r12514 = d1;
        float r12515 = 3.0f;
        float r12516 = r12514 * r12515;
        float r12517 = d2;
        float r12518 = r12514 * r12517;
        float r12519 = r12516 + r12518;
        float r12520 = d3;
        float r12521 = r12514 * r12520;
        float r12522 = r12519 + r12521;
        return r12522;
}

double f_id(double d1, double d2, double d3) {
        double r12523 = d1;
        double r12524 = 3.0;
        double r12525 = r12523 * r12524;
        double r12526 = d2;
        double r12527 = r12523 * r12526;
        double r12528 = r12525 + r12527;
        double r12529 = d3;
        double r12530 = r12523 * r12529;
        double r12531 = r12528 + r12530;
        return r12531;
}


double f_of(float d1, float d2, float d3) {
        float r12532 = d2;
        float r12533 = d3;
        float r12534 = 3.0f;
        float r12535 = r12533 + r12534;
        float r12536 = r12532 + r12535;
        float r12537 = d1;
        float r12538 = r12536 * r12537;
        return r12538;
}

double f_od(double d1, double d2, double d3) {
        double r12539 = d2;
        double r12540 = d3;
        double r12541 = 3.0;
        double r12542 = r12540 + r12541;
        double r12543 = r12539 + r12542;
        double r12544 = d1;
        double r12545 = r12543 * r12544;
        return r12545;
}

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 r12546, r12547, r12548, r12549, r12550, r12551, r12552, r12553, r12554;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12546);
        mpfr_init_set_str(r12547, "3", 10, MPFR_RNDN);
        mpfr_init(r12548);
        mpfr_init(r12549);
        mpfr_init(r12550);
        mpfr_init(r12551);
        mpfr_init(r12552);
        mpfr_init(r12553);
        mpfr_init(r12554);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r12546, d1, MPFR_RNDN);
        ;
        mpfr_mul(r12548, r12546, r12547, MPFR_RNDN);
        mpfr_set_d(r12549, d2, MPFR_RNDN);
        mpfr_mul(r12550, r12546, r12549, MPFR_RNDN);
        mpfr_add(r12551, r12548, r12550, MPFR_RNDN);
        mpfr_set_d(r12552, d3, MPFR_RNDN);
        mpfr_mul(r12553, r12546, r12552, MPFR_RNDN);
        mpfr_add(r12554, r12551, r12553, MPFR_RNDN);
        return mpfr_get_d(r12554, MPFR_RNDN);
}

static mpfr_t r12555, r12556, r12557, r12558, r12559, r12560, r12561;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12555);
        mpfr_init(r12556);
        mpfr_init_set_str(r12557, "3", 10, MPFR_RNDN);
        mpfr_init(r12558);
        mpfr_init(r12559);
        mpfr_init(r12560);
        mpfr_init(r12561);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r12555, d2, MPFR_RNDN);
        mpfr_set_d(r12556, d3, MPFR_RNDN);
        ;
        mpfr_add(r12558, r12556, r12557, MPFR_RNDN);
        mpfr_add(r12559, r12555, r12558, MPFR_RNDN);
        mpfr_set_d(r12560, d1, MPFR_RNDN);
        mpfr_mul(r12561, r12559, r12560, MPFR_RNDN);
        return mpfr_get_d(r12561, MPFR_RNDN);
}

static mpfr_t r12562, r12563, r12564, r12565, r12566, r12567, r12568;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12562);
        mpfr_init(r12563);
        mpfr_init_set_str(r12564, "3", 10, MPFR_RNDN);
        mpfr_init(r12565);
        mpfr_init(r12566);
        mpfr_init(r12567);
        mpfr_init(r12568);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r12562, d2, MPFR_RNDN);
        mpfr_set_d(r12563, d3, MPFR_RNDN);
        ;
        mpfr_add(r12565, r12563, r12564, MPFR_RNDN);
        mpfr_add(r12566, r12562, r12565, MPFR_RNDN);
        mpfr_set_d(r12567, d1, MPFR_RNDN);
        mpfr_mul(r12568, r12566, r12567, MPFR_RNDN);
        return mpfr_get_d(r12568, MPFR_RNDN);
}

