#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 r47613 = x;
        float r47614 = exp(r47613);
        float r47615 = 1;
        float r47616 = r47614 - r47615;
        float r47617 = r47616 / r47613;
        return r47617;
}

double f_id(double x) {
        double r47618 = x;
        double r47619 = exp(r47618);
        double r47620 = 1;
        double r47621 = r47619 - r47620;
        double r47622 = r47621 / r47618;
        return r47622;
}


double f_of(float x) {
        float r47623 = x;
        float r47624 = -0.00014973358176513608;
        bool r47625 = r47623 <= r47624;
        float r47626 = exp(r47623);
        float r47627 = 1;
        float r47628 = r47626 - r47627;
        float r47629 = exp(r47628);
        float r47630 = log(r47629);
        float r47631 = r47630 / r47623;
        float r47632 = 1/6;
        float r47633 = 2;
        float r47634 = pow(r47623, r47633);
        float r47635 = r47632 * r47634;
        float r47636 = 1/2;
        float r47637 = r47636 * r47623;
        float r47638 = r47627 + r47637;
        float r47639 = r47635 + r47638;
        float r47640 = r47625 ? r47631 : r47639;
        return r47640;
}

double f_od(double x) {
        double r47641 = x;
        double r47642 = -0.00014973358176513608;
        bool r47643 = r47641 <= r47642;
        double r47644 = exp(r47641);
        double r47645 = 1;
        double r47646 = r47644 - r47645;
        double r47647 = exp(r47646);
        double r47648 = log(r47647);
        double r47649 = r47648 / r47641;
        double r47650 = 1/6;
        double r47651 = 2;
        double r47652 = pow(r47641, r47651);
        double r47653 = r47650 * r47652;
        double r47654 = 1/2;
        double r47655 = r47654 * r47641;
        double r47656 = r47645 + r47655;
        double r47657 = r47653 + r47656;
        double r47658 = r47643 ? r47649 : r47657;
        return r47658;
}

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 r47659, r47660, r47661, r47662, r47663;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r47659);
        mpfr_init(r47660);
        mpfr_init_set_str(r47661, "1", 10, MPFR_RNDN);
        mpfr_init(r47662);
        mpfr_init(r47663);
}

double f_im(double x) {
        mpfr_set_d(r47659, x, MPFR_RNDN);
        mpfr_exp(r47660, r47659, MPFR_RNDN);
        ;
        mpfr_sub(r47662, r47660, r47661, MPFR_RNDN);
        mpfr_div(r47663, r47662, r47659, MPFR_RNDN);
        return mpfr_get_d(r47663, MPFR_RNDN);
}

static mpfr_t r47664, r47665, r47666, r47667, r47668, r47669, r47670, r47671, r47672, r47673, r47674, r47675, r47676, r47677, r47678, r47679, r47680, r47681;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r47664);
        mpfr_init_set_str(r47665, "-0.00014973358176513608", 10, MPFR_RNDN);
        mpfr_init(r47666);
        mpfr_init(r47667);
        mpfr_init_set_str(r47668, "1", 10, MPFR_RNDN);
        mpfr_init(r47669);
        mpfr_init(r47670);
        mpfr_init(r47671);
        mpfr_init(r47672);
        mpfr_init_set_str(r47673, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r47674, "2", 10, MPFR_RNDN);
        mpfr_init(r47675);
        mpfr_init(r47676);
        mpfr_init_set_str(r47677, "1/2", 10, MPFR_RNDN);
        mpfr_init(r47678);
        mpfr_init(r47679);
        mpfr_init(r47680);
        mpfr_init(r47681);
}

double f_fm(double x) {
        mpfr_set_d(r47664, x, MPFR_RNDN);
        ;
        mpfr_set_si(r47666, mpfr_cmp(r47664, r47665) <= 0, MPFR_RNDN);
        mpfr_exp(r47667, r47664, MPFR_RNDN);
        ;
        mpfr_sub(r47669, r47667, r47668, MPFR_RNDN);
        mpfr_exp(r47670, r47669, MPFR_RNDN);
        mpfr_log(r47671, r47670, MPFR_RNDN);
        mpfr_div(r47672, r47671, r47664, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r47675, r47664, r47674, MPFR_RNDN);
        mpfr_mul(r47676, r47673, r47675, MPFR_RNDN);
        ;
        mpfr_mul(r47678, r47677, r47664, MPFR_RNDN);
        mpfr_add(r47679, r47668, r47678, MPFR_RNDN);
        mpfr_add(r47680, r47676, r47679, MPFR_RNDN);
        if (mpfr_get_si(r47666, MPFR_RNDN)) { mpfr_set(r47681, r47672, MPFR_RNDN); } else { mpfr_set(r47681, r47680, MPFR_RNDN); };
        return mpfr_get_d(r47681, MPFR_RNDN);
}

static mpfr_t r47682, r47683, r47684, r47685, r47686, r47687, r47688, r47689, r47690, r47691, r47692, r47693, r47694, r47695, r47696, r47697, r47698, r47699;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r47682);
        mpfr_init_set_str(r47683, "-0.00014973358176513608", 10, MPFR_RNDN);
        mpfr_init(r47684);
        mpfr_init(r47685);
        mpfr_init_set_str(r47686, "1", 10, MPFR_RNDN);
        mpfr_init(r47687);
        mpfr_init(r47688);
        mpfr_init(r47689);
        mpfr_init(r47690);
        mpfr_init_set_str(r47691, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r47692, "2", 10, MPFR_RNDN);
        mpfr_init(r47693);
        mpfr_init(r47694);
        mpfr_init_set_str(r47695, "1/2", 10, MPFR_RNDN);
        mpfr_init(r47696);
        mpfr_init(r47697);
        mpfr_init(r47698);
        mpfr_init(r47699);
}

double f_dm(double x) {
        mpfr_set_d(r47682, x, MPFR_RNDN);
        ;
        mpfr_set_si(r47684, mpfr_cmp(r47682, r47683) <= 0, MPFR_RNDN);
        mpfr_exp(r47685, r47682, MPFR_RNDN);
        ;
        mpfr_sub(r47687, r47685, r47686, MPFR_RNDN);
        mpfr_exp(r47688, r47687, MPFR_RNDN);
        mpfr_log(r47689, r47688, MPFR_RNDN);
        mpfr_div(r47690, r47689, r47682, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r47693, r47682, r47692, MPFR_RNDN);
        mpfr_mul(r47694, r47691, r47693, MPFR_RNDN);
        ;
        mpfr_mul(r47696, r47695, r47682, MPFR_RNDN);
        mpfr_add(r47697, r47686, r47696, MPFR_RNDN);
        mpfr_add(r47698, r47694, r47697, MPFR_RNDN);
        if (mpfr_get_si(r47684, MPFR_RNDN)) { mpfr_set(r47699, r47690, MPFR_RNDN); } else { mpfr_set(r47699, r47698, MPFR_RNDN); };
        return mpfr_get_d(r47699, MPFR_RNDN);
}

