#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 r27641 = 1;
        float r27642 = s;
        float r27643 = -r27642;
        float r27644 = exp(r27643);
        float r27645 = r27641 + r27644;
        float r27646 = r27641 / r27645;
        float r27647 = c_p;
        float r27648 = pow(r27646, r27647);
        float r27649 = r27641 - r27646;
        float r27650 = c_n;
        float r27651 = pow(r27649, r27650);
        float r27652 = r27648 * r27651;
        float r27653 = t;
        float r27654 = -r27653;
        float r27655 = exp(r27654);
        float r27656 = r27641 + r27655;
        float r27657 = r27641 / r27656;
        float r27658 = pow(r27657, r27647);
        float r27659 = r27641 - r27657;
        float r27660 = pow(r27659, r27650);
        float r27661 = r27658 * r27660;
        float r27662 = r27652 / r27661;
        return r27662;
}

double f_id(double c_p, double c_n, double t, double s) {
        double r27663 = 1;
        double r27664 = s;
        double r27665 = -r27664;
        double r27666 = exp(r27665);
        double r27667 = r27663 + r27666;
        double r27668 = r27663 / r27667;
        double r27669 = c_p;
        double r27670 = pow(r27668, r27669);
        double r27671 = r27663 - r27668;
        double r27672 = c_n;
        double r27673 = pow(r27671, r27672);
        double r27674 = r27670 * r27673;
        double r27675 = t;
        double r27676 = -r27675;
        double r27677 = exp(r27676);
        double r27678 = r27663 + r27677;
        double r27679 = r27663 / r27678;
        double r27680 = pow(r27679, r27669);
        double r27681 = r27663 - r27679;
        double r27682 = pow(r27681, r27672);
        double r27683 = r27680 * r27682;
        double r27684 = r27674 / r27683;
        return r27684;
}


double f_of(float c_p, float c_n, float t, float s) {
        float r27685 = 1;
        float r27686 = s;
        float r27687 = -r27686;
        float r27688 = exp(r27687);
        float r27689 = r27685 + r27688;
        float r27690 = r27685 / r27689;
        float r27691 = r27685 - r27690;
        float r27692 = c_n;
        float r27693 = pow(r27691, r27692);
        float r27694 = t;
        float r27695 = -r27694;
        float r27696 = exp(r27695);
        float r27697 = r27685 + r27696;
        float r27698 = r27685 / r27697;
        float r27699 = r27685 - r27698;
        float r27700 = pow(r27699, r27692);
        float r27701 = c_p;
        float r27702 = 1/2;
        float r27703 = log(r27702);
        float r27704 = fma(r27702, r27694, r27703);
        float r27705 = fma(r27701, r27704, r27685);
        float r27706 = pow(r27690, r27701);
        float r27707 = r27705 / r27706;
        float r27708 = r27700 * r27707;
        float r27709 = r27693 / r27708;
        float r27710 = 1.0000000000000004;
        bool r27711 = r27709 <= r27710;
        float r27712 = log1p(r27696);
        float r27713 = log1p(r27688);
        float r27714 = r27712 - r27713;
        float r27715 = 1/8;
        float r27716 = fma(r27715, r27686, r27702);
        float r27717 = r27694 * r27702;
        float r27718 = fma(r27687, r27716, r27717);
        float r27719 = r27692 * r27718;
        float r27720 = fma(r27701, r27714, r27719);
        float r27721 = exp(r27720);
        float r27722 = r27711 ? r27709 : r27721;
        return r27722;
}

