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

char *name = "expm1 (example 3.7)";

double f_if(float x) {
        float r6237175 = x;
        float r6237176 = exp(r6237175);
        float r6237177 = 1;
        float r6237178 = r6237176 - r6237177;
        return r6237178;
}

double f_id(double x) {
        double r6237179 = x;
        double r6237180 = exp(r6237179);
        double r6237181 = 1;
        double r6237182 = r6237180 - r6237181;
        return r6237182;
}


double f_of(float x) {
        float r6237183 = x;
        float r6237184 = r6237183 * r6237183;
        float r6237185 = 1/2;
        float r6237186 = 1/6;
        float r6237187 = r6237186 * r6237183;
        float r6237188 = r6237185 + r6237187;
        float r6237189 = r6237184 * r6237188;
        float r6237190 = r6237189 + r6237183;
        return r6237190;
}

double f_od(double x) {
        double r6237191 = x;
        double r6237192 = r6237191 * r6237191;
        double r6237193 = 1/2;
        double r6237194 = 1/6;
        double r6237195 = r6237194 * r6237191;
        double r6237196 = r6237193 + r6237195;
        double r6237197 = r6237192 * r6237196;
        double r6237198 = r6237197 + r6237191;
        return r6237198;
}

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 r6237199, r6237200, r6237201, r6237202;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r6237199);
        mpfr_init(r6237200);
        mpfr_init_set_str(r6237201, "1", 10, MPFR_RNDN);
        mpfr_init(r6237202);
}

double f_im(double x) {
        mpfr_set_d(r6237199, x, MPFR_RNDN);
        mpfr_exp(r6237200, r6237199, MPFR_RNDN);
        ;
        mpfr_sub(r6237202, r6237200, r6237201, MPFR_RNDN);
        return mpfr_get_d(r6237202, MPFR_RNDN);
}

static mpfr_t r6237203, r6237204, r6237205, r6237206, r6237207, r6237208, r6237209, r6237210;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r6237203);
        mpfr_init(r6237204);
        mpfr_init_set_str(r6237205, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r6237206, "1/6", 10, MPFR_RNDN);
        mpfr_init(r6237207);
        mpfr_init(r6237208);
        mpfr_init(r6237209);
        mpfr_init(r6237210);
}

double f_fm(double x) {
        mpfr_set_d(r6237203, x, MPFR_RNDN);
        mpfr_mul(r6237204, r6237203, r6237203, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r6237207, r6237206, r6237203, MPFR_RNDN);
        mpfr_add(r6237208, r6237205, r6237207, MPFR_RNDN);
        mpfr_mul(r6237209, r6237204, r6237208, MPFR_RNDN);
        mpfr_add(r6237210, r6237209, r6237203, MPFR_RNDN);
        return mpfr_get_d(r6237210, MPFR_RNDN);
}

static mpfr_t r6237211, r6237212, r6237213, r6237214, r6237215, r6237216, r6237217, r6237218;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r6237211);
        mpfr_init(r6237212);
        mpfr_init_set_str(r6237213, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r6237214, "1/6", 10, MPFR_RNDN);
        mpfr_init(r6237215);
        mpfr_init(r6237216);
        mpfr_init(r6237217);
        mpfr_init(r6237218);
}

double f_dm(double x) {
        mpfr_set_d(r6237211, x, MPFR_RNDN);
        mpfr_mul(r6237212, r6237211, r6237211, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r6237215, r6237214, r6237211, MPFR_RNDN);
        mpfr_add(r6237216, r6237213, r6237215, MPFR_RNDN);
        mpfr_mul(r6237217, r6237212, r6237216, MPFR_RNDN);
        mpfr_add(r6237218, r6237217, r6237211, MPFR_RNDN);
        return mpfr_get_d(r6237218, MPFR_RNDN);
}

