#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "simple fma test";

double f_if(float x, float y, float z) {
        float r38056 = x;
        float r38057 = y;
        float r38058 = z;
        float r38059 = fma(r38056, r38057, r38058);
        float r38060 = 1;
        float r38061 = r38056 * r38057;
        float r38062 = r38061 + r38058;
        float r38063 = r38060 + r38062;
        float r38064 = r38059 - r38063;
        return r38064;
}

double f_id(double x, double y, double z) {
        double r38065 = x;
        double r38066 = y;
        double r38067 = z;
        double r38068 = fma(r38065, r38066, r38067);
        double r38069 = 1;
        double r38070 = r38065 * r38066;
        double r38071 = r38070 + r38067;
        double r38072 = r38069 + r38071;
        double r38073 = r38068 - r38072;
        return r38073;
}


double f_of(float x, float y, float z) {
        float r38074 = x;
        float r38075 = y;
        float r38076 = z;
        float r38077 = fma(r38074, r38075, r38076);
        float r38078 = r38077 - r38076;
        float r38079 = 1;
        float r38080 = r38074 * r38075;
        float r38081 = r38079 + r38080;
        float r38082 = 3;
        float r38083 = pow(r38081, r38082);
        float r38084 = cbrt(r38083);
        float r38085 = r38078 - r38084;
        return r38085;
}

double f_od(double x, double y, double z) {
        double r38086 = x;
        double r38087 = y;
        double r38088 = z;
        double r38089 = fma(r38086, r38087, r38088);
        double r38090 = r38089 - r38088;
        double r38091 = 1;
        double r38092 = r38086 * r38087;
        double r38093 = r38091 + r38092;
        double r38094 = 3;
        double r38095 = pow(r38093, r38094);
        double r38096 = cbrt(r38095);
        double r38097 = r38090 - r38096;
        return r38097;
}

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 r38098, r38099, r38100, r38101, r38102, r38103, r38104, r38105, r38106;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r38098);
        mpfr_init(r38099);
        mpfr_init(r38100);
        mpfr_init(r38101);
        mpfr_init_set_str(r38102, "1", 10, MPFR_RNDN);
        mpfr_init(r38103);
        mpfr_init(r38104);
        mpfr_init(r38105);
        mpfr_init(r38106);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r38098, x, MPFR_RNDN);
        mpfr_set_d(r38099, y, MPFR_RNDN);
        mpfr_set_d(r38100, z, MPFR_RNDN);
        mpfr_fma(r38101, r38098, r38099, r38100, MPFR_RNDN);
        ;
        mpfr_mul(r38103, r38098, r38099, MPFR_RNDN);
        mpfr_add(r38104, r38103, r38100, MPFR_RNDN);
        mpfr_add(r38105, r38102, r38104, MPFR_RNDN);
        mpfr_sub(r38106, r38101, r38105, MPFR_RNDN);
        return mpfr_get_d(r38106, MPFR_RNDN);
}

static mpfr_t r38107, r38108, r38109, r38110, r38111, r38112, r38113, r38114, r38115, r38116, r38117, r38118;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r38107);
        mpfr_init(r38108);
        mpfr_init(r38109);
        mpfr_init(r38110);
        mpfr_init(r38111);
        mpfr_init_set_str(r38112, "1", 10, MPFR_RNDN);
        mpfr_init(r38113);
        mpfr_init(r38114);
        mpfr_init_set_str(r38115, "3", 10, MPFR_RNDN);
        mpfr_init(r38116);
        mpfr_init(r38117);
        mpfr_init(r38118);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r38107, x, MPFR_RNDN);
        mpfr_set_d(r38108, y, MPFR_RNDN);
        mpfr_set_d(r38109, z, MPFR_RNDN);
        mpfr_fma(r38110, r38107, r38108, r38109, MPFR_RNDN);
        mpfr_sub(r38111, r38110, r38109, MPFR_RNDN);
        ;
        mpfr_mul(r38113, r38107, r38108, MPFR_RNDN);
        mpfr_add(r38114, r38112, r38113, MPFR_RNDN);
        ;
        mpfr_pow(r38116, r38114, r38115, MPFR_RNDN);
        mpfr_cbrt(r38117, r38116, MPFR_RNDN);
        mpfr_sub(r38118, r38111, r38117, MPFR_RNDN);
        return mpfr_get_d(r38118, MPFR_RNDN);
}

static mpfr_t r38119, r38120, r38121, r38122, r38123, r38124, r38125, r38126, r38127, r38128, r38129, r38130;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r38119);
        mpfr_init(r38120);
        mpfr_init(r38121);
        mpfr_init(r38122);
        mpfr_init(r38123);
        mpfr_init_set_str(r38124, "1", 10, MPFR_RNDN);
        mpfr_init(r38125);
        mpfr_init(r38126);
        mpfr_init_set_str(r38127, "3", 10, MPFR_RNDN);
        mpfr_init(r38128);
        mpfr_init(r38129);
        mpfr_init(r38130);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r38119, x, MPFR_RNDN);
        mpfr_set_d(r38120, y, MPFR_RNDN);
        mpfr_set_d(r38121, z, MPFR_RNDN);
        mpfr_fma(r38122, r38119, r38120, r38121, MPFR_RNDN);
        mpfr_sub(r38123, r38122, r38121, MPFR_RNDN);
        ;
        mpfr_mul(r38125, r38119, r38120, MPFR_RNDN);
        mpfr_add(r38126, r38124, r38125, MPFR_RNDN);
        ;
        mpfr_pow(r38128, r38126, r38127, MPFR_RNDN);
        mpfr_cbrt(r38129, r38128, MPFR_RNDN);
        mpfr_sub(r38130, r38123, r38129, MPFR_RNDN);
        return mpfr_get_d(r38130, MPFR_RNDN);
}