double f_od(double c_p, double c_n, double t, double s) {
        double r27723 = 1;
        double r27724 = s;
        double r27725 = -r27724;
        double r27726 = exp(r27725);
        double r27727 = r27723 + r27726;
        double r27728 = r27723 / r27727;
        double r27729 = r27723 - r27728;
        double r27730 = c_n;
        double r27731 = pow(r27729, r27730);
        double r27732 = t;
        double r27733 = -r27732;
        double r27734 = exp(r27733);
        double r27735 = r27723 + r27734;
        double r27736 = r27723 / r27735;
        double r27737 = r27723 - r27736;
        double r27738 = pow(r27737, r27730);
        double r27739 = c_p;
        double r27740 = 1/2;
        double r27741 = log(r27740);
        double r27742 = fma(r27740, r27732, r27741);
        double r27743 = fma(r27739, r27742, r27723);
        double r27744 = pow(r27728, r27739);
        double r27745 = r27743 / r27744;
        double r27746 = r27738 * r27745;
        double r27747 = r27731 / r27746;
        double r27748 = 1.0000000000000004;
        bool r27749 = r27747 <= r27748;
        double r27750 = log1p(r27734);
        double r27751 = log1p(r27726);
        double r27752 = r27750 - r27751;
        double r27753 = 1/8;
        double r27754 = fma(r27753, r27724, r27740);
        double r27755 = r27732 * r27740;
        double r27756 = fma(r27725, r27754, r27755);
        double r27757 = r27730 * r27756;
        double r27758 = fma(r27739, r27752, r27757);
        double r27759 = exp(r27758);
        double r27760 = r27749 ? r27747 : r27759;
        return r27760;
}

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 r27761, r27762, r27763, r27764, r27765, r27766, r27767, r27768, r27769, r27770, r27771, r27772, r27773, r27774, r27775, r27776, r27777, r27778, r27779, r27780, r27781, r27782;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r27761, "1", 10, MPFR_RNDN);
        mpfr_init(r27762);
        mpfr_init(r27763);
        mpfr_init(r27764);
        mpfr_init(r27765);
        mpfr_init(r27766);
        mpfr_init(r27767);
        mpfr_init(r27768);
        mpfr_init(r27769);
        mpfr_init(r27770);
        mpfr_init(r27771);
        mpfr_init(r27772);
        mpfr_init(r27773);
        mpfr_init(r27774);
        mpfr_init(r27775);
        mpfr_init(r27776);
        mpfr_init(r27777);
        mpfr_init(r27778);
        mpfr_init(r27779);
        mpfr_init(r27780);
        mpfr_init(r27781);
        mpfr_init(r27782);
}

double f_im(double c_p, double c_n, double t, double s) {
        ;
        mpfr_set_d(r27762, s, MPFR_RNDN);
        mpfr_neg(r27763, r27762, MPFR_RNDN);
        mpfr_exp(r27764, r27763, MPFR_RNDN);
        mpfr_add(r27765, r27761, r27764, MPFR_RNDN);
        mpfr_div(r27766, r27761, r27765, MPFR_RNDN);
        mpfr_set_d(r27767, c_p, MPFR_RNDN);
        mpfr_pow(r27768, r27766, r27767, MPFR_RNDN);
        mpfr_sub(r27769, r27761, r27766, MPFR_RNDN);
        mpfr_set_d(r27770, c_n, MPFR_RNDN);
        mpfr_pow(r27771, r27769, r27770, MPFR_RNDN);
        mpfr_mul(r27772, r27768, r27771, MPFR_RNDN);
        mpfr_set_d(r27773, t, MPFR_RNDN);
        mpfr_neg(r27774, r27773, MPFR_RNDN);
        mpfr_exp(r27775, r27774, MPFR_RNDN);
        mpfr_add(r27776, r27761, r27775, MPFR_RNDN);
        mpfr_div(r27777, r27761, r27776, MPFR_RNDN);
        mpfr_pow(r27778, r27777, r27767, MPFR_RNDN);
        mpfr_sub(r27779, r27761, r27777, MPFR_RNDN);
        mpfr_pow(r27780, r27779, r27770, MPFR_RNDN);
        mpfr_mul(r27781, r27778, r27780, MPFR_RNDN);
        mpfr_div(r27782, r27772, r27781, MPFR_RNDN);
        return mpfr_get_d(r27782, MPFR_RNDN);
}

