#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, A";

double f_if(float x) {
        float r45966 = x;
        float r45967 = 2.0;
        float r45968 = r45966 * r45967;
        float r45969 = r45968 * r45966;
        return r45969;
}

double f_id(double x) {
        double r45970 = x;
        double r45971 = 2.0;
        double r45972 = r45970 * r45971;
        double r45973 = r45972 * r45970;
        return r45973;
}


double f_of(float x) {
        float r45974 = x;
        float r45975 = 2.0;
        float r45976 = r45974 * r45975;
        float r45977 = r45976 * r45974;
        return r45977;
}

double f_od(double x) {
        double r45978 = x;
        double r45979 = 2.0;
        double r45980 = r45978 * r45979;
        double r45981 = r45980 * r45978;
        return r45981;
}

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 r45982, r45983, r45984, r45985;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45982);
        mpfr_init_set_str(r45983, "2.0", 10, MPFR_RNDN);
        mpfr_init(r45984);
        mpfr_init(r45985);
}

double f_im(double x) {
        mpfr_set_d(r45982, x, MPFR_RNDN);
        ;
        mpfr_mul(r45984, r45982, r45983, MPFR_RNDN);
        mpfr_mul(r45985, r45984, r45982, MPFR_RNDN);
        return mpfr_get_d(r45985, MPFR_RNDN);
}

static mpfr_t r45986, r45987, r45988, r45989;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45986);
        mpfr_init_set_str(r45987, "2.0", 10, MPFR_RNDN);
        mpfr_init(r45988);
        mpfr_init(r45989);
}

double f_fm(double x) {
        mpfr_set_d(r45986, x, MPFR_RNDN);
        ;
        mpfr_mul(r45988, r45986, r45987, MPFR_RNDN);
        mpfr_mul(r45989, r45988, r45986, MPFR_RNDN);
        return mpfr_get_d(r45989, MPFR_RNDN);
}

static mpfr_t r45990, r45991, r45992, r45993;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45990);
        mpfr_init_set_str(r45991, "2.0", 10, MPFR_RNDN);
        mpfr_init(r45992);
        mpfr_init(r45993);
}

double f_dm(double x) {
        mpfr_set_d(r45990, x, MPFR_RNDN);
        ;
        mpfr_mul(r45992, r45990, r45991, MPFR_RNDN);
        mpfr_mul(r45993, r45992, r45990, MPFR_RNDN);
        return mpfr_get_d(r45993, MPFR_RNDN);
}

