#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 r6214344 = x;
        float r6214345 = exp(r6214344);
        float r6214346 = 1;
        float r6214347 = r6214345 - r6214346;
        return r6214347;
}

double f_id(double x) {
        double r6214348 = x;
        double r6214349 = exp(r6214348);
        double r6214350 = 1;
        double r6214351 = r6214349 - r6214350;
        return r6214351;
}


double f_of(float x) {
        float r6214352 = x;
        float r6214353 = r6214352 * r6214352;
        float r6214354 = 1/2;
        float r6214355 = 1/6;
        float r6214356 = r6214355 * r6214352;
        float r6214357 = r6214354 + r6214356;
        float r6214358 = r6214353 * r6214357;
        float r6214359 = r6214358 + r6214352;
        return r6214359;
}

double f_od(double x) {
        double r6214360 = x;
        double r6214361 = r6214360 * r6214360;
        double r6214362 = 1/2;
        double r6214363 = 1/6;
        double r6214364 = r6214363 * r6214360;
        double r6214365 = r6214362 + r6214364;
        double r6214366 = r6214361 * r6214365;
        double r6214367 = r6214366 + r6214360;
        return r6214367;
}

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 r6214368, r6214369, r6214370, r6214371;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r6214368);
        mpfr_init(r6214369);
        mpfr_init_set_str(r6214370, "1", 10, MPFR_RNDN);
        mpfr_init(r6214371);
}

double f_im(double x) {
        mpfr_set_d(r6214368, x, MPFR_RNDN);
        mpfr_exp(r6214369, r6214368, MPFR_RNDN);
        ;
        mpfr_sub(r6214371, r6214369, r6214370, MPFR_RNDN);
        return mpfr_get_d(r6214371, MPFR_RNDN);
}

static mpfr_t r6214372, r6214373, r6214374, r6214375, r6214376, r6214377, r6214378, r6214379;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r6214372);
        mpfr_init(r6214373);
        mpfr_init_set_str(r6214374, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r6214375, "1/6", 10, MPFR_RNDN);
        mpfr_init(r6214376);
        mpfr_init(r6214377);
        mpfr_init(r6214378);
        mpfr_init(r6214379);
}

double f_fm(double x) {
        mpfr_set_d(r6214372, x, MPFR_RNDN);
        mpfr_mul(r6214373, r6214372, r6214372, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r6214376, r6214375, r6214372, MPFR_RNDN);
        mpfr_add(r6214377, r6214374, r6214376, MPFR_RNDN);
        mpfr_mul(r6214378, r6214373, r6214377, MPFR_RNDN);
        mpfr_add(r6214379, r6214378, r6214372, MPFR_RNDN);
        return mpfr_get_d(r6214379, MPFR_RNDN);
}

static mpfr_t r6214380, r6214381, r6214382, r6214383, r6214384, r6214385, r6214386, r6214387;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r6214380);
        mpfr_init(r6214381);
        mpfr_init_set_str(r6214382, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r6214383, "1/6", 10, MPFR_RNDN);
        mpfr_init(r6214384);
        mpfr_init(r6214385);
        mpfr_init(r6214386);
        mpfr_init(r6214387);
}

double f_dm(double x) {
        mpfr_set_d(r6214380, x, MPFR_RNDN);
        mpfr_mul(r6214381, r6214380, r6214380, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r6214384, r6214383, r6214380, MPFR_RNDN);
        mpfr_add(r6214385, r6214382, r6214384, MPFR_RNDN);
        mpfr_mul(r6214386, r6214381, r6214385, MPFR_RNDN);
        mpfr_add(r6214387, r6214386, r6214380, MPFR_RNDN);
        return mpfr_get_d(r6214387, MPFR_RNDN);
}

