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

char *name = "Kahan's exp quotient";

double f_if(float x) {
        float r9902 = x;
        float r9903 = exp(r9902);
        float r9904 = 1;
        float r9905 = r9903 - r9904;
        float r9906 = r9905 / r9902;
        return r9906;
}

double f_id(double x) {
        double r9907 = x;
        double r9908 = exp(r9907);
        double r9909 = 1;
        double r9910 = r9908 - r9909;
        double r9911 = r9910 / r9907;
        return r9911;
}


double f_of(float x) {
        float r9912 = x;
        float r9913 = expm1(r9912);
        float r9914 = r9913 / r9912;
        return r9914;
}

double f_od(double x) {
        double r9915 = x;
        double r9916 = expm1(r9915);
        double r9917 = r9916 / r9915;
        return r9917;
}

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 r9918, r9919, r9920, r9921, r9922;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9918);
        mpfr_init(r9919);
        mpfr_init_set_str(r9920, "1", 10, MPFR_RNDN);
        mpfr_init(r9921);
        mpfr_init(r9922);
}

double f_im(double x) {
        mpfr_set_d(r9918, x, MPFR_RNDN);
        mpfr_exp(r9919, r9918, MPFR_RNDN);
        ;
        mpfr_sub(r9921, r9919, r9920, MPFR_RNDN);
        mpfr_div(r9922, r9921, r9918, MPFR_RNDN);
        return mpfr_get_d(r9922, MPFR_RNDN);
}

static mpfr_t r9923, r9924, r9925;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9923);
        mpfr_init(r9924);
        mpfr_init(r9925);
}

double f_fm(double x) {
        mpfr_set_d(r9923, x, MPFR_RNDN);
        mpfr_expm1(r9924, r9923, MPFR_RNDN);
        mpfr_div(r9925, r9924, r9923, MPFR_RNDN);
        return mpfr_get_d(r9925, MPFR_RNDN);
}

static mpfr_t r9926, r9927, r9928;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9926);
        mpfr_init(r9927);
        mpfr_init(r9928);
}

double f_dm(double x) {
        mpfr_set_d(r9926, x, MPFR_RNDN);
        mpfr_expm1(r9927, r9926, MPFR_RNDN);
        mpfr_div(r9928, r9927, r9926, MPFR_RNDN);
        return mpfr_get_d(r9928, MPFR_RNDN);
}

