#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 r25247 = 1;
        float r25248 = s;
        float r25249 = -r25248;
        float r25250 = exp(r25249);
        float r25251 = r25247 + r25250;
        float r25252 = r25247 / r25251;
        float r25253 = c_p;
        float r25254 = pow(r25252, r25253);
        float r25255 = r25247 - r25252;
        float r25256 = c_n;
        float r25257 = pow(r25255, r25256);
        float r25258 = r25254 * r25257;
        float r25259 = t;
        float r25260 = -r25259;
        float r25261 = exp(r25260);
        float r25262 = r25247 + r25261;
        float r25263 = r25247 / r25262;
        float r25264 = pow(r25263, r25253);
        float r25265 = r25247 - r25263;
        float r25266 = pow(r25265, r25256);
        float r25267 = r25264 * r25266;
        float r25268 = r25258 / r25267;
        return r25268;
}

double f_id(double c_p, double c_n, double t, double s) {
        double r25269 = 1;
        double r25270 = s;
        double r25271 = -r25270;
        double r25272 = exp(r25271);
        double r25273 = r25269 + r25272;
        double r25274 = r25269 / r25273;
        double r25275 = c_p;
        double r25276 = pow(r25274, r25275);
        double r25277 = r25269 - r25274;
        double r25278 = c_n;
        double r25279 = pow(r25277, r25278);
        double r25280 = r25276 * r25279;
        double r25281 = t;
        double r25282 = -r25281;
        double r25283 = exp(r25282);
        double r25284 = r25269 + r25283;
        double r25285 = r25269 / r25284;
        double r25286 = pow(r25285, r25275);
        double r25287 = r25269 - r25285;
        double r25288 = pow(r25287, r25278);
        double r25289 = r25286 * r25288;
        double r25290 = r25280 / r25289;
        return r25290;
}


double f_of(float c_p, float c_n, float t, float s) {
        float r25291 = s;
        float r25292 = -r25291;
        float r25293 = 731383733.8813744;
        bool r25294 = r25292 <= r25293;
        float r25295 = c_n;
        float r25296 = 1;
        float r25297 = -r25296;
        float r25298 = exp(r25292);
        float r25299 = r25298 + r25296;
        float r25300 = r25297 / r25299;
        float r25301 = log1p(r25300);
        float r25302 = t;
        float r25303 = -r25302;
        float r25304 = exp(r25303);
        float r25305 = r25304 + r25296;
        float r25306 = r25297 / r25305;
        float r25307 = log1p(r25306);
        float r25308 = r25301 - r25307;
        float r25309 = c_p;
        float r25310 = 1/8;
        float r25311 = r25302 * r25302;
        float r25312 = r25310 * r25311;
        float r25313 = 1/2;
        float r25314 = r25313 * r25309;
        float r25315 = r25291 - r25302;
        float r25316 = r25314 * r25315;
        float r25317 = fma(r25309, r25312, r25316);
        float r25318 = fma(r25295, r25308, r25317);
        float r25319 = exp(r25318);
        float r25320 = log1p(r25304);
        float r25321 = log1p(r25298);
        float r25322 = r25320 - r25321;
        float r25323 = fma(r25310, r25291, r25313);
        float r25324 = r25302 * r25313;
        float r25325 = fma(r25292, r25323, r25324);
        float r25326 = r25295 * r25325;
        float r25327 = fma(r25322, r25309, r25326);
        float r25328 = exp(r25327);
        float r25329 = r25294 ? r25319 : r25328;
        return r25329;
}

