#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 r46202 = x;
        float r46203 = 2.0;
        float r46204 = r46202 * r46203;
        float r46205 = r46204 * r46202;
        return r46205;
}

double f_id(double x) {
        double r46206 = x;
        double r46207 = 2.0;
        double r46208 = r46206 * r46207;
        double r46209 = r46208 * r46206;
        return r46209;
}


double f_of(float x) {
        float r46210 = x;
        float r46211 = 2.0;
        float r46212 = r46210 * r46211;
        float r46213 = r46212 * r46210;
        return r46213;
}

double f_od(double x) {
        double r46214 = x;
        double r46215 = 2.0;
        double r46216 = r46214 * r46215;
        double r46217 = r46216 * r46214;
        return r46217;
}

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 r46218, r46219, r46220, r46221;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r46218);
        mpfr_init_set_str(r46219, "2.0", 10, MPFR_RNDN);
        mpfr_init(r46220);
        mpfr_init(r46221);
}

double f_im(double x) {
        mpfr_set_d(r46218, x, MPFR_RNDN);
        ;
        mpfr_mul(r46220, r46218, r46219, MPFR_RNDN);
        mpfr_mul(r46221, r46220, r46218, MPFR_RNDN);
        return mpfr_get_d(r46221, MPFR_RNDN);
}

static mpfr_t r46222, r46223, r46224, r46225;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r46222);
        mpfr_init_set_str(r46223, "2.0", 10, MPFR_RNDN);
        mpfr_init(r46224);
        mpfr_init(r46225);
}

double f_fm(double x) {
        mpfr_set_d(r46222, x, MPFR_RNDN);
        ;
        mpfr_mul(r46224, r46222, r46223, MPFR_RNDN);
        mpfr_mul(r46225, r46224, r46222, MPFR_RNDN);
        return mpfr_get_d(r46225, MPFR_RNDN);
}

static mpfr_t r46226, r46227, r46228, r46229;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r46226);
        mpfr_init_set_str(r46227, "2.0", 10, MPFR_RNDN);
        mpfr_init(r46228);
        mpfr_init(r46229);
}

double f_dm(double x) {
        mpfr_set_d(r46226, x, MPFR_RNDN);
        ;
        mpfr_mul(r46228, r46226, r46227, MPFR_RNDN);
        mpfr_mul(r46229, r46228, r46226, MPFR_RNDN);
        return mpfr_get_d(r46229, MPFR_RNDN);
}

