#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 r27460 = 1;
        float r27461 = s;
        float r27462 = -r27461;
        float r27463 = exp(r27462);
        float r27464 = r27460 + r27463;
        float r27465 = r27460 / r27464;
        float r27466 = c_p;
        float r27467 = pow(r27465, r27466);
        float r27468 = r27460 - r27465;
        float r27469 = c_n;
        float r27470 = pow(r27468, r27469);
        float r27471 = r27467 * r27470;
        float r27472 = t;
        float r27473 = -r27472;
        float r27474 = exp(r27473);
        float r27475 = r27460 + r27474;
        float r27476 = r27460 / r27475;
        float r27477 = pow(r27476, r27466);
        float r27478 = r27460 - r27476;
        float r27479 = pow(r27478, r27469);
        float r27480 = r27477 * r27479;
        float r27481 = r27471 / r27480;
        return r27481;
}

double f_id(double c_p, double c_n, double t, double s) {
        double r27482 = 1;
        double r27483 = s;
        double r27484 = -r27483;
        double r27485 = exp(r27484);
        double r27486 = r27482 + r27485;
        double r27487 = r27482 / r27486;
        double r27488 = c_p;
        double r27489 = pow(r27487, r27488);
        double r27490 = r27482 - r27487;
        double r27491 = c_n;
        double r27492 = pow(r27490, r27491);
        double r27493 = r27489 * r27492;
        double r27494 = t;
        double r27495 = -r27494;
        double r27496 = exp(r27495);
        double r27497 = r27482 + r27496;
        double r27498 = r27482 / r27497;
        double r27499 = pow(r27498, r27488);
        double r27500 = r27482 - r27498;
        double r27501 = pow(r27500, r27491);
        double r27502 = r27499 * r27501;
        double r27503 = r27493 / r27502;
        return r27503;
}


double f_of(float c_p, float c_n, float t, float s) {
        float r27504 = 1;
        float r27505 = s;
        float r27506 = -r27505;
        float r27507 = exp(r27506);
        float r27508 = r27504 + r27507;
        float r27509 = r27504 / r27508;
        float r27510 = 0.49183472926145494;
        bool r27511 = r27509 <= r27510;
        float r27512 = 0.5000000000000013;
        bool r27513 = r27509 <= r27512;
        float r27514 = !r27513;
        bool r27515 = r27511 || r27514;
        float r27516 = c_p;
        float r27517 = pow(r27509, r27516);
        float r27518 = t;
        float r27519 = 1/2;
        float r27520 = r27518 * r27519;
        float r27521 = log(r27519);
        float r27522 = r27520 + r27521;
        float r27523 = r27516 * r27522;
        float r27524 = r27523 + r27504;
        float r27525 = r27517 / r27524;
        float r27526 = r27504 - r27509;
        float r27527 = c_n;
        float r27528 = pow(r27526, r27527);
        float r27529 = -r27518;
        float r27530 = exp(r27529);
        float r27531 = r27504 + r27530;
        float r27532 = r27504 / r27531;
        float r27533 = r27504 - r27532;
        float r27534 = pow(r27533, r27527);
        float r27535 = r27528 / r27534;
        float r27536 = r27525 * r27535;
        float r27537 = r27516 - r27527;
        float r27538 = r27519 * r27505;
        float r27539 = r27537 * r27538;
        float r27540 = r27504 + r27539;
        float r27541 = r27515 ? r27536 : r27540;
        return r27541;
}

