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

char *name = "Harley's example";

double f_if(float c_p, float c_n, float t, float s) {
        float r27511 = 1;
        float r27512 = s;
        float r27513 = -r27512;
        float r27514 = exp(r27513);
        float r27515 = r27511 + r27514;
        float r27516 = r27511 / r27515;
        float r27517 = c_p;
        float r27518 = pow(r27516, r27517);
        float r27519 = r27511 - r27516;
        float r27520 = c_n;
        float r27521 = pow(r27519, r27520);
        float r27522 = r27518 * r27521;
        float r27523 = t;
        float r27524 = -r27523;
        float r27525 = exp(r27524);
        float r27526 = r27511 + r27525;
        float r27527 = r27511 / r27526;
        float r27528 = pow(r27527, r27517);
        float r27529 = r27511 - r27527;
        float r27530 = pow(r27529, r27520);
        float r27531 = r27528 * r27530;
        float r27532 = r27522 / r27531;
        return r27532;
}

double f_id(double c_p, double c_n, double t, double s) {
        double r27533 = 1;
        double r27534 = s;
        double r27535 = -r27534;
        double r27536 = exp(r27535);
        double r27537 = r27533 + r27536;
        double r27538 = r27533 / r27537;
        double r27539 = c_p;
        double r27540 = pow(r27538, r27539);
        double r27541 = r27533 - r27538;
        double r27542 = c_n;
        double r27543 = pow(r27541, r27542);
        double r27544 = r27540 * r27543;
        double r27545 = t;
        double r27546 = -r27545;
        double r27547 = exp(r27546);
        double r27548 = r27533 + r27547;
        double r27549 = r27533 / r27548;
        double r27550 = pow(r27549, r27539);
        double r27551 = r27533 - r27549;
        double r27552 = pow(r27551, r27542);
        double r27553 = r27550 * r27552;
        double r27554 = r27544 / r27553;
        return r27554;
}


double f_of(float c_p, float c_n, float t, float s) {
        float r27555 = 1;
        float r27556 = s;
        float r27557 = -r27556;
        float r27558 = exp(r27557);
        float r27559 = r27555 + r27558;
        float r27560 = r27555 / r27559;
        float r27561 = r27555 - r27560;
        float r27562 = c_n;
        float r27563 = pow(r27561, r27562);
        float r27564 = t;
        float r27565 = -r27564;
        float r27566 = exp(r27565);
        float r27567 = r27555 + r27566;
        float r27568 = r27555 / r27567;
        float r27569 = r27555 - r27568;
        float r27570 = pow(r27569, r27562);
        float r27571 = c_p;
        float r27572 = 1/2;
        float r27573 = log(r27572);
        float r27574 = fma(r27572, r27564, r27573);
        float r27575 = fma(r27571, r27574, r27555);
        float r27576 = pow(r27560, r27571);
        float r27577 = r27575 / r27576;
        float r27578 = r27570 * r27577;
        float r27579 = r27563 / r27578;
        float r27580 = 1.0000000000000004;
        bool r27581 = r27579 <= r27580;
        float r27582 = log1p(r27566);
        float r27583 = log1p(r27558);
        float r27584 = r27582 - r27583;
        float r27585 = 1/8;
        float r27586 = fma(r27585, r27556, r27572);
        float r27587 = r27564 * r27572;
        float r27588 = fma(r27557, r27586, r27587);
        float r27589 = r27562 * r27588;
        float r27590 = fma(r27571, r27584, r27589);
        float r27591 = exp(r27590);
        float r27592 = r27581 ? r27579 : r27591;
        return r27592;
}

