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

char *name = "expq3 (problem 3.4.2)";

double f_if(float a, float b, float eps) {
        float r26562 = eps;
        float r26563 = a;
        float r26564 = b;
        float r26565 = r26563 + r26564;
        float r26566 = r26565 * r26562;
        float r26567 = exp(r26566);
        float r26568 = 1;
        float r26569 = r26567 - r26568;
        float r26570 = r26562 * r26569;
        float r26571 = r26563 * r26562;
        float r26572 = exp(r26571);
        float r26573 = r26572 - r26568;
        float r26574 = r26564 * r26562;
        float r26575 = exp(r26574);
        float r26576 = r26575 - r26568;
        float r26577 = r26573 * r26576;
        float r26578 = r26570 / r26577;
        return r26578;
}

double f_id(double a, double b, double eps) {
        double r26579 = eps;
        double r26580 = a;
        double r26581 = b;
        double r26582 = r26580 + r26581;
        double r26583 = r26582 * r26579;
        double r26584 = exp(r26583);
        double r26585 = 1;
        double r26586 = r26584 - r26585;
        double r26587 = r26579 * r26586;
        double r26588 = r26580 * r26579;
        double r26589 = exp(r26588);
        double r26590 = r26589 - r26585;
        double r26591 = r26581 * r26579;
        double r26592 = exp(r26591);
        double r26593 = r26592 - r26585;
        double r26594 = r26590 * r26593;
        double r26595 = r26587 / r26594;
        return r26595;
}


double f_of(float a, float b, float eps) {
        float r26596 = b;
        float r26597 = a;
        float r26598 = r26596 + r26597;
        float r26599 = eps;
        float r26600 = r26598 * r26599;
        float r26601 = expm1(r26600);
        float r26602 = r26599 + r26599;
        float r26603 = r26599 * r26596;
        float r26604 = fma(r26596, r26602, r26603);
        float r26605 = expm1(r26604);
        float r26606 = r26599 * r26597;
        float r26607 = expm1(r26606);
        float r26608 = r26607 / r26599;
        float r26609 = r26605 * r26608;
        float r26610 = r26601 / r26609;
        float r26611 = 1;
        float r26612 = exp(r26603);
        float r26613 = r26611 + r26612;
        float r26614 = r26612 * r26612;
        float r26615 = r26613 + r26614;
        float r26616 = r26610 * r26615;
        float r26617 = -3.0522411179596246e-34;
        bool r26618 = r26616 <= r26617;
        float r26619 = r26611 / r26597;
        float r26620 = r26611 / r26596;
        float r26621 = r26619 + r26620;
        float r26622 = 1.850491661493059e-67;
        bool r26623 = r26616 <= r26622;
        float r26624 = r26623 ? r26616 : r26621;
        float r26625 = r26618 ? r26621 : r26624;
        return r26625;
}

double f_od(double a, double b, double eps) {
        double r26626 = b;
        double r26627 = a;
        double r26628 = r26626 + r26627;
        double r26629 = eps;
        double r26630 = r26628 * r26629;
        double r26631 = expm1(r26630);
        double r26632 = r26629 + r26629;
        double r26633 = r26629 * r26626;
        double r26634 = fma(r26626, r26632, r26633);
        double r26635 = expm1(r26634);
        double r26636 = r26629 * r26627;
        double r26637 = expm1(r26636);
        double r26638 = r26637 / r26629;
        double r26639 = r26635 * r26638;
        double r26640 = r26631 / r26639;
        double r26641 = 1;
        double r26642 = exp(r26633);
        double r26643 = r26641 + r26642;
        double r26644 = r26642 * r26642;
        double r26645 = r26643 + r26644;
        double r26646 = r26640 * r26645;
        double r26647 = -3.0522411179596246e-34;
        bool r26648 = r26646 <= r26647;
        double r26649 = r26641 / r26627;
        double r26650 = r26641 / r26626;
        double r26651 = r26649 + r26650;
        double r26652 = 1.850491661493059e-67;
        bool r26653 = r26646 <= r26652;
        double r26654 = r26653 ? r26646 : r26651;
        double r26655 = r26648 ? r26651 : r26654;
        return r26655;
}

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 r26656, r26657, r26658, r26659, r26660, r26661, r26662, r26663, r26664, r26665, r26666, r26667, r26668, r26669, r26670, r26671, r26672;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26656);
        mpfr_init(r26657);
        mpfr_init(r26658);
        mpfr_init(r26659);
        mpfr_init(r26660);
        mpfr_init(r26661);
        mpfr_init_set_str(r26662, "1", 10, MPFR_RNDN);
        mpfr_init(r26663);
        mpfr_init(r26664);
        mpfr_init(r26665);
        mpfr_init(r26666);
        mpfr_init(r26667);
        mpfr_init(r26668);
        mpfr_init(r26669);
        mpfr_init(r26670);
        mpfr_init(r26671);
        mpfr_init(r26672);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r26656, eps, MPFR_RNDN);
        mpfr_set_d(r26657, a, MPFR_RNDN);
        mpfr_set_d(r26658, b, MPFR_RNDN);
        mpfr_add(r26659, r26657, r26658, MPFR_RNDN);
        mpfr_mul(r26660, r26659, r26656, MPFR_RNDN);
        mpfr_exp(r26661, r26660, MPFR_RNDN);
        ;
        mpfr_sub(r26663, r26661, r26662, MPFR_RNDN);
        mpfr_mul(r26664, r26656, r26663, MPFR_RNDN);
        mpfr_mul(r26665, r26657, r26656, MPFR_RNDN);
        mpfr_exp(r26666, r26665, MPFR_RNDN);
        mpfr_sub(r26667, r26666, r26662, MPFR_RNDN);
        mpfr_mul(r26668, r26658, r26656, MPFR_RNDN);
        mpfr_exp(r26669, r26668, MPFR_RNDN);
        mpfr_sub(r26670, r26669, r26662, MPFR_RNDN);
        mpfr_mul(r26671, r26667, r26670, MPFR_RNDN);
        mpfr_div(r26672, r26664, r26671, MPFR_RNDN);
        return mpfr_get_d(r26672, MPFR_RNDN);
}

