#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 r11668 = d1;
        float r11669 = 3.0f;
        float r11670 = r11668 * r11669;
        float r11671 = d2;
        float r11672 = r11668 * r11671;
        float r11673 = r11670 + r11672;
        float r11674 = d3;
        float r11675 = r11668 * r11674;
        float r11676 = r11673 + r11675;
        return r11676;
}

double f_id(double d1, double d2, double d3) {
        double r11677 = d1;
        double r11678 = 3.0;
        double r11679 = r11677 * r11678;
        double r11680 = d2;
        double r11681 = r11677 * r11680;
        double r11682 = r11679 + r11681;
        double r11683 = d3;
        double r11684 = r11677 * r11683;
        double r11685 = r11682 + r11684;
        return r11685;
}


double f_of(float d1, float d2, float d3) {
        float r11686 = d1;
        float r11687 = 3.0f;
        float r11688 = r11686 * r11687;
        float r11689 = d2;
        float r11690 = r11689 * r11686;
        float r11691 = r11688 + r11690;
        float r11692 = d3;
        float r11693 = r11686 * r11692;
        float r11694 = r11691 + r11693;
        return r11694;
}

double f_od(double d1, double d2, double d3) {
        double r11695 = d1;
        double r11696 = 3.0;
        double r11697 = r11695 * r11696;
        double r11698 = d2;
        double r11699 = r11698 * r11695;
        double r11700 = r11697 + r11699;
        double r11701 = d3;
        double r11702 = r11695 * r11701;
        double r11703 = r11700 + r11702;
        return r11703;
}

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 r11704, r11705, r11706, r11707, r11708, r11709, r11710, r11711, r11712;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11704);
        mpfr_init_set_str(r11705, "3", 10, MPFR_RNDN);
        mpfr_init(r11706);
        mpfr_init(r11707);
        mpfr_init(r11708);
        mpfr_init(r11709);
        mpfr_init(r11710);
        mpfr_init(r11711);
        mpfr_init(r11712);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r11704, d1, MPFR_RNDN);
        ;
        mpfr_mul(r11706, r11704, r11705, MPFR_RNDN);
        mpfr_set_d(r11707, d2, MPFR_RNDN);
        mpfr_mul(r11708, r11704, r11707, MPFR_RNDN);
        mpfr_add(r11709, r11706, r11708, MPFR_RNDN);
        mpfr_set_d(r11710, d3, MPFR_RNDN);
        mpfr_mul(r11711, r11704, r11710, MPFR_RNDN);
        mpfr_add(r11712, r11709, r11711, MPFR_RNDN);
        return mpfr_get_d(r11712, MPFR_RNDN);
}

static mpfr_t r11713, r11714, r11715, r11716, r11717, r11718, r11719, r11720, r11721;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11713);
        mpfr_init_set_str(r11714, "3", 10, MPFR_RNDN);
        mpfr_init(r11715);
        mpfr_init(r11716);
        mpfr_init(r11717);
        mpfr_init(r11718);
        mpfr_init(r11719);
        mpfr_init(r11720);
        mpfr_init(r11721);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r11713, d1, MPFR_RNDN);
        ;
        mpfr_mul(r11715, r11713, r11714, MPFR_RNDN);
        mpfr_set_d(r11716, d2, MPFR_RNDN);
        mpfr_mul(r11717, r11716, r11713, MPFR_RNDN);
        mpfr_add(r11718, r11715, r11717, MPFR_RNDN);
        mpfr_set_d(r11719, d3, MPFR_RNDN);
        mpfr_mul(r11720, r11713, r11719, MPFR_RNDN);
        mpfr_add(r11721, r11718, r11720, MPFR_RNDN);
        return mpfr_get_d(r11721, MPFR_RNDN);
}

static mpfr_t r11722, r11723, r11724, r11725, r11726, r11727, r11728, r11729, r11730;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11722);
        mpfr_init_set_str(r11723, "3", 10, MPFR_RNDN);
        mpfr_init(r11724);
        mpfr_init(r11725);
        mpfr_init(r11726);
        mpfr_init(r11727);
        mpfr_init(r11728);
        mpfr_init(r11729);
        mpfr_init(r11730);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r11722, d1, MPFR_RNDN);
        ;
        mpfr_mul(r11724, r11722, r11723, MPFR_RNDN);
        mpfr_set_d(r11725, d2, MPFR_RNDN);
        mpfr_mul(r11726, r11725, r11722, MPFR_RNDN);
        mpfr_add(r11727, r11724, r11726, MPFR_RNDN);
        mpfr_set_d(r11728, d3, MPFR_RNDN);
        mpfr_mul(r11729, r11722, r11728, MPFR_RNDN);
        mpfr_add(r11730, r11727, r11729, MPFR_RNDN);
        return mpfr_get_d(r11730, MPFR_RNDN);
}

