#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 r12926 = d1;
        float r12927 = 3;
        float r12928 = r12926 * r12927;
        float r12929 = d2;
        float r12930 = r12926 * r12929;
        float r12931 = r12928 + r12930;
        float r12932 = d3;
        float r12933 = r12926 * r12932;
        float r12934 = r12931 + r12933;
        return r12934;
}

double f_id(double d1, double d2, double d3) {
        double r12935 = d1;
        double r12936 = 3;
        double r12937 = r12935 * r12936;
        double r12938 = d2;
        double r12939 = r12935 * r12938;
        double r12940 = r12937 + r12939;
        double r12941 = d3;
        double r12942 = r12935 * r12941;
        double r12943 = r12940 + r12942;
        return r12943;
}


double f_of(float d1, float d2, float d3) {
        float r12944 = d1;
        float r12945 = 3;
        float r12946 = r12944 * r12945;
        float r12947 = d2;
        float r12948 = r12944 * r12947;
        float r12949 = r12946 + r12948;
        float r12950 = d3;
        float r12951 = r12944 * r12950;
        float r12952 = r12949 + r12951;
        return r12952;
}

double f_od(double d1, double d2, double d3) {
        double r12953 = d1;
        double r12954 = 3;
        double r12955 = r12953 * r12954;
        double r12956 = d2;
        double r12957 = r12953 * r12956;
        double r12958 = r12955 + r12957;
        double r12959 = d3;
        double r12960 = r12953 * r12959;
        double r12961 = r12958 + r12960;
        return r12961;
}

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 r12962, r12963, r12964, r12965, r12966, r12967, r12968, r12969, r12970;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12962);
        mpfr_init_set_str(r12963, "3", 10, MPFR_RNDN);
        mpfr_init(r12964);
        mpfr_init(r12965);
        mpfr_init(r12966);
        mpfr_init(r12967);
        mpfr_init(r12968);
        mpfr_init(r12969);
        mpfr_init(r12970);
}

double f_im(double d1, double d2, double d3) {
        mpfr_set_d(r12962, d1, MPFR_RNDN);
        ;
        mpfr_mul(r12964, r12962, r12963, MPFR_RNDN);
        mpfr_set_d(r12965, d2, MPFR_RNDN);
        mpfr_mul(r12966, r12962, r12965, MPFR_RNDN);
        mpfr_add(r12967, r12964, r12966, MPFR_RNDN);
        mpfr_set_d(r12968, d3, MPFR_RNDN);
        mpfr_mul(r12969, r12962, r12968, MPFR_RNDN);
        mpfr_add(r12970, r12967, r12969, MPFR_RNDN);
        return mpfr_get_d(r12970, MPFR_RNDN);
}

static mpfr_t r12971, r12972, r12973, r12974, r12975, r12976, r12977, r12978, r12979;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12971);
        mpfr_init_set_str(r12972, "3", 10, MPFR_RNDN);
        mpfr_init(r12973);
        mpfr_init(r12974);
        mpfr_init(r12975);
        mpfr_init(r12976);
        mpfr_init(r12977);
        mpfr_init(r12978);
        mpfr_init(r12979);
}

double f_fm(double d1, double d2, double d3) {
        mpfr_set_d(r12971, d1, MPFR_RNDN);
        ;
        mpfr_mul(r12973, r12971, r12972, MPFR_RNDN);
        mpfr_set_d(r12974, d2, MPFR_RNDN);
        mpfr_mul(r12975, r12971, r12974, MPFR_RNDN);
        mpfr_add(r12976, r12973, r12975, MPFR_RNDN);
        mpfr_set_d(r12977, d3, MPFR_RNDN);
        mpfr_mul(r12978, r12971, r12977, MPFR_RNDN);
        mpfr_add(r12979, r12976, r12978, MPFR_RNDN);
        return mpfr_get_d(r12979, MPFR_RNDN);
}

static mpfr_t r12980, r12981, r12982, r12983, r12984, r12985, r12986, r12987, r12988;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12980);
        mpfr_init_set_str(r12981, "3", 10, MPFR_RNDN);
        mpfr_init(r12982);
        mpfr_init(r12983);
        mpfr_init(r12984);
        mpfr_init(r12985);
        mpfr_init(r12986);
        mpfr_init(r12987);
        mpfr_init(r12988);
}

double f_dm(double d1, double d2, double d3) {
        mpfr_set_d(r12980, d1, MPFR_RNDN);
        ;
        mpfr_mul(r12982, r12980, r12981, MPFR_RNDN);
        mpfr_set_d(r12983, d2, MPFR_RNDN);
        mpfr_mul(r12984, r12980, r12983, MPFR_RNDN);
        mpfr_add(r12985, r12982, r12984, MPFR_RNDN);
        mpfr_set_d(r12986, d3, MPFR_RNDN);
        mpfr_mul(r12987, r12980, r12986, MPFR_RNDN);
        mpfr_add(r12988, r12985, r12987, MPFR_RNDN);
        return mpfr_get_d(r12988, MPFR_RNDN);
}