double f_od(double c_p, double c_n, double t, double s) {
        double r25330 = s;
        double r25331 = -r25330;
        double r25332 = 731383733.8813744;
        bool r25333 = r25331 <= r25332;
        double r25334 = c_n;
        double r25335 = 1;
        double r25336 = -r25335;
        double r25337 = exp(r25331);
        double r25338 = r25337 + r25335;
        double r25339 = r25336 / r25338;
        double r25340 = log1p(r25339);
        double r25341 = t;
        double r25342 = -r25341;
        double r25343 = exp(r25342);
        double r25344 = r25343 + r25335;
        double r25345 = r25336 / r25344;
        double r25346 = log1p(r25345);
        double r25347 = r25340 - r25346;
        double r25348 = c_p;
        double r25349 = 1/8;
        double r25350 = r25341 * r25341;
        double r25351 = r25349 * r25350;
        double r25352 = 1/2;
        double r25353 = r25352 * r25348;
        double r25354 = r25330 - r25341;
        double r25355 = r25353 * r25354;
        double r25356 = fma(r25348, r25351, r25355);
        double r25357 = fma(r25334, r25347, r25356);
        double r25358 = exp(r25357);
        double r25359 = log1p(r25343);
        double r25360 = log1p(r25337);
        double r25361 = r25359 - r25360;
        double r25362 = fma(r25349, r25330, r25352);
        double r25363 = r25341 * r25352;
        double r25364 = fma(r25331, r25362, r25363);
        double r25365 = r25334 * r25364;
        double r25366 = fma(r25361, r25348, r25365);
        double r25367 = exp(r25366);
        double r25368 = r25333 ? r25358 : r25367;
        return r25368;
}

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 r25369, r25370, r25371, r25372, r25373, r25374, r25375, r25376, r25377, r25378, r25379, r25380, r25381, r25382, r25383, r25384, r25385, r25386, r25387, r25388, r25389, r25390;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2128);
        mpfr_init_set_str(r25369, "1", 10, MPFR_RNDN);
        mpfr_init(r25370);
        mpfr_init(r25371);
        mpfr_init(r25372);
        mpfr_init(r25373);
        mpfr_init(r25374);
        mpfr_init(r25375);
        mpfr_init(r25376);
        mpfr_init(r25377);
        mpfr_init(r25378);
        mpfr_init(r25379);
        mpfr_init(r25380);
        mpfr_init(r25381);
        mpfr_init(r25382);
        mpfr_init(r25383);
        mpfr_init(r25384);
        mpfr_init(r25385);
        mpfr_init(r25386);
        mpfr_init(r25387);
        mpfr_init(r25388);
        mpfr_init(r25389);
        mpfr_init(r25390);
}

double f_im(double c_p, double c_n, double t, double s) {
        ;
        mpfr_set_d(r25370, s, MPFR_RNDN);
        mpfr_neg(r25371, r25370, MPFR_RNDN);
        mpfr_exp(r25372, r25371, MPFR_RNDN);
        mpfr_add(r25373, r25369, r25372, MPFR_RNDN);
        mpfr_div(r25374, r25369, r25373, MPFR_RNDN);
        mpfr_set_d(r25375, c_p, MPFR_RNDN);
        mpfr_pow(r25376, r25374, r25375, MPFR_RNDN);
        mpfr_sub(r25377, r25369, r25374, MPFR_RNDN);
        mpfr_set_d(r25378, c_n, MPFR_RNDN);
        mpfr_pow(r25379, r25377, r25378, MPFR_RNDN);
        mpfr_mul(r25380, r25376, r25379, MPFR_RNDN);
        mpfr_set_d(r25381, t, MPFR_RNDN);
        mpfr_neg(r25382, r25381, MPFR_RNDN);
        mpfr_exp(r25383, r25382, MPFR_RNDN);
        mpfr_add(r25384, r25369, r25383, MPFR_RNDN);
        mpfr_div(r25385, r25369, r25384, MPFR_RNDN);
        mpfr_pow(r25386, r25385, r25375, MPFR_RNDN);
        mpfr_sub(r25387, r25369, r25385, MPFR_RNDN);
        mpfr_pow(r25388, r25387, r25378, MPFR_RNDN);
        mpfr_mul(r25389, r25386, r25388, MPFR_RNDN);
        mpfr_div(r25390, r25380, r25389, MPFR_RNDN);
        return mpfr_get_d(r25390, MPFR_RNDN);
}

static mpfr_t r25391, r25392, r25393, r25394, r25395, r25396, r25397, r25398, r25399, r25400, r25401, r25402, r25403, r25404, r25405, r25406, r25407, r25408, r25409, r25410, r25411, r25412, r25413, r25414, r25415, r25416, r25417, r25418, r25419, r25420, r25421, r25422, r25423, r25424, r25425, r25426, r25427, r25428, r25429;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2128);
        mpfr_init(r25391);
        mpfr_init(r25392);
        mpfr_init_set_str(r25393, "731383733.8813744", 10, MPFR_RNDN);
        mpfr_init(r25394);
        mpfr_init(r25395);
        mpfr_init_set_str(r25396, "1", 10, MPFR_RNDN);
        mpfr_init(r25397);
        mpfr_init(r25398);
        mpfr_init(r25399);
        mpfr_init(r25400);
        mpfr_init(r25401);
        mpfr_init(r25402);
        mpfr_init(r25403);
        mpfr_init(r25404);
        mpfr_init(r25405);
        mpfr_init(r25406);
        mpfr_init(r25407);
        mpfr_init(r25408);
        mpfr_init(r25409);
        mpfr_init_set_str(r25410, "1/8", 10, MPFR_RNDN);
        mpfr_init(r25411);
        mpfr_init(r25412);
        mpfr_init_set_str(r25413, "1/2", 10, MPFR_RNDN);
        mpfr_init(r25414);
        mpfr_init(r25415);
        mpfr_init(r25416);
        mpfr_init(r25417);
        mpfr_init(r25418);
        mpfr_init(r25419);
        mpfr_init(r25420);
        mpfr_init(r25421);
        mpfr_init(r25422);
        mpfr_init(r25423);
        mpfr_init(r25424);
        mpfr_init(r25425);
        mpfr_init(r25426);
        mpfr_init(r25427);
        mpfr_init(r25428);
        mpfr_init(r25429);
}

