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

char *name = "Henrywood and Agarwal, Equation (13)";

double f_if(float c0, float w, float h, float D, float d, float M) {
        float r31323 = c0;
        float r31324 = 2;
        float r31325 = w;
        float r31326 = r31324 * r31325;
        float r31327 = r31323 / r31326;
        float r31328 = d;
        float r31329 = r31328 * r31328;
        float r31330 = r31323 * r31329;
        float r31331 = h;
        float r31332 = r31325 * r31331;
        float r31333 = D;
        float r31334 = r31333 * r31333;
        float r31335 = r31332 * r31334;
        float r31336 = r31330 / r31335;
        float r31337 = r31336 * r31336;
        float r31338 = M;
        float r31339 = r31338 * r31338;
        float r31340 = r31337 - r31339;
        float r31341 = sqrt(r31340);
        float r31342 = r31336 + r31341;
        float r31343 = r31327 * r31342;
        return r31343;
}

double f_id(double c0, double w, double h, double D, double d, double M) {
        double r31344 = c0;
        double r31345 = 2;
        double r31346 = w;
        double r31347 = r31345 * r31346;
        double r31348 = r31344 / r31347;
        double r31349 = d;
        double r31350 = r31349 * r31349;
        double r31351 = r31344 * r31350;
        double r31352 = h;
        double r31353 = r31346 * r31352;
        double r31354 = D;
        double r31355 = r31354 * r31354;
        double r31356 = r31353 * r31355;
        double r31357 = r31351 / r31356;
        double r31358 = r31357 * r31357;
        double r31359 = M;
        double r31360 = r31359 * r31359;
        double r31361 = r31358 - r31360;
        double r31362 = sqrt(r31361);
        double r31363 = r31357 + r31362;
        double r31364 = r31348 * r31363;
        return r31364;
}


double f_of(float c0, float w, float h, float D, float d, float M) {
        float r31365 = c0;
        float r31366 = -1.828010956563134e+35;
        bool r31367 = r31365 <= r31366;
        float r31368 = 0;
        float r31369 = -1.5858025515425473e-113;
        bool r31370 = r31365 <= r31369;
        float r31371 = 2;
        float r31372 = w;
        float r31373 = r31371 * r31372;
        float r31374 = r31365 / r31373;
        float r31375 = M;
        float r31376 = 1;
        float r31377 = r31375 / r31376;
        float r31378 = r31365 / r31372;
        float r31379 = h;
        float r31380 = r31378 / r31379;
        float r31381 = d;
        float r31382 = D;
        float r31383 = r31381 / r31382;
        float r31384 = r31383 * r31383;
        float r31385 = r31380 * r31384;
        float r31386 = r31385 * r31385;
        float r31387 = r31375 * r31375;
        float r31388 = r31386 - r31387;
        float r31389 = sqrt(r31388);
        float r31390 = r31385 - r31389;
        float r31391 = r31375 / r31390;
        float r31392 = r31377 * r31391;
        float r31393 = r31374 * r31392;
        float r31394 = r31370 ? r31393 : r31368;
        float r31395 = r31367 ? r31368 : r31394;
        return r31395;
}

double f_od(double c0, double w, double h, double D, double d, double M) {
        double r31396 = c0;
        double r31397 = -1.828010956563134e+35;
        bool r31398 = r31396 <= r31397;
        double r31399 = 0;
        double r31400 = -1.5858025515425473e-113;
        bool r31401 = r31396 <= r31400;
        double r31402 = 2;
        double r31403 = w;
        double r31404 = r31402 * r31403;
        double r31405 = r31396 / r31404;
        double r31406 = M;
        double r31407 = 1;
        double r31408 = r31406 / r31407;
        double r31409 = r31396 / r31403;
        double r31410 = h;
        double r31411 = r31409 / r31410;
        double r31412 = d;
        double r31413 = D;
        double r31414 = r31412 / r31413;
        double r31415 = r31414 * r31414;
        double r31416 = r31411 * r31415;
        double r31417 = r31416 * r31416;
        double r31418 = r31406 * r31406;
        double r31419 = r31417 - r31418;
        double r31420 = sqrt(r31419);
        double r31421 = r31416 - r31420;
        double r31422 = r31406 / r31421;
        double r31423 = r31408 * r31422;
        double r31424 = r31405 * r31423;
        double r31425 = r31401 ? r31424 : r31399;
        double r31426 = r31398 ? r31399 : r31425;
        return r31426;
}

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 r31427, r31428, r31429, r31430, r31431, r31432, r31433, r31434, r31435, r31436, r31437, r31438, r31439, r31440, r31441, r31442, r31443, r31444, r31445, r31446, r31447;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(5264);
        mpfr_init(r31427);
        mpfr_init_set_str(r31428, "2", 10, MPFR_RNDN);
        mpfr_init(r31429);
        mpfr_init(r31430);
        mpfr_init(r31431);
        mpfr_init(r31432);
        mpfr_init(r31433);
        mpfr_init(r31434);
        mpfr_init(r31435);
        mpfr_init(r31436);
        mpfr_init(r31437);
        mpfr_init(r31438);
        mpfr_init(r31439);
        mpfr_init(r31440);
        mpfr_init(r31441);
        mpfr_init(r31442);
        mpfr_init(r31443);
        mpfr_init(r31444);
        mpfr_init(r31445);
        mpfr_init(r31446);
        mpfr_init(r31447);
}

