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

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

double f_if(float c0, float A, float V, float l) {
        float r31503 = c0;
        float r31504 = A;
        float r31505 = V;
        float r31506 = l;
        float r31507 = r31505 * r31506;
        float r31508 = r31504 / r31507;
        float r31509 = sqrt(r31508);
        float r31510 = r31503 * r31509;
        return r31510;
}

double f_id(double c0, double A, double V, double l) {
        double r31511 = c0;
        double r31512 = A;
        double r31513 = V;
        double r31514 = l;
        double r31515 = r31513 * r31514;
        double r31516 = r31512 / r31515;
        double r31517 = sqrt(r31516);
        double r31518 = r31511 * r31517;
        return r31518;
}


double f_of(float c0, float A, float V, float l) {
        float r31519 = A;
        float r31520 = 1.232099879448477e-293;
        bool r31521 = r31519 <= r31520;
        float r31522 = c0;
        float r31523 = V;
        float r31524 = l;
        float r31525 = r31523 * r31524;
        float r31526 = r31519 / r31525;
        float r31527 = sqrt(r31526);
        float r31528 = sqrt(r31527);
        float r31529 = r31522 * r31528;
        float r31530 = r31529 * r31528;
        float r31531 = sqrt(r31519);
        float r31532 = sqrt(r31525);
        float r31533 = r31531 / r31532;
        float r31534 = r31522 * r31533;
        float r31535 = r31521 ? r31530 : r31534;
        return r31535;
}

double f_od(double c0, double A, double V, double l) {
        double r31536 = A;
        double r31537 = 1.232099879448477e-293;
        bool r31538 = r31536 <= r31537;
        double r31539 = c0;
        double r31540 = V;
        double r31541 = l;
        double r31542 = r31540 * r31541;
        double r31543 = r31536 / r31542;
        double r31544 = sqrt(r31543);
        double r31545 = sqrt(r31544);
        double r31546 = r31539 * r31545;
        double r31547 = r31546 * r31545;
        double r31548 = sqrt(r31536);
        double r31549 = sqrt(r31542);
        double r31550 = r31548 / r31549;
        double r31551 = r31539 * r31550;
        double r31552 = r31538 ? r31547 : r31551;
        return r31552;
}

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 r31553, r31554, r31555, r31556, r31557, r31558, r31559, r31560;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r31553);
        mpfr_init(r31554);
        mpfr_init(r31555);
        mpfr_init(r31556);
        mpfr_init(r31557);
        mpfr_init(r31558);
        mpfr_init(r31559);
        mpfr_init(r31560);
}

double f_im(double c0, double A, double V, double l) {
        mpfr_set_d(r31553, c0, MPFR_RNDN);
        mpfr_set_d(r31554, A, MPFR_RNDN);
        mpfr_set_d(r31555, V, MPFR_RNDN);
        mpfr_set_d(r31556, l, MPFR_RNDN);
        mpfr_mul(r31557, r31555, r31556, MPFR_RNDN);
        mpfr_div(r31558, r31554, r31557, MPFR_RNDN);
        mpfr_sqrt(r31559, r31558, MPFR_RNDN);
        mpfr_mul(r31560, r31553, r31559, MPFR_RNDN);
        return mpfr_get_d(r31560, MPFR_RNDN);
}

static mpfr_t r31561, r31562, r31563, r31564, r31565, r31566, r31567, r31568, r31569, r31570, r31571, r31572, r31573, r31574, r31575, r31576, r31577;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31561);
        mpfr_init_set_str(r31562, "1.232099879448477e-293", 10, MPFR_RNDN);
        mpfr_init(r31563);
        mpfr_init(r31564);
        mpfr_init(r31565);
        mpfr_init(r31566);
        mpfr_init(r31567);
        mpfr_init(r31568);
        mpfr_init(r31569);
        mpfr_init(r31570);
        mpfr_init(r31571);
        mpfr_init(r31572);
        mpfr_init(r31573);
        mpfr_init(r31574);
        mpfr_init(r31575);
        mpfr_init(r31576);
        mpfr_init(r31577);
}

