#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 r51122 = d1;
        float r51123 = 3;
        float r51124 = r51122 * r51123;
        float r51125 = d2;
        float r51126 = r51122 * r51125;
        float r51127 = r51124 + r51126;
        float r51128 = d3;
        float r51129 = r51122 * r51128;
        float r51130 = r51127 + r51129;
        return r51130;
}

double f_id(double d1, double d2, double d3) {
        double r51131 = d1;
        double r51132 = 3;
        double r51133 = r51131 * r51132;
        double r51134 = d2;
        double r51135 = r51131 * r51134;
        double r51136 = r51133 + r51135;
        double r51137 = d3;
        double r51138 = r51131 * r51137;
        double r51139 = r51136 + r51138;
        return r51139;
}


double f_of(float d1, float d2, float d3) {
        float r51140 = d1;
        float r51141 = 3;
        float r51142 = r51140 * r51141;
        float r51143 = d2;
        float r51144 = r51140 * r51143;
        float r51145 = r51142 + r51144;
        float r51146 = d3;
        float r51147 = r51140 * r51146;
        float r51148 = r51145 + r51147;
        return r51148;
}

double f_od(double d1, double d2, double d3) {
        double r51149 = d1;
        double r51150 = 3;
        double r51151 = r51149 * r51150;
        double r51152 = d2;
        double r51153 = r51149 * r51152;
        double r51154 = r51151 + r51153;
        double r51155 = d3;
        double r51156 = r51149 * r51155;
        double r51157 = r51154 + r51156;
        return r51157;
}

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 r51158, r51159, r51160, r51161, r51162, r51163, r51164, r51165, r51166;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r51158);
        mpfr_init_set_str(r51159, "3", 10, MPFR_RNDN);
        mpfr_init(r51160);
        mpfr_init(r51161);
        mpfr_init(r51162);
        mpfr_init(r51163);
        mpfr_init(r51164);
        mpfr_init(r51165);
        mpfr_init(r51166);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r51158, d1, MPFR_RNDN);
        ;
        mpfr_mul(r51160, r51158, r51159, MPFR_RNDN);
        mpfr_set_d(r51161, d2, MPFR_RNDN);
        mpfr_mul(r51162, r51158, r51161, MPFR_RNDN);
        mpfr_add(r51163, r51160, r51162, MPFR_RNDN);
        mpfr_set_d(r51164, d3, MPFR_RNDN);
        mpfr_mul(r51165, r51158, r51164, MPFR_RNDN);
        mpfr_add(r51166, r51163, r51165, MPFR_RNDN);
        return mpfr_get_d(r51166, MPFR_RNDN);
}

static mpfr_t r51167, r51168, r51169, r51170, r51171, r51172, r51173, r51174, r51175;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r51167);
        mpfr_init_set_str(r51168, "3", 10, MPFR_RNDN);
        mpfr_init(r51169);
        mpfr_init(r51170);
        mpfr_init(r51171);
        mpfr_init(r51172);
        mpfr_init(r51173);
        mpfr_init(r51174);
        mpfr_init(r51175);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r51167, d1, MPFR_RNDN);
        ;
        mpfr_mul(r51169, r51167, r51168, MPFR_RNDN);
        mpfr_set_d(r51170, d2, MPFR_RNDN);
        mpfr_mul(r51171, r51167, r51170, MPFR_RNDN);
        mpfr_add(r51172, r51169, r51171, MPFR_RNDN);
        mpfr_set_d(r51173, d3, MPFR_RNDN);
        mpfr_mul(r51174, r51167, r51173, MPFR_RNDN);
        mpfr_add(r51175, r51172, r51174, MPFR_RNDN);
        return mpfr_get_d(r51175, MPFR_RNDN);
}

static mpfr_t r51176, r51177, r51178, r51179, r51180, r51181, r51182, r51183, r51184;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r51176);
        mpfr_init_set_str(r51177, "3", 10, MPFR_RNDN);
        mpfr_init(r51178);
        mpfr_init(r51179);
        mpfr_init(r51180);
        mpfr_init(r51181);
        mpfr_init(r51182);
        mpfr_init(r51183);
        mpfr_init(r51184);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r51176, d1, MPFR_RNDN);
        ;
        mpfr_mul(r51178, r51176, r51177, MPFR_RNDN);
        mpfr_set_d(r51179, d2, MPFR_RNDN);
        mpfr_mul(r51180, r51176, r51179, MPFR_RNDN);
        mpfr_add(r51181, r51178, r51180, MPFR_RNDN);
        mpfr_set_d(r51182, d3, MPFR_RNDN);
        mpfr_mul(r51183, r51176, r51182, MPFR_RNDN);
        mpfr_add(r51184, r51181, r51183, MPFR_RNDN);
        return mpfr_get_d(r51184, MPFR_RNDN);
}