double f_im(double c0, double w, double h, double D, double d, double M) {
        mpfr_set_d(r31427, c0, MPFR_RNDN);
        ;
        mpfr_set_d(r31429, w, MPFR_RNDN);
        mpfr_mul(r31430, r31428, r31429, MPFR_RNDN);
        mpfr_div(r31431, r31427, r31430, MPFR_RNDN);
        mpfr_set_d(r31432, d, MPFR_RNDN);
        mpfr_mul(r31433, r31432, r31432, MPFR_RNDN);
        mpfr_mul(r31434, r31427, r31433, MPFR_RNDN);
        mpfr_set_d(r31435, h, MPFR_RNDN);
        mpfr_mul(r31436, r31429, r31435, MPFR_RNDN);
        mpfr_set_d(r31437, D, MPFR_RNDN);
        mpfr_mul(r31438, r31437, r31437, MPFR_RNDN);
        mpfr_mul(r31439, r31436, r31438, MPFR_RNDN);
        mpfr_div(r31440, r31434, r31439, MPFR_RNDN);
        mpfr_mul(r31441, r31440, r31440, MPFR_RNDN);
        mpfr_set_d(r31442, M, MPFR_RNDN);
        mpfr_mul(r31443, r31442, r31442, MPFR_RNDN);
        mpfr_sub(r31444, r31441, r31443, MPFR_RNDN);
        mpfr_sqrt(r31445, r31444, MPFR_RNDN);
        mpfr_add(r31446, r31440, r31445, MPFR_RNDN);
        mpfr_mul(r31447, r31431, r31446, MPFR_RNDN);
        return mpfr_get_d(r31447, MPFR_RNDN);
}

static mpfr_t r31448, r31449, r31450, r31451, r31452, r31453, r31454, r31455, r31456, r31457, r31458, r31459, r31460, r31461, r31462, r31463, r31464, r31465, r31466, r31467, r31468, r31469, r31470, r31471, r31472, r31473, r31474, r31475, r31476, r31477, r31478;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(5264);
        mpfr_init(r31448);
        mpfr_init_set_str(r31449, "-1.828010956563134e+35", 10, MPFR_RNDN);
        mpfr_init(r31450);
        mpfr_init_set_str(r31451, "0", 10, MPFR_RNDN);
        mpfr_init_set_str(r31452, "-1.5858025515425473e-113", 10, MPFR_RNDN);
        mpfr_init(r31453);
        mpfr_init_set_str(r31454, "2", 10, MPFR_RNDN);
        mpfr_init(r31455);
        mpfr_init(r31456);
        mpfr_init(r31457);
        mpfr_init(r31458);
        mpfr_init_set_str(r31459, "1", 10, MPFR_RNDN);
        mpfr_init(r31460);
        mpfr_init(r31461);
        mpfr_init(r31462);
        mpfr_init(r31463);
        mpfr_init(r31464);
        mpfr_init(r31465);
        mpfr_init(r31466);
        mpfr_init(r31467);
        mpfr_init(r31468);
        mpfr_init(r31469);
        mpfr_init(r31470);
        mpfr_init(r31471);
        mpfr_init(r31472);
        mpfr_init(r31473);
        mpfr_init(r31474);
        mpfr_init(r31475);
        mpfr_init(r31476);
        mpfr_init(r31477);
        mpfr_init(r31478);
}

