#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 r12484 = d1;
        float r12485 = 3;
        float r12486 = r12484 * r12485;
        float r12487 = d2;
        float r12488 = r12484 * r12487;
        float r12489 = r12486 + r12488;
        float r12490 = d3;
        float r12491 = r12484 * r12490;
        float r12492 = r12489 + r12491;
        return r12492;
}

double f_id(double d1, double d2, double d3) {
        double r12493 = d1;
        double r12494 = 3;
        double r12495 = r12493 * r12494;
        double r12496 = d2;
        double r12497 = r12493 * r12496;
        double r12498 = r12495 + r12497;
        double r12499 = d3;
        double r12500 = r12493 * r12499;
        double r12501 = r12498 + r12500;
        return r12501;
}


double f_of(float d1, float d2, float d3) {
        float r12502 = d1;
        float r12503 = 3;
        float r12504 = d2;
        float r12505 = r12503 + r12504;
        float r12506 = d3;
        float r12507 = r12506 * r12502;
        float r12508 = fma(r12502, r12505, r12507);
        return r12508;
}

double f_od(double d1, double d2, double d3) {
        double r12509 = d1;
        double r12510 = 3;
        double r12511 = d2;
        double r12512 = r12510 + r12511;
        double r12513 = d3;
        double r12514 = r12513 * r12509;
        double r12515 = fma(r12509, r12512, r12514);
        return r12515;
}

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 r12516, r12517, r12518, r12519, r12520, r12521, r12522, r12523, r12524;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12516);
        mpfr_init_set_str(r12517, "3", 10, MPFR_RNDN);
        mpfr_init(r12518);
        mpfr_init(r12519);
        mpfr_init(r12520);
        mpfr_init(r12521);
        mpfr_init(r12522);
        mpfr_init(r12523);
        mpfr_init(r12524);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r12516, d1, MPFR_RNDN);
        ;
        mpfr_mul(r12518, r12516, r12517, MPFR_RNDN);
        mpfr_set_d(r12519, d2, MPFR_RNDN);
        mpfr_mul(r12520, r12516, r12519, MPFR_RNDN);
        mpfr_add(r12521, r12518, r12520, MPFR_RNDN);
        mpfr_set_d(r12522, d3, MPFR_RNDN);
        mpfr_mul(r12523, r12516, r12522, MPFR_RNDN);
        mpfr_add(r12524, r12521, r12523, MPFR_RNDN);
        return mpfr_get_d(r12524, MPFR_RNDN);
}

static mpfr_t r12525, r12526, r12527, r12528, r12529, r12530, r12531;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12525);
        mpfr_init_set_str(r12526, "3", 10, MPFR_RNDN);
        mpfr_init(r12527);
        mpfr_init(r12528);
        mpfr_init(r12529);
        mpfr_init(r12530);
        mpfr_init(r12531);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r12525, d1, MPFR_RNDN);
        ;
        mpfr_set_d(r12527, d2, MPFR_RNDN);
        mpfr_add(r12528, r12526, r12527, MPFR_RNDN);
        mpfr_set_d(r12529, d3, MPFR_RNDN);
        mpfr_mul(r12530, r12529, r12525, MPFR_RNDN);
        mpfr_fma(r12531, r12525, r12528, r12530, MPFR_RNDN);
        return mpfr_get_d(r12531, MPFR_RNDN);
}

static mpfr_t r12532, r12533, r12534, r12535, r12536, r12537, r12538;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12532);
        mpfr_init_set_str(r12533, "3", 10, MPFR_RNDN);
        mpfr_init(r12534);
        mpfr_init(r12535);
        mpfr_init(r12536);
        mpfr_init(r12537);
        mpfr_init(r12538);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r12532, d1, MPFR_RNDN);
        ;
        mpfr_set_d(r12534, d2, MPFR_RNDN);
        mpfr_add(r12535, r12533, r12534, MPFR_RNDN);
        mpfr_set_d(r12536, d3, MPFR_RNDN);
        mpfr_mul(r12537, r12536, r12532, MPFR_RNDN);
        mpfr_fma(r12538, r12532, r12535, r12537, MPFR_RNDN);
        return mpfr_get_d(r12538, MPFR_RNDN);
}

