#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 r45954 = x;
        float r45955 = 2.0;
        float r45956 = r45954 * r45955;
        float r45957 = r45956 * r45954;
        return r45957;
}

double f_id(double x) {
        double r45958 = x;
        double r45959 = 2.0;
        double r45960 = r45958 * r45959;
        double r45961 = r45960 * r45958;
        return r45961;
}


double f_of(float x) {
        float r45962 = x;
        float r45963 = 2.0;
        float r45964 = r45962 * r45963;
        float r45965 = r45964 * r45962;
        return r45965;
}

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

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 r45970, r45971, r45972, r45973;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45970);
        mpfr_init_set_str(r45971, "2.0", 10, MPFR_RNDN);
        mpfr_init(r45972);
        mpfr_init(r45973);
}

double f_im(double x) {
        mpfr_set_d(r45970, x, MPFR_RNDN);
        ;
        mpfr_mul(r45972, r45970, r45971, MPFR_RNDN);
        mpfr_mul(r45973, r45972, r45970, MPFR_RNDN);
        return mpfr_get_d(r45973, MPFR_RNDN);
}

static mpfr_t r45974, r45975, r45976, r45977;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45974);
        mpfr_init_set_str(r45975, "2.0", 10, MPFR_RNDN);
        mpfr_init(r45976);
        mpfr_init(r45977);
}

double f_fm(double x) {
        mpfr_set_d(r45974, x, MPFR_RNDN);
        ;
        mpfr_mul(r45976, r45974, r45975, MPFR_RNDN);
        mpfr_mul(r45977, r45976, r45974, MPFR_RNDN);
        return mpfr_get_d(r45977, MPFR_RNDN);
}

static mpfr_t r45978, r45979, r45980, r45981;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45978);
        mpfr_init_set_str(r45979, "2.0", 10, MPFR_RNDN);
        mpfr_init(r45980);
        mpfr_init(r45981);
}

double f_dm(double x) {
        mpfr_set_d(r45978, x, MPFR_RNDN);
        ;
        mpfr_mul(r45980, r45978, r45979, MPFR_RNDN);
        mpfr_mul(r45981, r45980, r45978, MPFR_RNDN);
        return mpfr_get_d(r45981, MPFR_RNDN);
}