double f_od(double c_p, double c_n, double t, double s) {
        double r27542 = 1;
        double r27543 = s;
        double r27544 = -r27543;
        double r27545 = exp(r27544);
        double r27546 = r27542 + r27545;
        double r27547 = r27542 / r27546;
        double r27548 = 0.49183472926145494;
        bool r27549 = r27547 <= r27548;
        double r27550 = 0.5000000000000013;
        bool r27551 = r27547 <= r27550;
        double r27552 = !r27551;
        bool r27553 = r27549 || r27552;
        double r27554 = c_p;
        double r27555 = pow(r27547, r27554);
        double r27556 = t;
        double r27557 = 1/2;
        double r27558 = r27556 * r27557;
        double r27559 = log(r27557);
        double r27560 = r27558 + r27559;
        double r27561 = r27554 * r27560;
        double r27562 = r27561 + r27542;
        double r27563 = r27555 / r27562;
        double r27564 = r27542 - r27547;
        double r27565 = c_n;
        double r27566 = pow(r27564, r27565);
        double r27567 = -r27556;
        double r27568 = exp(r27567);
        double r27569 = r27542 + r27568;
        double r27570 = r27542 / r27569;
        double r27571 = r27542 - r27570;
        double r27572 = pow(r27571, r27565);
        double r27573 = r27566 / r27572;
        double r27574 = r27563 * r27573;
        double r27575 = r27554 - r27565;
        double r27576 = r27557 * r27543;
        double r27577 = r27575 * r27576;
        double r27578 = r27542 + r27577;
        double r27579 = r27553 ? r27574 : r27578;
        return r27579;
}

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 r27580, r27581, r27582, r27583, r27584, r27585, r27586, r27587, r27588, r27589, r27590, r27591, r27592, r27593, r27594, r27595, r27596, r27597, r27598, r27599, r27600, r27601;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27580, "1", 10, MPFR_RNDN);
        mpfr_init(r27581);
        mpfr_init(r27582);
        mpfr_init(r27583);
        mpfr_init(r27584);
        mpfr_init(r27585);
        mpfr_init(r27586);
        mpfr_init(r27587);
        mpfr_init(r27588);
        mpfr_init(r27589);
        mpfr_init(r27590);
        mpfr_init(r27591);
        mpfr_init(r27592);
        mpfr_init(r27593);
        mpfr_init(r27594);
        mpfr_init(r27595);
        mpfr_init(r27596);
        mpfr_init(r27597);
        mpfr_init(r27598);
        mpfr_init(r27599);
        mpfr_init(r27600);
        mpfr_init(r27601);
}

double f_im(double c_p, double c_n, double t, double s) {
        ;
        mpfr_set_d(r27581, s, MPFR_RNDN);
        mpfr_neg(r27582, r27581, MPFR_RNDN);
        mpfr_exp(r27583, r27582, MPFR_RNDN);
        mpfr_add(r27584, r27580, r27583, MPFR_RNDN);
        mpfr_div(r27585, r27580, r27584, MPFR_RNDN);
        mpfr_set_d(r27586, c_p, MPFR_RNDN);
        mpfr_pow(r27587, r27585, r27586, MPFR_RNDN);
        mpfr_sub(r27588, r27580, r27585, MPFR_RNDN);
        mpfr_set_d(r27589, c_n, MPFR_RNDN);
        mpfr_pow(r27590, r27588, r27589, MPFR_RNDN);
        mpfr_mul(r27591, r27587, r27590, MPFR_RNDN);
        mpfr_set_d(r27592, t, MPFR_RNDN);
        mpfr_neg(r27593, r27592, MPFR_RNDN);
        mpfr_exp(r27594, r27593, MPFR_RNDN);
        mpfr_add(r27595, r27580, r27594, MPFR_RNDN);
        mpfr_div(r27596, r27580, r27595, MPFR_RNDN);
        mpfr_pow(r27597, r27596, r27586, MPFR_RNDN);
        mpfr_sub(r27598, r27580, r27596, MPFR_RNDN);
        mpfr_pow(r27599, r27598, r27589, MPFR_RNDN);
        mpfr_mul(r27600, r27597, r27599, MPFR_RNDN);
        mpfr_div(r27601, r27591, r27600, MPFR_RNDN);
        return mpfr_get_d(r27601, MPFR_RNDN);
}