static mpfr_t r27783, r27784, r27785, r27786, r27787, r27788, r27789, r27790, r27791, r27792, r27793, r27794, r27795, r27796, r27797, r27798, r27799, r27800, r27801, r27802, r27803, r27804, r27805, r27806, r27807, r27808, r27809, r27810, r27811, r27812, r27813, r27814, r27815, r27816, r27817, r27818, r27819, r27820;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r27783, "1", 10, MPFR_RNDN);
        mpfr_init(r27784);
        mpfr_init(r27785);
        mpfr_init(r27786);
        mpfr_init(r27787);
        mpfr_init(r27788);
        mpfr_init(r27789);
        mpfr_init(r27790);
        mpfr_init(r27791);
        mpfr_init(r27792);
        mpfr_init(r27793);
        mpfr_init(r27794);
        mpfr_init(r27795);
        mpfr_init(r27796);
        mpfr_init(r27797);
        mpfr_init(r27798);
        mpfr_init(r27799);
        mpfr_init_set_str(r27800, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27801);
        mpfr_init(r27802);
        mpfr_init(r27803);
        mpfr_init(r27804);
        mpfr_init(r27805);
        mpfr_init(r27806);
        mpfr_init(r27807);
        mpfr_init_set_str(r27808, "1.0000000000000004", 10, MPFR_RNDN);
        mpfr_init(r27809);
        mpfr_init(r27810);
        mpfr_init(r27811);
        mpfr_init(r27812);
        mpfr_init_set_str(r27813, "1/8", 10, MPFR_RNDN);
        mpfr_init(r27814);
        mpfr_init(r27815);
        mpfr_init(r27816);
        mpfr_init(r27817);
        mpfr_init(r27818);
        mpfr_init(r27819);
        mpfr_init(r27820);
}

double f_fm(double c_p, double c_n, double t, double s) {
        ;
        mpfr_set_d(r27784, s, MPFR_RNDN);
        mpfr_neg(r27785, r27784, MPFR_RNDN);
        mpfr_exp(r27786, r27785, MPFR_RNDN);
        mpfr_add(r27787, r27783, r27786, MPFR_RNDN);
        mpfr_div(r27788, r27783, r27787, MPFR_RNDN);
        mpfr_sub(r27789, r27783, r27788, MPFR_RNDN);
        mpfr_set_d(r27790, c_n, MPFR_RNDN);
        mpfr_pow(r27791, r27789, r27790, MPFR_RNDN);
        mpfr_set_d(r27792, t, MPFR_RNDN);
        mpfr_neg(r27793, r27792, MPFR_RNDN);
        mpfr_exp(r27794, r27793, MPFR_RNDN);
        mpfr_add(r27795, r27783, r27794, MPFR_RNDN);
        mpfr_div(r27796, r27783, r27795, MPFR_RNDN);
        mpfr_sub(r27797, r27783, r27796, MPFR_RNDN);
        mpfr_pow(r27798, r27797, r27790, MPFR_RNDN);
        mpfr_set_d(r27799, c_p, MPFR_RNDN);
        ;
        mpfr_log(r27801, r27800, MPFR_RNDN);
        mpfr_fma(r27802, r27800, r27792, r27801, MPFR_RNDN);
        mpfr_fma(r27803, r27799, r27802, r27783, MPFR_RNDN);
        mpfr_pow(r27804, r27788, r27799, MPFR_RNDN);
        mpfr_div(r27805, r27803, r27804, MPFR_RNDN);
        mpfr_mul(r27806, r27798, r27805, MPFR_RNDN);
        mpfr_div(r27807, r27791, r27806, MPFR_RNDN);
        ;
        mpfr_set_si(r27809, mpfr_cmp(r27807, r27808) <= 0, MPFR_RNDN);
        mpfr_log1p(r27810, r27794, MPFR_RNDN);
        mpfr_log1p(r27811, r27786, MPFR_RNDN);
        mpfr_sub(r27812, r27810, r27811, MPFR_RNDN);
        ;
        mpfr_fma(r27814, r27813, r27784, r27800, MPFR_RNDN);
        mpfr_mul(r27815, r27792, r27800, MPFR_RNDN);
        mpfr_fma(r27816, r27785, r27814, r27815, MPFR_RNDN);
        mpfr_mul(r27817, r27790, r27816, MPFR_RNDN);
        mpfr_fma(r27818, r27799, r27812, r27817, MPFR_RNDN);
        mpfr_exp(r27819, r27818, MPFR_RNDN);
        if (mpfr_get_si(r27809, MPFR_RNDN)) { mpfr_set(r27820, r27807, MPFR_RNDN); } else { mpfr_set(r27820, r27819, MPFR_RNDN); };
        return mpfr_get_d(r27820, MPFR_RNDN);
}

