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

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

double f_if(float w0, float M, float D, float h, float l, float d) {
        float r30463497 = w0;
        float r30463498 = 1;
        float r30463499 = M;
        float r30463500 = D;
        float r30463501 = r30463499 * r30463500;
        float r30463502 = 2;
        float r30463503 = d;
        float r30463504 = r30463502 * r30463503;
        float r30463505 = r30463501 / r30463504;
        float r30463506 = pow(r30463505, r30463502);
        float r30463507 = h;
        float r30463508 = l;
        float r30463509 = r30463507 / r30463508;
        float r30463510 = r30463506 * r30463509;
        float r30463511 = r30463498 - r30463510;
        float r30463512 = sqrt(r30463511);
        float r30463513 = r30463497 * r30463512;
        return r30463513;
}

double f_id(double w0, double M, double D, double h, double l, double d) {
        double r30463514 = w0;
        double r30463515 = 1;
        double r30463516 = M;
        double r30463517 = D;
        double r30463518 = r30463516 * r30463517;
        double r30463519 = 2;
        double r30463520 = d;
        double r30463521 = r30463519 * r30463520;
        double r30463522 = r30463518 / r30463521;
        double r30463523 = pow(r30463522, r30463519);
        double r30463524 = h;
        double r30463525 = l;
        double r30463526 = r30463524 / r30463525;
        double r30463527 = r30463523 * r30463526;
        double r30463528 = r30463515 - r30463527;
        double r30463529 = sqrt(r30463528);
        double r30463530 = r30463514 * r30463529;
        return r30463530;
}


double f_of(float w0, float M, float D, float h, float l, float d) {
        float r30463531 = w0;
        float r30463532 = 1;
        float r30463533 = M;
        float r30463534 = D;
        float r30463535 = r30463533 * r30463534;
        float r30463536 = 2;
        float r30463537 = d;
        float r30463538 = r30463536 * r30463537;
        float r30463539 = r30463535 / r30463538;
        float r30463540 = l;
        float r30463541 = h;
        float r30463542 = r30463539 * r30463541;
        float r30463543 = cbrt(r30463542);
        float r30463544 = r30463543 * r30463543;
        float r30463545 = r30463544 * r30463543;
        float r30463546 = r30463540 / r30463545;
        float r30463547 = r30463539 / r30463546;
        float r30463548 = r30463532 - r30463547;
        float r30463549 = sqrt(r30463548);
        float r30463550 = r30463531 * r30463549;
        return r30463550;
}

double f_od(double w0, double M, double D, double h, double l, double d) {
        double r30463551 = w0;
        double r30463552 = 1;
        double r30463553 = M;
        double r30463554 = D;
        double r30463555 = r30463553 * r30463554;
        double r30463556 = 2;
        double r30463557 = d;
        double r30463558 = r30463556 * r30463557;
        double r30463559 = r30463555 / r30463558;
        double r30463560 = l;
        double r30463561 = h;
        double r30463562 = r30463559 * r30463561;
        double r30463563 = cbrt(r30463562);
        double r30463564 = r30463563 * r30463563;
        double r30463565 = r30463564 * r30463563;
        double r30463566 = r30463560 / r30463565;
        double r30463567 = r30463559 / r30463566;
        double r30463568 = r30463552 - r30463567;
        double r30463569 = sqrt(r30463568);
        double r30463570 = r30463551 * r30463569;
        return r30463570;
}

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 r30463571, r30463572, r30463573, r30463574, r30463575, r30463576, r30463577, r30463578, r30463579, r30463580, r30463581, r30463582, r30463583, r30463584, r30463585, r30463586, r30463587;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r30463571);
        mpfr_init_set_str(r30463572, "1", 10, MPFR_RNDN);
        mpfr_init(r30463573);
        mpfr_init(r30463574);
        mpfr_init(r30463575);
        mpfr_init_set_str(r30463576, "2", 10, MPFR_RNDN);
        mpfr_init(r30463577);
        mpfr_init(r30463578);
        mpfr_init(r30463579);
        mpfr_init(r30463580);
        mpfr_init(r30463581);
        mpfr_init(r30463582);
        mpfr_init(r30463583);
        mpfr_init(r30463584);
        mpfr_init(r30463585);
        mpfr_init(r30463586);
        mpfr_init(r30463587);
}

double f_im(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r30463571, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r30463573, M, MPFR_RNDN);
        mpfr_set_d(r30463574, D, MPFR_RNDN);
        mpfr_mul(r30463575, r30463573, r30463574, MPFR_RNDN);
        ;
        mpfr_set_d(r30463577, d, MPFR_RNDN);
        mpfr_mul(r30463578, r30463576, r30463577, MPFR_RNDN);
        mpfr_div(r30463579, r30463575, r30463578, MPFR_RNDN);
        mpfr_pow(r30463580, r30463579, r30463576, MPFR_RNDN);
        mpfr_set_d(r30463581, h, MPFR_RNDN);
        mpfr_set_d(r30463582, l, MPFR_RNDN);
        mpfr_div(r30463583, r30463581, r30463582, MPFR_RNDN);
        mpfr_mul(r30463584, r30463580, r30463583, MPFR_RNDN);
        mpfr_sub(r30463585, r30463572, r30463584, MPFR_RNDN);
        mpfr_sqrt(r30463586, r30463585, MPFR_RNDN);
        mpfr_mul(r30463587, r30463571, r30463586, MPFR_RNDN);
        return mpfr_get_d(r30463587, MPFR_RNDN);
}