static mpfr_t r27602, r27603, r27604, r27605, r27606, r27607, r27608, r27609, r27610, r27611, r27612, r27613, r27614, r27615, r27616, r27617, r27618, r27619, r27620, r27621, r27622, r27623, r27624, r27625, r27626, r27627, r27628, r27629, r27630, r27631, r27632, r27633, r27634, r27635, r27636, r27637, r27638, r27639;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27602, "1", 10, MPFR_RNDN);
        mpfr_init(r27603);
        mpfr_init(r27604);
        mpfr_init(r27605);
        mpfr_init(r27606);
        mpfr_init(r27607);
        mpfr_init_set_str(r27608, "0.49183472926145494", 10, MPFR_RNDN);
        mpfr_init(r27609);
        mpfr_init_set_str(r27610, "0.5000000000000013", 10, MPFR_RNDN);
        mpfr_init(r27611);
        mpfr_init(r27612);
        mpfr_init(r27613);
        mpfr_init(r27614);
        mpfr_init(r27615);
        mpfr_init(r27616);
        mpfr_init_set_str(r27617, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27618);
        mpfr_init(r27619);
        mpfr_init(r27620);
        mpfr_init(r27621);
        mpfr_init(r27622);
        mpfr_init(r27623);
        mpfr_init(r27624);
        mpfr_init(r27625);
        mpfr_init(r27626);
        mpfr_init(r27627);
        mpfr_init(r27628);
        mpfr_init(r27629);
        mpfr_init(r27630);
        mpfr_init(r27631);
        mpfr_init(r27632);
        mpfr_init(r27633);
        mpfr_init(r27634);
        mpfr_init(r27635);
        mpfr_init(r27636);
        mpfr_init(r27637);
        mpfr_init(r27638);
        mpfr_init(r27639);
}

