#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 r51028 = d1;
        float r51029 = 3;
        float r51030 = r51028 * r51029;
        float r51031 = d2;
        float r51032 = r51028 * r51031;
        float r51033 = r51030 + r51032;
        float r51034 = d3;
        float r51035 = r51028 * r51034;
        float r51036 = r51033 + r51035;
        return r51036;
}

double f_id(double d1, double d2, double d3) {
        double r51037 = d1;
        double r51038 = 3;
        double r51039 = r51037 * r51038;
        double r51040 = d2;
        double r51041 = r51037 * r51040;
        double r51042 = r51039 + r51041;
        double r51043 = d3;
        double r51044 = r51037 * r51043;
        double r51045 = r51042 + r51044;
        return r51045;
}


double f_of(float d1, float d2, float d3) {
        float r51046 = d1;
        float r51047 = 3;
        float r51048 = r51046 * r51047;
        float r51049 = d2;
        float r51050 = r51046 * r51049;
        float r51051 = r51048 + r51050;
        float r51052 = d3;
        float r51053 = r51046 * r51052;
        float r51054 = r51051 + r51053;
        return r51054;
}

double f_od(double d1, double d2, double d3) {
        double r51055 = d1;
        double r51056 = 3;
        double r51057 = r51055 * r51056;
        double r51058 = d2;
        double r51059 = r51055 * r51058;
        double r51060 = r51057 + r51059;
        double r51061 = d3;
        double r51062 = r51055 * r51061;
        double r51063 = r51060 + r51062;
        return r51063;
}

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 r51064, r51065, r51066, r51067, r51068, r51069, r51070, r51071, r51072;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r51064);
        mpfr_init_set_str(r51065, "3", 10, MPFR_RNDN);
        mpfr_init(r51066);
        mpfr_init(r51067);
        mpfr_init(r51068);
        mpfr_init(r51069);
        mpfr_init(r51070);
        mpfr_init(r51071);
        mpfr_init(r51072);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r51064, d1, MPFR_RNDN);
        ;
        mpfr_mul(r51066, r51064, r51065, MPFR_RNDN);
        mpfr_set_d(r51067, d2, MPFR_RNDN);
        mpfr_mul(r51068, r51064, r51067, MPFR_RNDN);
        mpfr_add(r51069, r51066, r51068, MPFR_RNDN);
        mpfr_set_d(r51070, d3, MPFR_RNDN);
        mpfr_mul(r51071, r51064, r51070, MPFR_RNDN);
        mpfr_add(r51072, r51069, r51071, MPFR_RNDN);
        return mpfr_get_d(r51072, MPFR_RNDN);
}

static mpfr_t r51073, r51074, r51075, r51076, r51077, r51078, r51079, r51080, r51081;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r51073);
        mpfr_init_set_str(r51074, "3", 10, MPFR_RNDN);
        mpfr_init(r51075);
        mpfr_init(r51076);
        mpfr_init(r51077);
        mpfr_init(r51078);
        mpfr_init(r51079);
        mpfr_init(r51080);
        mpfr_init(r51081);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r51073, d1, MPFR_RNDN);
        ;
        mpfr_mul(r51075, r51073, r51074, MPFR_RNDN);
        mpfr_set_d(r51076, d2, MPFR_RNDN);
        mpfr_mul(r51077, r51073, r51076, MPFR_RNDN);
        mpfr_add(r51078, r51075, r51077, MPFR_RNDN);
        mpfr_set_d(r51079, d3, MPFR_RNDN);
        mpfr_mul(r51080, r51073, r51079, MPFR_RNDN);
        mpfr_add(r51081, r51078, r51080, MPFR_RNDN);
        return mpfr_get_d(r51081, MPFR_RNDN);
}

static mpfr_t r51082, r51083, r51084, r51085, r51086, r51087, r51088, r51089, r51090;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r51082);
        mpfr_init_set_str(r51083, "3", 10, MPFR_RNDN);
        mpfr_init(r51084);
        mpfr_init(r51085);
        mpfr_init(r51086);
        mpfr_init(r51087);
        mpfr_init(r51088);
        mpfr_init(r51089);
        mpfr_init(r51090);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r51082, d1, MPFR_RNDN);
        ;
        mpfr_mul(r51084, r51082, r51083, MPFR_RNDN);
        mpfr_set_d(r51085, d2, MPFR_RNDN);
        mpfr_mul(r51086, r51082, r51085, MPFR_RNDN);
        mpfr_add(r51087, r51084, r51086, MPFR_RNDN);
        mpfr_set_d(r51088, d3, MPFR_RNDN);
        mpfr_mul(r51089, r51082, r51088, MPFR_RNDN);
        mpfr_add(r51090, r51087, r51089, MPFR_RNDN);
        return mpfr_get_d(r51090, MPFR_RNDN);
}