double f_od(double c_p, double c_n, double t, double s) {
        double r27593 = 1;
        double r27594 = s;
        double r27595 = -r27594;
        double r27596 = exp(r27595);
        double r27597 = r27593 + r27596;
        double r27598 = r27593 / r27597;
        double r27599 = r27593 - r27598;
        double r27600 = c_n;
        double r27601 = pow(r27599, r27600);
        double r27602 = t;
        double r27603 = -r27602;
        double r27604 = exp(r27603);
        double r27605 = r27593 + r27604;
        double r27606 = r27593 / r27605;
        double r27607 = r27593 - r27606;
        double r27608 = pow(r27607, r27600);
        double r27609 = c_p;
        double r27610 = 1/2;
        double r27611 = log(r27610);
        double r27612 = fma(r27610, r27602, r27611);
        double r27613 = fma(r27609, r27612, r27593);
        double r27614 = pow(r27598, r27609);
        double r27615 = r27613 / r27614;
        double r27616 = r27608 * r27615;
        double r27617 = r27601 / r27616;
        double r27618 = 1.0000000000000004;
        bool r27619 = r27617 <= r27618;
        double r27620 = log1p(r27604);
        double r27621 = log1p(r27596);
        double r27622 = r27620 - r27621;
        double r27623 = 1/8;
        double r27624 = fma(r27623, r27594, r27610);
        double r27625 = r27602 * r27610;
        double r27626 = fma(r27595, r27624, r27625);
        double r27627 = r27600 * r27626;
        double r27628 = fma(r27609, r27622, r27627);
        double r27629 = exp(r27628);
        double r27630 = r27619 ? r27617 : r27629;
        return r27630;
}

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 r27631, r27632, r27633, r27634, r27635, r27636, r27637, r27638, r27639, r27640, r27641, r27642, r27643, r27644, r27645, r27646, r27647, r27648, r27649, r27650, r27651, r27652;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r27631, "1", 10, MPFR_RNDN);
        mpfr_init(r27632);
        mpfr_init(r27633);
        mpfr_init(r27634);
        mpfr_init(r27635);
        mpfr_init(r27636);
        mpfr_init(r27637);
        mpfr_init(r27638);
        mpfr_init(r27639);
        mpfr_init(r27640);
        mpfr_init(r27641);
        mpfr_init(r27642);
        mpfr_init(r27643);
        mpfr_init(r27644);
        mpfr_init(r27645);
        mpfr_init(r27646);
        mpfr_init(r27647);
        mpfr_init(r27648);
        mpfr_init(r27649);
        mpfr_init(r27650);
        mpfr_init(r27651);
        mpfr_init(r27652);
}

double f_im(double c_p, double c_n, double t, double s) {
        ;
        mpfr_set_d(r27632, s, MPFR_RNDN);
        mpfr_neg(r27633, r27632, MPFR_RNDN);
        mpfr_exp(r27634, r27633, MPFR_RNDN);
        mpfr_add(r27635, r27631, r27634, MPFR_RNDN);
        mpfr_div(r27636, r27631, r27635, MPFR_RNDN);
        mpfr_set_d(r27637, c_p, MPFR_RNDN);
        mpfr_pow(r27638, r27636, r27637, MPFR_RNDN);
        mpfr_sub(r27639, r27631, r27636, MPFR_RNDN);
        mpfr_set_d(r27640, c_n, MPFR_RNDN);
        mpfr_pow(r27641, r27639, r27640, MPFR_RNDN);
        mpfr_mul(r27642, r27638, r27641, MPFR_RNDN);
        mpfr_set_d(r27643, t, MPFR_RNDN);
        mpfr_neg(r27644, r27643, MPFR_RNDN);
        mpfr_exp(r27645, r27644, MPFR_RNDN);
        mpfr_add(r27646, r27631, r27645, MPFR_RNDN);
        mpfr_div(r27647, r27631, r27646, MPFR_RNDN);
        mpfr_pow(r27648, r27647, r27637, MPFR_RNDN);
        mpfr_sub(r27649, r27631, r27647, MPFR_RNDN);
        mpfr_pow(r27650, r27649, r27640, MPFR_RNDN);
        mpfr_mul(r27651, r27648, r27650, MPFR_RNDN);
        mpfr_div(r27652, r27642, r27651, MPFR_RNDN);
        return mpfr_get_d(r27652, MPFR_RNDN);
}