double f_fm(double c_p, double c_n, double t, double s) {
        ;
        mpfr_set_d(r27603, s, MPFR_RNDN);
        mpfr_neg(r27604, r27603, MPFR_RNDN);
        mpfr_exp(r27605, r27604, MPFR_RNDN);
        mpfr_add(r27606, r27602, r27605, MPFR_RNDN);
        mpfr_div(r27607, r27602, r27606, MPFR_RNDN);
        ;
        mpfr_set_si(r27609, mpfr_cmp(r27607, r27608) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r27611, mpfr_cmp(r27607, r27610) <= 0, MPFR_RNDN);
        mpfr_set_si(r27612, !mpfr_get_si(r27611, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_si(r27613, mpfr_get_si(r27609, MPFR_RNDN) || mpfr_get_si(r27612, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_d(r27614, c_p, MPFR_RNDN);
        mpfr_pow(r27615, r27607, r27614, MPFR_RNDN);
        mpfr_set_d(r27616, t, MPFR_RNDN);
        ;
        mpfr_mul(r27618, r27616, r27617, MPFR_RNDN);
        mpfr_log(r27619, r27617, MPFR_RNDN);
        mpfr_add(r27620, r27618, r27619, MPFR_RNDN);
        mpfr_mul(r27621, r27614, r27620, MPFR_RNDN);
        mpfr_add(r27622, r27621, r27602, MPFR_RNDN);
        mpfr_div(r27623, r27615, r27622, MPFR_RNDN);
        mpfr_sub(r27624, r27602, r27607, MPFR_RNDN);
        mpfr_set_d(r27625, c_n, MPFR_RNDN);
        mpfr_pow(r27626, r27624, r27625, MPFR_RNDN);
        mpfr_neg(r27627, r27616, MPFR_RNDN);
        mpfr_exp(r27628, r27627, MPFR_RNDN);
        mpfr_add(r27629, r27602, r27628, MPFR_RNDN);
        mpfr_div(r27630, r27602, r27629, MPFR_RNDN);
        mpfr_sub(r27631, r27602, r27630, MPFR_RNDN);
        mpfr_pow(r27632, r27631, r27625, MPFR_RNDN);
        mpfr_div(r27633, r27626, r27632, MPFR_RNDN);
        mpfr_mul(r27634, r27623, r27633, MPFR_RNDN);
        mpfr_sub(r27635, r27614, r27625, MPFR_RNDN);
        mpfr_mul(r27636, r27617, r27603, MPFR_RNDN);
        mpfr_mul(r27637, r27635, r27636, MPFR_RNDN);
        mpfr_add(r27638, r27602, r27637, MPFR_RNDN);
        if (mpfr_get_si(r27613, MPFR_RNDN)) { mpfr_set(r27639, r27634, MPFR_RNDN); } else { mpfr_set(r27639, r27638, MPFR_RNDN); };
        return mpfr_get_d(r27639, MPFR_RNDN);
}

static mpfr_t r27640, r27641, r27642, r27643, r27644, r27645, r27646, r27647, r27648, r27649, r27650, r27651, r27652, 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;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27640, "1", 10, MPFR_RNDN);
        mpfr_init(r27641);
        mpfr_init(r27642);
        mpfr_init(r27643);
        mpfr_init(r27644);
        mpfr_init(r27645);
        mpfr_init_set_str(r27646, "0.49183472926145494", 10, MPFR_RNDN);
        mpfr_init(r27647);
        mpfr_init_set_str(r27648, "0.5000000000000013", 10, MPFR_RNDN);
        mpfr_init(r27649);
        mpfr_init(r27650);
        mpfr_init(r27651);
        mpfr_init(r27652);
        mpfr_init(r27653);
        mpfr_init(r27654);
        mpfr_init_set_str(r27655, "1/2", 10, MPFR_RNDN);
        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(r27670);
        mpfr_init(r27671);
        mpfr_init(r27672);
        mpfr_init(r27673);
        mpfr_init(r27674);
        mpfr_init(r27675);
        mpfr_init(r27676);
        mpfr_init(r27677);
}

double f_dm(double c_p, double c_n, double t, double s) {
        ;
        mpfr_set_d(r27641, s, MPFR_RNDN);
        mpfr_neg(r27642, r27641, MPFR_RNDN);
        mpfr_exp(r27643, r27642, MPFR_RNDN);
        mpfr_add(r27644, r27640, r27643, MPFR_RNDN);
        mpfr_div(r27645, r27640, r27644, MPFR_RNDN);
        ;
        mpfr_set_si(r27647, mpfr_cmp(r27645, r27646) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r27649, mpfr_cmp(r27645, r27648) <= 0, MPFR_RNDN);
        mpfr_set_si(r27650, !mpfr_get_si(r27649, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_si(r27651, mpfr_get_si(r27647, MPFR_RNDN) || mpfr_get_si(r27650, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_d(r27652, c_p, MPFR_RNDN);
        mpfr_pow(r27653, r27645, r27652, MPFR_RNDN);
        mpfr_set_d(r27654, t, MPFR_RNDN);
        ;
        mpfr_mul(r27656, r27654, r27655, MPFR_RNDN);
        mpfr_log(r27657, r27655, MPFR_RNDN);
        mpfr_add(r27658, r27656, r27657, MPFR_RNDN);
        mpfr_mul(r27659, r27652, r27658, MPFR_RNDN);
        mpfr_add(r27660, r27659, r27640, MPFR_RNDN);
        mpfr_div(r27661, r27653, r27660, MPFR_RNDN);
        mpfr_sub(r27662, r27640, r27645, MPFR_RNDN);
        mpfr_set_d(r27663, c_n, MPFR_RNDN);
        mpfr_pow(r27664, r27662, r27663, MPFR_RNDN);
        mpfr_neg(r27665, r27654, MPFR_RNDN);
        mpfr_exp(r27666, r27665, MPFR_RNDN);
        mpfr_add(r27667, r27640, r27666, MPFR_RNDN);
        mpfr_div(r27668, r27640, r27667, MPFR_RNDN);
        mpfr_sub(r27669, r27640, r27668, MPFR_RNDN);
        mpfr_pow(r27670, r27669, r27663, MPFR_RNDN);
        mpfr_div(r27671, r27664, r27670, MPFR_RNDN);
        mpfr_mul(r27672, r27661, r27671, MPFR_RNDN);
        mpfr_sub(r27673, r27652, r27663, MPFR_RNDN);
        mpfr_mul(r27674, r27655, r27641, MPFR_RNDN);
        mpfr_mul(r27675, r27673, r27674, MPFR_RNDN);
        mpfr_add(r27676, r27640, r27675, MPFR_RNDN);
        if (mpfr_get_si(r27651, MPFR_RNDN)) { mpfr_set(r27677, r27672, MPFR_RNDN); } else { mpfr_set(r27677, r27676, MPFR_RNDN); };
        return mpfr_get_d(r27677, MPFR_RNDN);
}

