#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 r50381 = d1;
        float r50382 = 3;
        float r50383 = r50381 * r50382;
        float r50384 = d2;
        float r50385 = r50381 * r50384;
        float r50386 = r50383 + r50385;
        float r50387 = d3;
        float r50388 = r50381 * r50387;
        float r50389 = r50386 + r50388;
        return r50389;
}

double f_id(double d1, double d2, double d3) {
        double r50390 = d1;
        double r50391 = 3;
        double r50392 = r50390 * r50391;
        double r50393 = d2;
        double r50394 = r50390 * r50393;
        double r50395 = r50392 + r50394;
        double r50396 = d3;
        double r50397 = r50390 * r50396;
        double r50398 = r50395 + r50397;
        return r50398;
}


double f_of(float d1, float d2, float d3) {
        float r50399 = d1;
        float r50400 = 3;
        float r50401 = r50399 * r50400;
        float r50402 = d2;
        float r50403 = r50399 * r50402;
        float r50404 = r50401 + r50403;
        float r50405 = d3;
        float r50406 = r50399 * r50405;
        float r50407 = r50404 + r50406;
        return r50407;
}

double f_od(double d1, double d2, double d3) {
        double r50408 = d1;
        double r50409 = 3;
        double r50410 = r50408 * r50409;
        double r50411 = d2;
        double r50412 = r50408 * r50411;
        double r50413 = r50410 + r50412;
        double r50414 = d3;
        double r50415 = r50408 * r50414;
        double r50416 = r50413 + r50415;
        return r50416;
}

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 r50417, r50418, r50419, r50420, r50421, r50422, r50423, r50424, r50425;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r50417);
        mpfr_init_set_str(r50418, "3", 10, MPFR_RNDN);
        mpfr_init(r50419);
        mpfr_init(r50420);
        mpfr_init(r50421);
        mpfr_init(r50422);
        mpfr_init(r50423);
        mpfr_init(r50424);
        mpfr_init(r50425);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r50417, d1, MPFR_RNDN);
        ;
        mpfr_mul(r50419, r50417, r50418, MPFR_RNDN);
        mpfr_set_d(r50420, d2, MPFR_RNDN);
        mpfr_mul(r50421, r50417, r50420, MPFR_RNDN);
        mpfr_add(r50422, r50419, r50421, MPFR_RNDN);
        mpfr_set_d(r50423, d3, MPFR_RNDN);
        mpfr_mul(r50424, r50417, r50423, MPFR_RNDN);
        mpfr_add(r50425, r50422, r50424, MPFR_RNDN);
        return mpfr_get_d(r50425, MPFR_RNDN);
}

static mpfr_t r50426, r50427, r50428, r50429, r50430, r50431, r50432, r50433, r50434;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r50426);
        mpfr_init_set_str(r50427, "3", 10, MPFR_RNDN);
        mpfr_init(r50428);
        mpfr_init(r50429);
        mpfr_init(r50430);
        mpfr_init(r50431);
        mpfr_init(r50432);
        mpfr_init(r50433);
        mpfr_init(r50434);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r50426, d1, MPFR_RNDN);
        ;
        mpfr_mul(r50428, r50426, r50427, MPFR_RNDN);
        mpfr_set_d(r50429, d2, MPFR_RNDN);
        mpfr_mul(r50430, r50426, r50429, MPFR_RNDN);
        mpfr_add(r50431, r50428, r50430, MPFR_RNDN);
        mpfr_set_d(r50432, d3, MPFR_RNDN);
        mpfr_mul(r50433, r50426, r50432, MPFR_RNDN);
        mpfr_add(r50434, r50431, r50433, MPFR_RNDN);
        return mpfr_get_d(r50434, MPFR_RNDN);
}

static mpfr_t r50435, r50436, r50437, r50438, r50439, r50440, r50441, r50442, r50443;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r50435);
        mpfr_init_set_str(r50436, "3", 10, MPFR_RNDN);
        mpfr_init(r50437);
        mpfr_init(r50438);
        mpfr_init(r50439);
        mpfr_init(r50440);
        mpfr_init(r50441);
        mpfr_init(r50442);
        mpfr_init(r50443);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r50435, d1, MPFR_RNDN);
        ;
        mpfr_mul(r50437, r50435, r50436, MPFR_RNDN);
        mpfr_set_d(r50438, d2, MPFR_RNDN);
        mpfr_mul(r50439, r50435, r50438, MPFR_RNDN);
        mpfr_add(r50440, r50437, r50439, MPFR_RNDN);
        mpfr_set_d(r50441, d3, MPFR_RNDN);
        mpfr_mul(r50442, r50435, r50441, MPFR_RNDN);
        mpfr_add(r50443, r50440, r50442, MPFR_RNDN);
        return mpfr_get_d(r50443, MPFR_RNDN);
}