static mpfr_t r30463588, r30463589, r30463590, r30463591, r30463592, r30463593, r30463594, r30463595, r30463596, r30463597, r30463598, r30463599, r30463600, r30463601, r30463602, r30463603, r30463604, r30463605, r30463606, r30463607;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r30463588);
        mpfr_init_set_str(r30463589, "1", 10, MPFR_RNDN);
        mpfr_init(r30463590);
        mpfr_init(r30463591);
        mpfr_init(r30463592);
        mpfr_init_set_str(r30463593, "2", 10, MPFR_RNDN);
        mpfr_init(r30463594);
        mpfr_init(r30463595);
        mpfr_init(r30463596);
        mpfr_init(r30463597);
        mpfr_init(r30463598);
        mpfr_init(r30463599);
        mpfr_init(r30463600);
        mpfr_init(r30463601);
        mpfr_init(r30463602);
        mpfr_init(r30463603);
        mpfr_init(r30463604);
        mpfr_init(r30463605);
        mpfr_init(r30463606);
        mpfr_init(r30463607);
}

double f_fm(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r30463588, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r30463590, M, MPFR_RNDN);
        mpfr_set_d(r30463591, D, MPFR_RNDN);
        mpfr_mul(r30463592, r30463590, r30463591, MPFR_RNDN);
        ;
        mpfr_set_d(r30463594, d, MPFR_RNDN);
        mpfr_mul(r30463595, r30463593, r30463594, MPFR_RNDN);
        mpfr_div(r30463596, r30463592, r30463595, MPFR_RNDN);
        mpfr_set_d(r30463597, l, MPFR_RNDN);
        mpfr_set_d(r30463598, h, MPFR_RNDN);
        mpfr_mul(r30463599, r30463596, r30463598, MPFR_RNDN);
        mpfr_cbrt(r30463600, r30463599, MPFR_RNDN);
        mpfr_mul(r30463601, r30463600, r30463600, MPFR_RNDN);
        mpfr_mul(r30463602, r30463601, r30463600, MPFR_RNDN);
        mpfr_div(r30463603, r30463597, r30463602, MPFR_RNDN);
        mpfr_div(r30463604, r30463596, r30463603, MPFR_RNDN);
        mpfr_sub(r30463605, r30463589, r30463604, MPFR_RNDN);
        mpfr_sqrt(r30463606, r30463605, MPFR_RNDN);
        mpfr_mul(r30463607, r30463588, r30463606, MPFR_RNDN);
        return mpfr_get_d(r30463607, MPFR_RNDN);
}

static mpfr_t r30463608, r30463609, r30463610, r30463611, r30463612, r30463613, r30463614, r30463615, r30463616, r30463617, r30463618, r30463619, r30463620, r30463621, r30463622, r30463623, r30463624, r30463625, r30463626, r30463627;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r30463608);
        mpfr_init_set_str(r30463609, "1", 10, MPFR_RNDN);
        mpfr_init(r30463610);
        mpfr_init(r30463611);
        mpfr_init(r30463612);
        mpfr_init_set_str(r30463613, "2", 10, MPFR_RNDN);
        mpfr_init(r30463614);
        mpfr_init(r30463615);
        mpfr_init(r30463616);
        mpfr_init(r30463617);
        mpfr_init(r30463618);
        mpfr_init(r30463619);
        mpfr_init(r30463620);
        mpfr_init(r30463621);
        mpfr_init(r30463622);
        mpfr_init(r30463623);
        mpfr_init(r30463624);
        mpfr_init(r30463625);
        mpfr_init(r30463626);
        mpfr_init(r30463627);
}

double f_dm(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r30463608, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r30463610, M, MPFR_RNDN);
        mpfr_set_d(r30463611, D, MPFR_RNDN);
        mpfr_mul(r30463612, r30463610, r30463611, MPFR_RNDN);
        ;
        mpfr_set_d(r30463614, d, MPFR_RNDN);
        mpfr_mul(r30463615, r30463613, r30463614, MPFR_RNDN);
        mpfr_div(r30463616, r30463612, r30463615, MPFR_RNDN);
        mpfr_set_d(r30463617, l, MPFR_RNDN);
        mpfr_set_d(r30463618, h, MPFR_RNDN);
        mpfr_mul(r30463619, r30463616, r30463618, MPFR_RNDN);
        mpfr_cbrt(r30463620, r30463619, MPFR_RNDN);
        mpfr_mul(r30463621, r30463620, r30463620, MPFR_RNDN);
        mpfr_mul(r30463622, r30463621, r30463620, MPFR_RNDN);
        mpfr_div(r30463623, r30463617, r30463622, MPFR_RNDN);
        mpfr_div(r30463624, r30463616, r30463623, MPFR_RNDN);
        mpfr_sub(r30463625, r30463609, r30463624, MPFR_RNDN);
        mpfr_sqrt(r30463626, r30463625, MPFR_RNDN);
        mpfr_mul(r30463627, r30463608, r30463626, MPFR_RNDN);
        return mpfr_get_d(r30463627, MPFR_RNDN);
}

