#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 r12191 = d1;
        float r12192 = 3;
        float r12193 = r12191 * r12192;
        float r12194 = d2;
        float r12195 = r12191 * r12194;
        float r12196 = r12193 + r12195;
        float r12197 = d3;
        float r12198 = r12191 * r12197;
        float r12199 = r12196 + r12198;
        return r12199;
}

double f_id(double d1, double d2, double d3) {
        double r12200 = d1;
        double r12201 = 3;
        double r12202 = r12200 * r12201;
        double r12203 = d2;
        double r12204 = r12200 * r12203;
        double r12205 = r12202 + r12204;
        double r12206 = d3;
        double r12207 = r12200 * r12206;
        double r12208 = r12205 + r12207;
        return r12208;
}


double f_of(float d1, float d2, float d3) {
        float r12209 = d1;
        float r12210 = d3;
        float r12211 = 3;
        float r12212 = r12210 + r12211;
        float r12213 = d2;
        float r12214 = r12213 * r12209;
        float r12215 = fma(r12209, r12212, r12214);
        float r12216 = 1;
        float r12217 = pow(r12215, r12216);
        return r12217;
}

double f_od(double d1, double d2, double d3) {
        double r12218 = d1;
        double r12219 = d3;
        double r12220 = 3;
        double r12221 = r12219 + r12220;
        double r12222 = d2;
        double r12223 = r12222 * r12218;
        double r12224 = fma(r12218, r12221, r12223);
        double r12225 = 1;
        double r12226 = pow(r12224, r12225);
        return r12226;
}

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 r12227, r12228, r12229, r12230, r12231, r12232, r12233, r12234, r12235;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12227);
        mpfr_init_set_str(r12228, "3", 10, MPFR_RNDN);
        mpfr_init(r12229);
        mpfr_init(r12230);
        mpfr_init(r12231);
        mpfr_init(r12232);
        mpfr_init(r12233);
        mpfr_init(r12234);
        mpfr_init(r12235);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r12227, d1, MPFR_RNDN);
        ;
        mpfr_mul(r12229, r12227, r12228, MPFR_RNDN);
        mpfr_set_d(r12230, d2, MPFR_RNDN);
        mpfr_mul(r12231, r12227, r12230, MPFR_RNDN);
        mpfr_add(r12232, r12229, r12231, MPFR_RNDN);
        mpfr_set_d(r12233, d3, MPFR_RNDN);
        mpfr_mul(r12234, r12227, r12233, MPFR_RNDN);
        mpfr_add(r12235, r12232, r12234, MPFR_RNDN);
        return mpfr_get_d(r12235, MPFR_RNDN);
}

static mpfr_t r12236, r12237, r12238, r12239, r12240, r12241, r12242, r12243, r12244;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12236);
        mpfr_init(r12237);
        mpfr_init_set_str(r12238, "3", 10, MPFR_RNDN);
        mpfr_init(r12239);
        mpfr_init(r12240);
        mpfr_init(r12241);
        mpfr_init(r12242);
        mpfr_init_set_str(r12243, "1", 10, MPFR_RNDN);
        mpfr_init(r12244);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r12236, d1, MPFR_RNDN);
        mpfr_set_d(r12237, d3, MPFR_RNDN);
        ;
        mpfr_add(r12239, r12237, r12238, MPFR_RNDN);
        mpfr_set_d(r12240, d2, MPFR_RNDN);
        mpfr_mul(r12241, r12240, r12236, MPFR_RNDN);
        mpfr_fma(r12242, r12236, r12239, r12241, MPFR_RNDN);
        ;
        mpfr_pow(r12244, r12242, r12243, MPFR_RNDN);
        return mpfr_get_d(r12244, MPFR_RNDN);
}

static mpfr_t r12245, r12246, r12247, r12248, r12249, r12250, r12251, r12252, r12253;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12245);
        mpfr_init(r12246);
        mpfr_init_set_str(r12247, "3", 10, MPFR_RNDN);
        mpfr_init(r12248);
        mpfr_init(r12249);
        mpfr_init(r12250);
        mpfr_init(r12251);
        mpfr_init_set_str(r12252, "1", 10, MPFR_RNDN);
        mpfr_init(r12253);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r12245, d1, MPFR_RNDN);
        mpfr_set_d(r12246, d3, MPFR_RNDN);
        ;
        mpfr_add(r12248, r12246, r12247, MPFR_RNDN);
        mpfr_set_d(r12249, d2, MPFR_RNDN);
        mpfr_mul(r12250, r12249, r12245, MPFR_RNDN);
        mpfr_fma(r12251, r12245, r12248, r12250, MPFR_RNDN);
        ;
        mpfr_pow(r12253, r12251, r12252, MPFR_RNDN);
        return mpfr_get_d(r12253, MPFR_RNDN);
}