static mpfr_t r27653, r27654, r27655, r27656, r27657, r27658, r27659, r27660, r27661, r27662, r27663, r27664, r27665, r27666, r27667, r27668, r27669, r27670, r27671, r27672, r27673, r27674, r27675, r27676, r27677, r27678, r27679, r27680, r27681, r27682, r27683, r27684, r27685, r27686, r27687, r27688, r27689, r27690;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r27653, "1", 10, MPFR_RNDN);
        mpfr_init(r27654);
        mpfr_init(r27655);
        mpfr_init(r27656);
        mpfr_init(r27657);
        mpfr_init(r27658);
        mpfr_init(r27659);
        mpfr_init(r27660);
        mpfr_init(r27661);
        mpfr_init(r27662);
        mpfr_init(r27663);
        mpfr_init(r27664);
        mpfr_init(r27665);
        mpfr_init(r27666);
        mpfr_init(r27667);
        mpfr_init(r27668);
        mpfr_init(r27669);
        mpfr_init_set_str(r27670, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27671);
        mpfr_init(r27672);
        mpfr_init(r27673);
        mpfr_init(r27674);
        mpfr_init(r27675);
        mpfr_init(r27676);
        mpfr_init(r27677);
        mpfr_init_set_str(r27678, "1.0000000000000004", 10, MPFR_RNDN);
        mpfr_init(r27679);
        mpfr_init(r27680);
        mpfr_init(r27681);
        mpfr_init(r27682);
        mpfr_init_set_str(r27683, "1/8", 10, MPFR_RNDN);
        mpfr_init(r27684);
        mpfr_init(r27685);
        mpfr_init(r27686);
        mpfr_init(r27687);
        mpfr_init(r27688);
        mpfr_init(r27689);
        mpfr_init(r27690);
}

double f_fm(double c_p, double c_n, double t, double s) {
        ;
        mpfr_set_d(r27654, s, MPFR_RNDN);
        mpfr_neg(r27655, r27654, MPFR_RNDN);
        mpfr_exp(r27656, r27655, MPFR_RNDN);
        mpfr_add(r27657, r27653, r27656, MPFR_RNDN);
        mpfr_div(r27658, r27653, r27657, MPFR_RNDN);
        mpfr_sub(r27659, r27653, r27658, MPFR_RNDN);
        mpfr_set_d(r27660, c_n, MPFR_RNDN);
        mpfr_pow(r27661, r27659, r27660, MPFR_RNDN);
        mpfr_set_d(r27662, t, MPFR_RNDN);
        mpfr_neg(r27663, r27662, MPFR_RNDN);
        mpfr_exp(r27664, r27663, MPFR_RNDN);
        mpfr_add(r27665, r27653, r27664, MPFR_RNDN);
        mpfr_div(r27666, r27653, r27665, MPFR_RNDN);
        mpfr_sub(r27667, r27653, r27666, MPFR_RNDN);
        mpfr_pow(r27668, r27667, r27660, MPFR_RNDN);
        mpfr_set_d(r27669, c_p, MPFR_RNDN);
        ;
        mpfr_log(r27671, r27670, MPFR_RNDN);
        mpfr_fma(r27672, r27670, r27662, r27671, MPFR_RNDN);
        mpfr_fma(r27673, r27669, r27672, r27653, MPFR_RNDN);
        mpfr_pow(r27674, r27658, r27669, MPFR_RNDN);
        mpfr_div(r27675, r27673, r27674, MPFR_RNDN);
        mpfr_mul(r27676, r27668, r27675, MPFR_RNDN);
        mpfr_div(r27677, r27661, r27676, MPFR_RNDN);
        ;
        mpfr_set_si(r27679, mpfr_cmp(r27677, r27678) <= 0, MPFR_RNDN);
        mpfr_log1p(r27680, r27664, MPFR_RNDN);
        mpfr_log1p(r27681, r27656, MPFR_RNDN);
        mpfr_sub(r27682, r27680, r27681, MPFR_RNDN);
        ;
        mpfr_fma(r27684, r27683, r27654, r27670, MPFR_RNDN);
        mpfr_mul(r27685, r27662, r27670, MPFR_RNDN);
        mpfr_fma(r27686, r27655, r27684, r27685, MPFR_RNDN);
        mpfr_mul(r27687, r27660, r27686, MPFR_RNDN);
        mpfr_fma(r27688, r27669, r27682, r27687, MPFR_RNDN);
        mpfr_exp(r27689, r27688, MPFR_RNDN);
        if (mpfr_get_si(r27679, MPFR_RNDN)) { mpfr_set(r27690, r27677, MPFR_RNDN); } else { mpfr_set(r27690, r27689, MPFR_RNDN); };
        return mpfr_get_d(r27690, MPFR_RNDN);
}