static mpfr_t r27821, r27822, r27823, r27824, r27825, r27826, r27827, r27828, r27829, r27830, r27831, r27832, r27833, r27834, r27835, r27836, r27837, r27838, r27839, r27840, r27841, r27842, r27843, r27844, r27845, r27846, r27847, r27848, r27849, r27850, r27851, r27852, r27853, r27854, r27855, r27856, r27857, r27858;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r27821, "1", 10, MPFR_RNDN);
        mpfr_init(r27822);
        mpfr_init(r27823);
        mpfr_init(r27824);
        mpfr_init(r27825);
        mpfr_init(r27826);
        mpfr_init(r27827);
        mpfr_init(r27828);
        mpfr_init(r27829);
        mpfr_init(r27830);
        mpfr_init(r27831);
        mpfr_init(r27832);
        mpfr_init(r27833);
        mpfr_init(r27834);
        mpfr_init(r27835);
        mpfr_init(r27836);
        mpfr_init(r27837);
        mpfr_init_set_str(r27838, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27839);
        mpfr_init(r27840);
        mpfr_init(r27841);
        mpfr_init(r27842);
        mpfr_init(r27843);
        mpfr_init(r27844);
        mpfr_init(r27845);
        mpfr_init_set_str(r27846, "1.0000000000000004", 10, MPFR_RNDN);
        mpfr_init(r27847);
        mpfr_init(r27848);
        mpfr_init(r27849);
        mpfr_init(r27850);
        mpfr_init_set_str(r27851, "1/8", 10, MPFR_RNDN);
        mpfr_init(r27852);
        mpfr_init(r27853);
        mpfr_init(r27854);
        mpfr_init(r27855);
        mpfr_init(r27856);
        mpfr_init(r27857);
        mpfr_init(r27858);
}

double f_dm(double c_p, double c_n, double t, double s) {
        ;
        mpfr_set_d(r27822, s, MPFR_RNDN);
        mpfr_neg(r27823, r27822, MPFR_RNDN);
        mpfr_exp(r27824, r27823, MPFR_RNDN);
        mpfr_add(r27825, r27821, r27824, MPFR_RNDN);
        mpfr_div(r27826, r27821, r27825, MPFR_RNDN);
        mpfr_sub(r27827, r27821, r27826, MPFR_RNDN);
        mpfr_set_d(r27828, c_n, MPFR_RNDN);
        mpfr_pow(r27829, r27827, r27828, MPFR_RNDN);
        mpfr_set_d(r27830, t, MPFR_RNDN);
        mpfr_neg(r27831, r27830, MPFR_RNDN);
        mpfr_exp(r27832, r27831, MPFR_RNDN);
        mpfr_add(r27833, r27821, r27832, MPFR_RNDN);
        mpfr_div(r27834, r27821, r27833, MPFR_RNDN);
        mpfr_sub(r27835, r27821, r27834, MPFR_RNDN);
        mpfr_pow(r27836, r27835, r27828, MPFR_RNDN);
        mpfr_set_d(r27837, c_p, MPFR_RNDN);
        ;
        mpfr_log(r27839, r27838, MPFR_RNDN);
        mpfr_fma(r27840, r27838, r27830, r27839, MPFR_RNDN);
        mpfr_fma(r27841, r27837, r27840, r27821, MPFR_RNDN);
        mpfr_pow(r27842, r27826, r27837, MPFR_RNDN);
        mpfr_div(r27843, r27841, r27842, MPFR_RNDN);
        mpfr_mul(r27844, r27836, r27843, MPFR_RNDN);
        mpfr_div(r27845, r27829, r27844, MPFR_RNDN);
        ;
        mpfr_set_si(r27847, mpfr_cmp(r27845, r27846) <= 0, MPFR_RNDN);
        mpfr_log1p(r27848, r27832, MPFR_RNDN);
        mpfr_log1p(r27849, r27824, MPFR_RNDN);
        mpfr_sub(r27850, r27848, r27849, MPFR_RNDN);
        ;
        mpfr_fma(r27852, r27851, r27822, r27838, MPFR_RNDN);
        mpfr_mul(r27853, r27830, r27838, MPFR_RNDN);
        mpfr_fma(r27854, r27823, r27852, r27853, MPFR_RNDN);
        mpfr_mul(r27855, r27828, r27854, MPFR_RNDN);
        mpfr_fma(r27856, r27837, r27850, r27855, MPFR_RNDN);
        mpfr_exp(r27857, r27856, MPFR_RNDN);
        if (mpfr_get_si(r27847, MPFR_RNDN)) { mpfr_set(r27858, r27845, MPFR_RNDN); } else { mpfr_set(r27858, r27857, MPFR_RNDN); };
        return mpfr_get_d(r27858, MPFR_RNDN);
}