static mpfr_t r26673, r26674, r26675, r26676, r26677, r26678, r26679, r26680, r26681, r26682, r26683, r26684, r26685, r26686, r26687, r26688, r26689, r26690, r26691, r26692, r26693, r26694, r26695, r26696, r26697, r26698, r26699, r26700, r26701, r26702;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26673);
        mpfr_init(r26674);
        mpfr_init(r26675);
        mpfr_init(r26676);
        mpfr_init(r26677);
        mpfr_init(r26678);
        mpfr_init(r26679);
        mpfr_init(r26680);
        mpfr_init(r26681);
        mpfr_init(r26682);
        mpfr_init(r26683);
        mpfr_init(r26684);
        mpfr_init(r26685);
        mpfr_init(r26686);
        mpfr_init(r26687);
        mpfr_init_set_str(r26688, "1", 10, MPFR_RNDN);
        mpfr_init(r26689);
        mpfr_init(r26690);
        mpfr_init(r26691);
        mpfr_init(r26692);
        mpfr_init(r26693);
        mpfr_init_set_str(r26694, "-3.0522411179596246e-34", 10, MPFR_RNDN);
        mpfr_init(r26695);
        mpfr_init(r26696);
        mpfr_init(r26697);
        mpfr_init(r26698);
        mpfr_init_set_str(r26699, "1.850491661493059e-67", 10, MPFR_RNDN);
        mpfr_init(r26700);
        mpfr_init(r26701);
        mpfr_init(r26702);
}

double f_fm(double a, double b, double eps) {
        mpfr_set_d(r26673, b, MPFR_RNDN);
        mpfr_set_d(r26674, a, MPFR_RNDN);
        mpfr_add(r26675, r26673, r26674, MPFR_RNDN);
        mpfr_set_d(r26676, eps, MPFR_RNDN);
        mpfr_mul(r26677, r26675, r26676, MPFR_RNDN);
        mpfr_expm1(r26678, r26677, MPFR_RNDN);
        mpfr_add(r26679, r26676, r26676, MPFR_RNDN);
        mpfr_mul(r26680, r26676, r26673, MPFR_RNDN);
        mpfr_fma(r26681, r26673, r26679, r26680, MPFR_RNDN);
        mpfr_expm1(r26682, r26681, MPFR_RNDN);
        mpfr_mul(r26683, r26676, r26674, MPFR_RNDN);
        mpfr_expm1(r26684, r26683, MPFR_RNDN);
        mpfr_div(r26685, r26684, r26676, MPFR_RNDN);
        mpfr_mul(r26686, r26682, r26685, MPFR_RNDN);
        mpfr_div(r26687, r26678, r26686, MPFR_RNDN);
        ;
        mpfr_exp(r26689, r26680, MPFR_RNDN);
        mpfr_add(r26690, r26688, r26689, MPFR_RNDN);
        mpfr_mul(r26691, r26689, r26689, MPFR_RNDN);
        mpfr_add(r26692, r26690, r26691, MPFR_RNDN);
        mpfr_mul(r26693, r26687, r26692, MPFR_RNDN);
        ;
        mpfr_set_si(r26695, mpfr_cmp(r26693, r26694) <= 0, MPFR_RNDN);
        mpfr_div(r26696, r26688, r26674, MPFR_RNDN);
        mpfr_div(r26697, r26688, r26673, MPFR_RNDN);
        mpfr_add(r26698, r26696, r26697, MPFR_RNDN);
        ;
        mpfr_set_si(r26700, mpfr_cmp(r26693, r26699) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r26700, MPFR_RNDN)) { mpfr_set(r26701, r26693, MPFR_RNDN); } else { mpfr_set(r26701, r26698, MPFR_RNDN); };
        if (mpfr_get_si(r26695, MPFR_RNDN)) { mpfr_set(r26702, r26698, MPFR_RNDN); } else { mpfr_set(r26702, r26701, MPFR_RNDN); };
        return mpfr_get_d(r26702, MPFR_RNDN);
}

