#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 r28167 = d1;
        float r28168 = 3;
        float r28169 = r28167 * r28168;
        float r28170 = d2;
        float r28171 = r28167 * r28170;
        float r28172 = r28169 + r28171;
        float r28173 = d3;
        float r28174 = r28167 * r28173;
        float r28175 = r28172 + r28174;
        return r28175;
}

double f_id(double d1, double d2, double d3) {
        double r28176 = d1;
        double r28177 = 3;
        double r28178 = r28176 * r28177;
        double r28179 = d2;
        double r28180 = r28176 * r28179;
        double r28181 = r28178 + r28180;
        double r28182 = d3;
        double r28183 = r28176 * r28182;
        double r28184 = r28181 + r28183;
        return r28184;
}


double f_of(float d1, float d2, float d3) {
        float r28185 = d2;
        float r28186 = 3;
        float r28187 = r28185 + r28186;
        float r28188 = d1;
        float r28189 = d3;
        float r28190 = r28188 * r28189;
        float r28191 = fma(r28187, r28188, r28190);
        return r28191;
}

double f_od(double d1, double d2, double d3) {
        double r28192 = d2;
        double r28193 = 3;
        double r28194 = r28192 + r28193;
        double r28195 = d1;
        double r28196 = d3;
        double r28197 = r28195 * r28196;
        double r28198 = fma(r28194, r28195, r28197);
        return r28198;
}

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 r28199, r28200, r28201, r28202, r28203, r28204, r28205, r28206, r28207;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28199);
        mpfr_init_set_str(r28200, "3", 10, MPFR_RNDN);
        mpfr_init(r28201);
        mpfr_init(r28202);
        mpfr_init(r28203);
        mpfr_init(r28204);
        mpfr_init(r28205);
        mpfr_init(r28206);
        mpfr_init(r28207);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r28199, d1, MPFR_RNDN);
        ;
        mpfr_mul(r28201, r28199, r28200, MPFR_RNDN);
        mpfr_set_d(r28202, d2, MPFR_RNDN);
        mpfr_mul(r28203, r28199, r28202, MPFR_RNDN);
        mpfr_add(r28204, r28201, r28203, MPFR_RNDN);
        mpfr_set_d(r28205, d3, MPFR_RNDN);
        mpfr_mul(r28206, r28199, r28205, MPFR_RNDN);
        mpfr_add(r28207, r28204, r28206, MPFR_RNDN);
        return mpfr_get_d(r28207, MPFR_RNDN);
}

static mpfr_t r28208, r28209, r28210, r28211, r28212, r28213, r28214;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28208);
        mpfr_init_set_str(r28209, "3", 10, MPFR_RNDN);
        mpfr_init(r28210);
        mpfr_init(r28211);
        mpfr_init(r28212);
        mpfr_init(r28213);
        mpfr_init(r28214);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r28208, d2, MPFR_RNDN);
        ;
        mpfr_add(r28210, r28208, r28209, MPFR_RNDN);
        mpfr_set_d(r28211, d1, MPFR_RNDN);
        mpfr_set_d(r28212, d3, MPFR_RNDN);
        mpfr_mul(r28213, r28211, r28212, MPFR_RNDN);
        mpfr_fma(r28214, r28210, r28211, r28213, MPFR_RNDN);
        return mpfr_get_d(r28214, MPFR_RNDN);
}

static mpfr_t r28215, r28216, r28217, r28218, r28219, r28220, r28221;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28215);
        mpfr_init_set_str(r28216, "3", 10, MPFR_RNDN);
        mpfr_init(r28217);
        mpfr_init(r28218);
        mpfr_init(r28219);
        mpfr_init(r28220);
        mpfr_init(r28221);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r28215, d2, MPFR_RNDN);
        ;
        mpfr_add(r28217, r28215, r28216, MPFR_RNDN);
        mpfr_set_d(r28218, d1, MPFR_RNDN);
        mpfr_set_d(r28219, d3, MPFR_RNDN);
        mpfr_mul(r28220, r28218, r28219, MPFR_RNDN);
        mpfr_fma(r28221, r28217, r28218, r28220, MPFR_RNDN);
        return mpfr_get_d(r28221, MPFR_RNDN);
}

