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

char *name = "Numeric.Log:$cexpm1 from log-domain-0.10.2.1, B";

double f_if(float x, float y) {
        float r45665 = x;
        float r45666 = y;
        float r45667 = r45665 * r45666;
        float r45668 = r45667 + r45665;
        float r45669 = r45668 + r45666;
        return r45669;
}

double f_id(double x, double y) {
        double r45670 = x;
        double r45671 = y;
        double r45672 = r45670 * r45671;
        double r45673 = r45672 + r45670;
        double r45674 = r45673 + r45671;
        return r45674;
}


double f_of(float x, float y) {
        float r45675 = x;
        float r45676 = y;
        float r45677 = r45675 * r45676;
        float r45678 = r45677 + r45675;
        float r45679 = r45678 + r45676;
        return r45679;
}

double f_od(double x, double y) {
        double r45680 = x;
        double r45681 = y;
        double r45682 = r45680 * r45681;
        double r45683 = r45682 + r45680;
        double r45684 = r45683 + r45681;
        return r45684;
}

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 r45685, r45686, r45687, r45688, r45689;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(656);
        mpfr_init(r45685);
        mpfr_init(r45686);
        mpfr_init(r45687);
        mpfr_init(r45688);
        mpfr_init(r45689);
}

double f_im(double x, double y) {
        mpfr_set_d(r45685, x, MPFR_RNDN);
        mpfr_set_d(r45686, y, MPFR_RNDN);
        mpfr_mul(r45687, r45685, r45686, MPFR_RNDN);
        mpfr_add(r45688, r45687, r45685, MPFR_RNDN);
        mpfr_add(r45689, r45688, r45686, MPFR_RNDN);
        return mpfr_get_d(r45689, MPFR_RNDN);
}

static mpfr_t r45690, r45691, r45692, r45693, r45694;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(656);
        mpfr_init(r45690);
        mpfr_init(r45691);
        mpfr_init(r45692);
        mpfr_init(r45693);
        mpfr_init(r45694);
}

double f_fm(double x, double y) {
        mpfr_set_d(r45690, x, MPFR_RNDN);
        mpfr_set_d(r45691, y, MPFR_RNDN);
        mpfr_mul(r45692, r45690, r45691, MPFR_RNDN);
        mpfr_add(r45693, r45692, r45690, MPFR_RNDN);
        mpfr_add(r45694, r45693, r45691, MPFR_RNDN);
        return mpfr_get_d(r45694, MPFR_RNDN);
}

static mpfr_t r45695, r45696, r45697, r45698, r45699;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(656);
        mpfr_init(r45695);
        mpfr_init(r45696);
        mpfr_init(r45697);
        mpfr_init(r45698);
        mpfr_init(r45699);
}

double f_dm(double x, double y) {
        mpfr_set_d(r45695, x, MPFR_RNDN);
        mpfr_set_d(r45696, y, MPFR_RNDN);
        mpfr_mul(r45697, r45695, r45696, MPFR_RNDN);
        mpfr_add(r45698, r45697, r45695, MPFR_RNDN);
        mpfr_add(r45699, r45698, r45696, MPFR_RNDN);
        return mpfr_get_d(r45699, MPFR_RNDN);
}