static mpfr_t r27691, r27692, r27693, r27694, r27695, r27696, r27697, r27698, r27699, r27700, r27701, r27702, r27703, r27704, r27705, r27706, r27707, r27708, r27709, r27710, r27711, r27712, r27713, r27714, r27715, r27716, r27717, r27718, r27719, r27720, r27721, r27722, r27723, r27724, r27725, r27726, r27727, r27728;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r27691, "1", 10, MPFR_RNDN);
        mpfr_init(r27692);
        mpfr_init(r27693);
        mpfr_init(r27694);
        mpfr_init(r27695);
        mpfr_init(r27696);
        mpfr_init(r27697);
        mpfr_init(r27698);
        mpfr_init(r27699);
        mpfr_init(r27700);
        mpfr_init(r27701);
        mpfr_init(r27702);
        mpfr_init(r27703);
        mpfr_init(r27704);
        mpfr_init(r27705);
        mpfr_init(r27706);
        mpfr_init(r27707);
        mpfr_init_set_str(r27708, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27709);
        mpfr_init(r27710);
        mpfr_init(r27711);
        mpfr_init(r27712);
        mpfr_init(r27713);
        mpfr_init(r27714);
        mpfr_init(r27715);
        mpfr_init_set_str(r27716, "1.0000000000000004", 10, MPFR_RNDN);
        mpfr_init(r27717);
        mpfr_init(r27718);
        mpfr_init(r27719);
        mpfr_init(r27720);
        mpfr_init_set_str(r27721, "1/8", 10, MPFR_RNDN);
        mpfr_init(r27722);
        mpfr_init(r27723);
        mpfr_init(r27724);
        mpfr_init(r27725);
        mpfr_init(r27726);
        mpfr_init(r27727);
        mpfr_init(r27728);
}

double f_dm(double c_p, double c_n, double t, double s) {
        ;
        mpfr_set_d(r27692, s, MPFR_RNDN);
        mpfr_neg(r27693, r27692, MPFR_RNDN);
        mpfr_exp(r27694, r27693, MPFR_RNDN);
        mpfr_add(r27695, r27691, r27694, MPFR_RNDN);
        mpfr_div(r27696, r27691, r27695, MPFR_RNDN);
        mpfr_sub(r27697, r27691, r27696, MPFR_RNDN);
        mpfr_set_d(r27698, c_n, MPFR_RNDN);
        mpfr_pow(r27699, r27697, r27698, MPFR_RNDN);
        mpfr_set_d(r27700, t, MPFR_RNDN);
        mpfr_neg(r27701, r27700, MPFR_RNDN);
        mpfr_exp(r27702, r27701, MPFR_RNDN);
        mpfr_add(r27703, r27691, r27702, MPFR_RNDN);
        mpfr_div(r27704, r27691, r27703, MPFR_RNDN);
        mpfr_sub(r27705, r27691, r27704, MPFR_RNDN);
        mpfr_pow(r27706, r27705, r27698, MPFR_RNDN);
        mpfr_set_d(r27707, c_p, MPFR_RNDN);
        ;
        mpfr_log(r27709, r27708, MPFR_RNDN);
        mpfr_fma(r27710, r27708, r27700, r27709, MPFR_RNDN);
        mpfr_fma(r27711, r27707, r27710, r27691, MPFR_RNDN);
        mpfr_pow(r27712, r27696, r27707, MPFR_RNDN);
        mpfr_div(r27713, r27711, r27712, MPFR_RNDN);
        mpfr_mul(r27714, r27706, r27713, MPFR_RNDN);
        mpfr_div(r27715, r27699, r27714, MPFR_RNDN);
        ;
        mpfr_set_si(r27717, mpfr_cmp(r27715, r27716) <= 0, MPFR_RNDN);
        mpfr_log1p(r27718, r27702, MPFR_RNDN);
        mpfr_log1p(r27719, r27694, MPFR_RNDN);
        mpfr_sub(r27720, r27718, r27719, MPFR_RNDN);
        ;
        mpfr_fma(r27722, r27721, r27692, r27708, MPFR_RNDN);
        mpfr_mul(r27723, r27700, r27708, MPFR_RNDN);
        mpfr_fma(r27724, r27693, r27722, r27723, MPFR_RNDN);
        mpfr_mul(r27725, r27698, r27724, MPFR_RNDN);
        mpfr_fma(r27726, r27707, r27720, r27725, MPFR_RNDN);
        mpfr_exp(r27727, r27726, MPFR_RNDN);
        if (mpfr_get_si(r27717, MPFR_RNDN)) { mpfr_set(r27728, r27715, MPFR_RNDN); } else { mpfr_set(r27728, r27727, MPFR_RNDN); };
        return mpfr_get_d(r27728, MPFR_RNDN);
}