static mpfr_t r26703, r26704, r26705, r26706, r26707, r26708, r26709, r26710, r26711, r26712, r26713, r26714, r26715, r26716, r26717, r26718, r26719, r26720, r26721, r26722, r26723, r26724, r26725, r26726, r26727, r26728, r26729, r26730, r26731, r26732;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26703);
        mpfr_init(r26704);
        mpfr_init(r26705);
        mpfr_init(r26706);
        mpfr_init(r26707);
        mpfr_init(r26708);
        mpfr_init(r26709);
        mpfr_init(r26710);
        mpfr_init(r26711);
        mpfr_init(r26712);
        mpfr_init(r26713);
        mpfr_init(r26714);
        mpfr_init(r26715);
        mpfr_init(r26716);
        mpfr_init(r26717);
        mpfr_init_set_str(r26718, "1", 10, MPFR_RNDN);
        mpfr_init(r26719);
        mpfr_init(r26720);
        mpfr_init(r26721);
        mpfr_init(r26722);
        mpfr_init(r26723);
        mpfr_init_set_str(r26724, "-3.0522411179596246e-34", 10, MPFR_RNDN);
        mpfr_init(r26725);
        mpfr_init(r26726);
        mpfr_init(r26727);
        mpfr_init(r26728);
        mpfr_init_set_str(r26729, "1.850491661493059e-67", 10, MPFR_RNDN);
        mpfr_init(r26730);
        mpfr_init(r26731);
        mpfr_init(r26732);
}

double f_dm(double a, double b, double eps) {
        mpfr_set_d(r26703, b, MPFR_RNDN);
        mpfr_set_d(r26704, a, MPFR_RNDN);
        mpfr_add(r26705, r26703, r26704, MPFR_RNDN);
        mpfr_set_d(r26706, eps, MPFR_RNDN);
        mpfr_mul(r26707, r26705, r26706, MPFR_RNDN);
        mpfr_expm1(r26708, r26707, MPFR_RNDN);
        mpfr_add(r26709, r26706, r26706, MPFR_RNDN);
        mpfr_mul(r26710, r26706, r26703, MPFR_RNDN);
        mpfr_fma(r26711, r26703, r26709, r26710, MPFR_RNDN);
        mpfr_expm1(r26712, r26711, MPFR_RNDN);
        mpfr_mul(r26713, r26706, r26704, MPFR_RNDN);
        mpfr_expm1(r26714, r26713, MPFR_RNDN);
        mpfr_div(r26715, r26714, r26706, MPFR_RNDN);
        mpfr_mul(r26716, r26712, r26715, MPFR_RNDN);
        mpfr_div(r26717, r26708, r26716, MPFR_RNDN);
        ;
        mpfr_exp(r26719, r26710, MPFR_RNDN);
        mpfr_add(r26720, r26718, r26719, MPFR_RNDN);
        mpfr_mul(r26721, r26719, r26719, MPFR_RNDN);
        mpfr_add(r26722, r26720, r26721, MPFR_RNDN);
        mpfr_mul(r26723, r26717, r26722, MPFR_RNDN);
        ;
        mpfr_set_si(r26725, mpfr_cmp(r26723, r26724) <= 0, MPFR_RNDN);
        mpfr_div(r26726, r26718, r26704, MPFR_RNDN);
        mpfr_div(r26727, r26718, r26703, MPFR_RNDN);
        mpfr_add(r26728, r26726, r26727, MPFR_RNDN);
        ;
        mpfr_set_si(r26730, mpfr_cmp(r26723, r26729) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r26730, MPFR_RNDN)) { mpfr_set(r26731, r26723, MPFR_RNDN); } else { mpfr_set(r26731, r26728, MPFR_RNDN); };
        if (mpfr_get_si(r26725, MPFR_RNDN)) { mpfr_set(r26732, r26728, MPFR_RNDN); } else { mpfr_set(r26732, r26731, MPFR_RNDN); };
        return mpfr_get_d(r26732, MPFR_RNDN);
}