double f_fm(double c_p, double c_n, double t, double s) {
        mpfr_set_d(r25391, s, MPFR_RNDN);
        mpfr_neg(r25392, r25391, MPFR_RNDN);
        ;
        mpfr_set_si(r25394, mpfr_cmp(r25392, r25393) <= 0, MPFR_RNDN);
        mpfr_set_d(r25395, c_n, MPFR_RNDN);
        ;
        mpfr_neg(r25397, r25396, MPFR_RNDN);
        mpfr_exp(r25398, r25392, MPFR_RNDN);
        mpfr_add(r25399, r25398, r25396, MPFR_RNDN);
        mpfr_div(r25400, r25397, r25399, MPFR_RNDN);
        mpfr_log1p(r25401, r25400, MPFR_RNDN);
        mpfr_set_d(r25402, t, MPFR_RNDN);
        mpfr_neg(r25403, r25402, MPFR_RNDN);
        mpfr_exp(r25404, r25403, MPFR_RNDN);
        mpfr_add(r25405, r25404, r25396, MPFR_RNDN);
        mpfr_div(r25406, r25397, r25405, MPFR_RNDN);
        mpfr_log1p(r25407, r25406, MPFR_RNDN);
        mpfr_sub(r25408, r25401, r25407, MPFR_RNDN);
        mpfr_set_d(r25409, c_p, MPFR_RNDN);
        ;
        mpfr_mul(r25411, r25402, r25402, MPFR_RNDN);
        mpfr_mul(r25412, r25410, r25411, MPFR_RNDN);
        ;
        mpfr_mul(r25414, r25413, r25409, MPFR_RNDN);
        mpfr_sub(r25415, r25391, r25402, MPFR_RNDN);
        mpfr_mul(r25416, r25414, r25415, MPFR_RNDN);
        mpfr_fma(r25417, r25409, r25412, r25416, MPFR_RNDN);
        mpfr_fma(r25418, r25395, r25408, r25417, MPFR_RNDN);
        mpfr_exp(r25419, r25418, MPFR_RNDN);
        mpfr_log1p(r25420, r25404, MPFR_RNDN);
        mpfr_log1p(r25421, r25398, MPFR_RNDN);
        mpfr_sub(r25422, r25420, r25421, MPFR_RNDN);
        mpfr_fma(r25423, r25410, r25391, r25413, MPFR_RNDN);
        mpfr_mul(r25424, r25402, r25413, MPFR_RNDN);
        mpfr_fma(r25425, r25392, r25423, r25424, MPFR_RNDN);
        mpfr_mul(r25426, r25395, r25425, MPFR_RNDN);
        mpfr_fma(r25427, r25422, r25409, r25426, MPFR_RNDN);
        mpfr_exp(r25428, r25427, MPFR_RNDN);
        if (mpfr_get_si(r25394, MPFR_RNDN)) { mpfr_set(r25429, r25419, MPFR_RNDN); } else { mpfr_set(r25429, r25428, MPFR_RNDN); };
        return mpfr_get_d(r25429, MPFR_RNDN);
}