double f_fm(double c0, double A, double V, double l) {
        mpfr_set_d(r31561, A, MPFR_RNDN);
        ;
        mpfr_set_si(r31563, mpfr_cmp(r31561, r31562) <= 0, MPFR_RNDN);
        mpfr_set_d(r31564, c0, MPFR_RNDN);
        mpfr_set_d(r31565, V, MPFR_RNDN);
        mpfr_set_d(r31566, l, MPFR_RNDN);
        mpfr_mul(r31567, r31565, r31566, MPFR_RNDN);
        mpfr_div(r31568, r31561, r31567, MPFR_RNDN);
        mpfr_sqrt(r31569, r31568, MPFR_RNDN);
        mpfr_sqrt(r31570, r31569, MPFR_RNDN);
        mpfr_mul(r31571, r31564, r31570, MPFR_RNDN);
        mpfr_mul(r31572, r31571, r31570, MPFR_RNDN);
        mpfr_sqrt(r31573, r31561, MPFR_RNDN);
        mpfr_sqrt(r31574, r31567, MPFR_RNDN);
        mpfr_div(r31575, r31573, r31574, MPFR_RNDN);
        mpfr_mul(r31576, r31564, r31575, MPFR_RNDN);
        if (mpfr_get_si(r31563, MPFR_RNDN)) { mpfr_set(r31577, r31572, MPFR_RNDN); } else { mpfr_set(r31577, r31576, MPFR_RNDN); };
        return mpfr_get_d(r31577, MPFR_RNDN);
}

static mpfr_t r31578, r31579, r31580, r31581, r31582, r31583, r31584, r31585, r31586, r31587, r31588, r31589, r31590, r31591, r31592, r31593, r31594;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31578);
        mpfr_init_set_str(r31579, "1.232099879448477e-293", 10, MPFR_RNDN);
        mpfr_init(r31580);
        mpfr_init(r31581);
        mpfr_init(r31582);
        mpfr_init(r31583);
        mpfr_init(r31584);
        mpfr_init(r31585);
        mpfr_init(r31586);
        mpfr_init(r31587);
        mpfr_init(r31588);
        mpfr_init(r31589);
        mpfr_init(r31590);
        mpfr_init(r31591);
        mpfr_init(r31592);
        mpfr_init(r31593);
        mpfr_init(r31594);
}

double f_dm(double c0, double A, double V, double l) {
        mpfr_set_d(r31578, A, MPFR_RNDN);
        ;
        mpfr_set_si(r31580, mpfr_cmp(r31578, r31579) <= 0, MPFR_RNDN);
        mpfr_set_d(r31581, c0, MPFR_RNDN);
        mpfr_set_d(r31582, V, MPFR_RNDN);
        mpfr_set_d(r31583, l, MPFR_RNDN);
        mpfr_mul(r31584, r31582, r31583, MPFR_RNDN);
        mpfr_div(r31585, r31578, r31584, MPFR_RNDN);
        mpfr_sqrt(r31586, r31585, MPFR_RNDN);
        mpfr_sqrt(r31587, r31586, MPFR_RNDN);
        mpfr_mul(r31588, r31581, r31587, MPFR_RNDN);
        mpfr_mul(r31589, r31588, r31587, MPFR_RNDN);
        mpfr_sqrt(r31590, r31578, MPFR_RNDN);
        mpfr_sqrt(r31591, r31584, MPFR_RNDN);
        mpfr_div(r31592, r31590, r31591, MPFR_RNDN);
        mpfr_mul(r31593, r31581, r31592, MPFR_RNDN);
        if (mpfr_get_si(r31580, MPFR_RNDN)) { mpfr_set(r31594, r31589, MPFR_RNDN); } else { mpfr_set(r31594, r31593, MPFR_RNDN); };
        return mpfr_get_d(r31594, MPFR_RNDN);
}