double f_fm(double c0, double w, double h, double D, double d, double M) {
        mpfr_set_d(r31448, c0, MPFR_RNDN);
        ;
        mpfr_set_si(r31450, mpfr_cmp(r31448, r31449) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_si(r31453, mpfr_cmp(r31448, r31452) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r31455, w, MPFR_RNDN);
        mpfr_mul(r31456, r31454, r31455, MPFR_RNDN);
        mpfr_div(r31457, r31448, r31456, MPFR_RNDN);
        mpfr_set_d(r31458, M, MPFR_RNDN);
        ;
        mpfr_div(r31460, r31458, r31459, MPFR_RNDN);
        mpfr_div(r31461, r31448, r31455, MPFR_RNDN);
        mpfr_set_d(r31462, h, MPFR_RNDN);
        mpfr_div(r31463, r31461, r31462, MPFR_RNDN);
        mpfr_set_d(r31464, d, MPFR_RNDN);
        mpfr_set_d(r31465, D, MPFR_RNDN);
        mpfr_div(r31466, r31464, r31465, MPFR_RNDN);
        mpfr_mul(r31467, r31466, r31466, MPFR_RNDN);
        mpfr_mul(r31468, r31463, r31467, MPFR_RNDN);
        mpfr_mul(r31469, r31468, r31468, MPFR_RNDN);
        mpfr_mul(r31470, r31458, r31458, MPFR_RNDN);
        mpfr_sub(r31471, r31469, r31470, MPFR_RNDN);
        mpfr_sqrt(r31472, r31471, MPFR_RNDN);
        mpfr_sub(r31473, r31468, r31472, MPFR_RNDN);
        mpfr_div(r31474, r31458, r31473, MPFR_RNDN);
        mpfr_mul(r31475, r31460, r31474, MPFR_RNDN);
        mpfr_mul(r31476, r31457, r31475, MPFR_RNDN);
        if (mpfr_get_si(r31453, MPFR_RNDN)) { mpfr_set(r31477, r31476, MPFR_RNDN); } else { mpfr_set(r31477, r31451, MPFR_RNDN); };
        if (mpfr_get_si(r31450, MPFR_RNDN)) { mpfr_set(r31478, r31451, MPFR_RNDN); } else { mpfr_set(r31478, r31477, MPFR_RNDN); };
        return mpfr_get_d(r31478, MPFR_RNDN);
}

static mpfr_t r31479, r31480, r31481, r31482, r31483, r31484, r31485, r31486, r31487, r31488, r31489, r31490, r31491, r31492, r31493, r31494, r31495, r31496, r31497, r31498, r31499, r31500, r31501, r31502, r31503, r31504, r31505, r31506, r31507, r31508, r31509;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(5264);
        mpfr_init(r31479);
        mpfr_init_set_str(r31480, "-1.828010956563134e+35", 10, MPFR_RNDN);
        mpfr_init(r31481);
        mpfr_init_set_str(r31482, "0", 10, MPFR_RNDN);
        mpfr_init_set_str(r31483, "-1.5858025515425473e-113", 10, MPFR_RNDN);
        mpfr_init(r31484);
        mpfr_init_set_str(r31485, "2", 10, MPFR_RNDN);
        mpfr_init(r31486);
        mpfr_init(r31487);
        mpfr_init(r31488);
        mpfr_init(r31489);
        mpfr_init_set_str(r31490, "1", 10, MPFR_RNDN);
        mpfr_init(r31491);
        mpfr_init(r31492);
        mpfr_init(r31493);
        mpfr_init(r31494);
        mpfr_init(r31495);
        mpfr_init(r31496);
        mpfr_init(r31497);
        mpfr_init(r31498);
        mpfr_init(r31499);
        mpfr_init(r31500);
        mpfr_init(r31501);
        mpfr_init(r31502);
        mpfr_init(r31503);
        mpfr_init(r31504);
        mpfr_init(r31505);
        mpfr_init(r31506);
        mpfr_init(r31507);
        mpfr_init(r31508);
        mpfr_init(r31509);
}

double f_dm(double c0, double w, double h, double D, double d, double M) {
        mpfr_set_d(r31479, c0, MPFR_RNDN);
        ;
        mpfr_set_si(r31481, mpfr_cmp(r31479, r31480) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_si(r31484, mpfr_cmp(r31479, r31483) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r31486, w, MPFR_RNDN);
        mpfr_mul(r31487, r31485, r31486, MPFR_RNDN);
        mpfr_div(r31488, r31479, r31487, MPFR_RNDN);
        mpfr_set_d(r31489, M, MPFR_RNDN);
        ;
        mpfr_div(r31491, r31489, r31490, MPFR_RNDN);
        mpfr_div(r31492, r31479, r31486, MPFR_RNDN);
        mpfr_set_d(r31493, h, MPFR_RNDN);
        mpfr_div(r31494, r31492, r31493, MPFR_RNDN);
        mpfr_set_d(r31495, d, MPFR_RNDN);
        mpfr_set_d(r31496, D, MPFR_RNDN);
        mpfr_div(r31497, r31495, r31496, MPFR_RNDN);
        mpfr_mul(r31498, r31497, r31497, MPFR_RNDN);
        mpfr_mul(r31499, r31494, r31498, MPFR_RNDN);
        mpfr_mul(r31500, r31499, r31499, MPFR_RNDN);
        mpfr_mul(r31501, r31489, r31489, MPFR_RNDN);
        mpfr_sub(r31502, r31500, r31501, MPFR_RNDN);
        mpfr_sqrt(r31503, r31502, MPFR_RNDN);
        mpfr_sub(r31504, r31499, r31503, MPFR_RNDN);
        mpfr_div(r31505, r31489, r31504, MPFR_RNDN);
        mpfr_mul(r31506, r31491, r31505, MPFR_RNDN);
        mpfr_mul(r31507, r31488, r31506, MPFR_RNDN);
        if (mpfr_get_si(r31484, MPFR_RNDN)) { mpfr_set(r31508, r31507, MPFR_RNDN); } else { mpfr_set(r31508, r31482, MPFR_RNDN); };
        if (mpfr_get_si(r31481, MPFR_RNDN)) { mpfr_set(r31509, r31482, MPFR_RNDN); } else { mpfr_set(r31509, r31508, MPFR_RNDN); };
        return mpfr_get_d(r31509, MPFR_RNDN);
}