static mpfr_t r25430, r25431, r25432, r25433, r25434, r25435, r25436, r25437, r25438, r25439, r25440, r25441, r25442, r25443, r25444, r25445, r25446, r25447, r25448, r25449, r25450, r25451, r25452, r25453, r25454, r25455, r25456, r25457, r25458, r25459, r25460, r25461, r25462, r25463, r25464, r25465, r25466, r25467, r25468;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2128);
        mpfr_init(r25430);
        mpfr_init(r25431);
        mpfr_init_set_str(r25432, "731383733.8813744", 10, MPFR_RNDN);
        mpfr_init(r25433);
        mpfr_init(r25434);
        mpfr_init_set_str(r25435, "1", 10, MPFR_RNDN);
        mpfr_init(r25436);
        mpfr_init(r25437);
        mpfr_init(r25438);
        mpfr_init(r25439);
        mpfr_init(r25440);
        mpfr_init(r25441);
        mpfr_init(r25442);
        mpfr_init(r25443);
        mpfr_init(r25444);
        mpfr_init(r25445);
        mpfr_init(r25446);
        mpfr_init(r25447);
        mpfr_init(r25448);
        mpfr_init_set_str(r25449, "1/8", 10, MPFR_RNDN);
        mpfr_init(r25450);
        mpfr_init(r25451);
        mpfr_init_set_str(r25452, "1/2", 10, MPFR_RNDN);
        mpfr_init(r25453);
        mpfr_init(r25454);
        mpfr_init(r25455);
        mpfr_init(r25456);
        mpfr_init(r25457);
        mpfr_init(r25458);
        mpfr_init(r25459);
        mpfr_init(r25460);
        mpfr_init(r25461);
        mpfr_init(r25462);
        mpfr_init(r25463);
        mpfr_init(r25464);
        mpfr_init(r25465);
        mpfr_init(r25466);
        mpfr_init(r25467);
        mpfr_init(r25468);
}

double f_dm(double c_p, double c_n, double t, double s) {
        mpfr_set_d(r25430, s, MPFR_RNDN);
        mpfr_neg(r25431, r25430, MPFR_RNDN);
        ;
        mpfr_set_si(r25433, mpfr_cmp(r25431, r25432) <= 0, MPFR_RNDN);
        mpfr_set_d(r25434, c_n, MPFR_RNDN);
        ;
        mpfr_neg(r25436, r25435, MPFR_RNDN);
        mpfr_exp(r25437, r25431, MPFR_RNDN);
        mpfr_add(r25438, r25437, r25435, MPFR_RNDN);
        mpfr_div(r25439, r25436, r25438, MPFR_RNDN);
        mpfr_log1p(r25440, r25439, MPFR_RNDN);
        mpfr_set_d(r25441, t, MPFR_RNDN);
        mpfr_neg(r25442, r25441, MPFR_RNDN);
        mpfr_exp(r25443, r25442, MPFR_RNDN);
        mpfr_add(r25444, r25443, r25435, MPFR_RNDN);
        mpfr_div(r25445, r25436, r25444, MPFR_RNDN);
        mpfr_log1p(r25446, r25445, MPFR_RNDN);
        mpfr_sub(r25447, r25440, r25446, MPFR_RNDN);
        mpfr_set_d(r25448, c_p, MPFR_RNDN);
        ;
        mpfr_mul(r25450, r25441, r25441, MPFR_RNDN);
        mpfr_mul(r25451, r25449, r25450, MPFR_RNDN);
        ;
        mpfr_mul(r25453, r25452, r25448, MPFR_RNDN);
        mpfr_sub(r25454, r25430, r25441, MPFR_RNDN);
        mpfr_mul(r25455, r25453, r25454, MPFR_RNDN);
        mpfr_fma(r25456, r25448, r25451, r25455, MPFR_RNDN);
        mpfr_fma(r25457, r25434, r25447, r25456, MPFR_RNDN);
        mpfr_exp(r25458, r25457, MPFR_RNDN);
        mpfr_log1p(r25459, r25443, MPFR_RNDN);
        mpfr_log1p(r25460, r25437, MPFR_RNDN);
        mpfr_sub(r25461, r25459, r25460, MPFR_RNDN);
        mpfr_fma(r25462, r25449, r25430, r25452, MPFR_RNDN);
        mpfr_mul(r25463, r25441, r25452, MPFR_RNDN);
        mpfr_fma(r25464, r25431, r25462, r25463, MPFR_RNDN);
        mpfr_mul(r25465, r25434, r25464, MPFR_RNDN);
        mpfr_fma(r25466, r25461, r25448, r25465, MPFR_RNDN);
        mpfr_exp(r25467, r25466, MPFR_RNDN);
        if (mpfr_get_si(r25433, MPFR_RNDN)) { mpfr_set(r25468, r25458, MPFR_RNDN); } else { mpfr_set(r25468, r25467, MPFR_RNDN); };
        return mpfr_get_d(r25468, MPFR_RNDN);
}

