#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 r26956 = x;
        float r26957 = exp(r26956);
        float r26958 = 1;
        float r26959 = r26957 - r26958;
        return r26959;
}

double f_id(double x) {
        double r26960 = x;
        double r26961 = exp(r26960);
        double r26962 = 1;
        double r26963 = r26961 - r26962;
        return r26963;
}


double f_of(float x) {
        float r26964 = x;
        float r26965 = 1/2;
        float r26966 = 1/6;
        float r26967 = r26966 * r26964;
        float r26968 = r26965 + r26967;
        float r26969 = r26964 * r26964;
        float r26970 = r26968 * r26969;
        float r26971 = r26964 + r26970;
        return r26971;
}

double f_od(double x) {
        double r26972 = x;
        double r26973 = 1/2;
        double r26974 = 1/6;
        double r26975 = r26974 * r26972;
        double r26976 = r26973 + r26975;
        double r26977 = r26972 * r26972;
        double r26978 = r26976 * r26977;
        double r26979 = r26972 + r26978;
        return r26979;
}

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 r26980, r26981, r26982, r26983;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26980);
        mpfr_init(r26981);
        mpfr_init_set_str(r26982, "1", 10, MPFR_RNDN);
        mpfr_init(r26983);
}

double f_im(double x) {
        mpfr_set_d(r26980, x, MPFR_RNDN);
        mpfr_exp(r26981, r26980, MPFR_RNDN);
        ;
        mpfr_sub(r26983, r26981, r26982, MPFR_RNDN);
        return mpfr_get_d(r26983, MPFR_RNDN);
}

static mpfr_t r26984, r26985, r26986, r26987, r26988, r26989, r26990, r26991;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26984);
        mpfr_init_set_str(r26985, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r26986, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26987);
        mpfr_init(r26988);
        mpfr_init(r26989);
        mpfr_init(r26990);
        mpfr_init(r26991);
}

double f_fm(double x) {
        mpfr_set_d(r26984, x, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r26987, r26986, r26984, MPFR_RNDN);
        mpfr_add(r26988, r26985, r26987, MPFR_RNDN);
        mpfr_mul(r26989, r26984, r26984, MPFR_RNDN);
        mpfr_mul(r26990, r26988, r26989, MPFR_RNDN);
        mpfr_add(r26991, r26984, r26990, MPFR_RNDN);
        return mpfr_get_d(r26991, MPFR_RNDN);
}

static mpfr_t r26992, r26993, r26994, r26995, r26996, r26997, r26998, r26999;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26992);
        mpfr_init_set_str(r26993, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r26994, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26995);
        mpfr_init(r26996);
        mpfr_init(r26997);
        mpfr_init(r26998);
        mpfr_init(r26999);
}

double f_dm(double x) {
        mpfr_set_d(r26992, x, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r26995, r26994, r26992, MPFR_RNDN);
        mpfr_add(r26996, r26993, r26995, MPFR_RNDN);
        mpfr_mul(r26997, r26992, r26992, MPFR_RNDN);
        mpfr_mul(r26998, r26996, r26997, MPFR_RNDN);
        mpfr_add(r26999, r26992, r26998, MPFR_RNDN);
        return mpfr_get_d(r26999, MPFR_RNDN);
}

