#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 r31540 = c0;
        float r31541 = A;
        float r31542 = V;
        float r31543 = l;
        float r31544 = r31542 * r31543;
        float r31545 = r31541 / r31544;
        float r31546 = sqrt(r31545);
        float r31547 = r31540 * r31546;
        return r31547;
}

double f_id(double c0, double A, double V, double l) {
        double r31548 = c0;
        double r31549 = A;
        double r31550 = V;
        double r31551 = l;
        double r31552 = r31550 * r31551;
        double r31553 = r31549 / r31552;
        double r31554 = sqrt(r31553);
        double r31555 = r31548 * r31554;
        return r31555;
}


double f_of(float c0, float A, float V, float l) {
        float r31556 = A;
        float r31557 = 3.6519349309068006e-301;
        bool r31558 = r31556 <= r31557;
        float r31559 = c0;
        float r31560 = V;
        float r31561 = l;
        float r31562 = r31560 * r31561;
        float r31563 = r31556 / r31562;
        float r31564 = sqrt(r31563);
        float r31565 = sqrt(r31564);
        float r31566 = r31559 * r31565;
        float r31567 = r31566 * r31565;
        float r31568 = sqrt(r31556);
        float r31569 = sqrt(r31562);
        float r31570 = r31568 / r31569;
        float r31571 = r31559 * r31570;
        float r31572 = r31558 ? r31567 : r31571;
        return r31572;
}

double f_od(double c0, double A, double V, double l) {
        double r31573 = A;
        double r31574 = 3.6519349309068006e-301;
        bool r31575 = r31573 <= r31574;
        double r31576 = c0;
        double r31577 = V;
        double r31578 = l;
        double r31579 = r31577 * r31578;
        double r31580 = r31573 / r31579;
        double r31581 = sqrt(r31580);
        double r31582 = sqrt(r31581);
        double r31583 = r31576 * r31582;
        double r31584 = r31583 * r31582;
        double r31585 = sqrt(r31573);
        double r31586 = sqrt(r31579);
        double r31587 = r31585 / r31586;
        double r31588 = r31576 * r31587;
        double r31589 = r31575 ? r31584 : r31588;
        return r31589;
}

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 r31590, r31591, r31592, r31593, r31594, r31595, r31596, r31597;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r31590);
        mpfr_init(r31591);
        mpfr_init(r31592);
        mpfr_init(r31593);
        mpfr_init(r31594);
        mpfr_init(r31595);
        mpfr_init(r31596);
        mpfr_init(r31597);
}

double f_im(double c0, double A, double V, double l) {
        mpfr_set_d(r31590, c0, MPFR_RNDN);
        mpfr_set_d(r31591, A, MPFR_RNDN);
        mpfr_set_d(r31592, V, MPFR_RNDN);
        mpfr_set_d(r31593, l, MPFR_RNDN);
        mpfr_mul(r31594, r31592, r31593, MPFR_RNDN);
        mpfr_div(r31595, r31591, r31594, MPFR_RNDN);
        mpfr_sqrt(r31596, r31595, MPFR_RNDN);
        mpfr_mul(r31597, r31590, r31596, MPFR_RNDN);
        return mpfr_get_d(r31597, MPFR_RNDN);
}

static mpfr_t r31598, r31599, r31600, r31601, r31602, r31603, r31604, r31605, r31606, r31607, r31608, r31609, r31610, r31611, r31612, r31613, r31614;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31598);
        mpfr_init_set_str(r31599, "3.6519349309068006e-301", 10, MPFR_RNDN);
        mpfr_init(r31600);
        mpfr_init(r31601);
        mpfr_init(r31602);
        mpfr_init(r31603);
        mpfr_init(r31604);
        mpfr_init(r31605);
        mpfr_init(r31606);
        mpfr_init(r31607);
        mpfr_init(r31608);
        mpfr_init(r31609);
        mpfr_init(r31610);
        mpfr_init(r31611);
        mpfr_init(r31612);
        mpfr_init(r31613);
        mpfr_init(r31614);
}

double f_fm(double c0, double A, double V, double l) {
        mpfr_set_d(r31598, A, MPFR_RNDN);
        ;
        mpfr_set_si(r31600, mpfr_cmp(r31598, r31599) <= 0, MPFR_RNDN);
        mpfr_set_d(r31601, c0, MPFR_RNDN);
        mpfr_set_d(r31602, V, MPFR_RNDN);
        mpfr_set_d(r31603, l, MPFR_RNDN);
        mpfr_mul(r31604, r31602, r31603, MPFR_RNDN);
        mpfr_div(r31605, r31598, r31604, MPFR_RNDN);
        mpfr_sqrt(r31606, r31605, MPFR_RNDN);
        mpfr_sqrt(r31607, r31606, MPFR_RNDN);
        mpfr_mul(r31608, r31601, r31607, MPFR_RNDN);
        mpfr_mul(r31609, r31608, r31607, MPFR_RNDN);
        mpfr_sqrt(r31610, r31598, MPFR_RNDN);
        mpfr_sqrt(r31611, r31604, MPFR_RNDN);
        mpfr_div(r31612, r31610, r31611, MPFR_RNDN);
        mpfr_mul(r31613, r31601, r31612, MPFR_RNDN);
        if (mpfr_get_si(r31600, MPFR_RNDN)) { mpfr_set(r31614, r31609, MPFR_RNDN); } else { mpfr_set(r31614, r31613, MPFR_RNDN); };
        return mpfr_get_d(r31614, MPFR_RNDN);
}

static mpfr_t r31615, r31616, r31617, r31618, r31619, r31620, r31621, r31622, r31623, r31624, r31625, r31626, r31627, r31628, r31629, r31630, r31631;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31615);
        mpfr_init_set_str(r31616, "3.6519349309068006e-301", 10, MPFR_RNDN);
        mpfr_init(r31617);
        mpfr_init(r31618);
        mpfr_init(r31619);
        mpfr_init(r31620);
        mpfr_init(r31621);
        mpfr_init(r31622);
        mpfr_init(r31623);
        mpfr_init(r31624);
        mpfr_init(r31625);
        mpfr_init(r31626);
        mpfr_init(r31627);
        mpfr_init(r31628);
        mpfr_init(r31629);
        mpfr_init(r31630);
        mpfr_init(r31631);
}

double f_dm(double c0, double A, double V, double l) {
        mpfr_set_d(r31615, A, MPFR_RNDN);
        ;
        mpfr_set_si(r31617, mpfr_cmp(r31615, r31616) <= 0, MPFR_RNDN);
        mpfr_set_d(r31618, c0, MPFR_RNDN);
        mpfr_set_d(r31619, V, MPFR_RNDN);
        mpfr_set_d(r31620, l, MPFR_RNDN);
        mpfr_mul(r31621, r31619, r31620, MPFR_RNDN);
        mpfr_div(r31622, r31615, r31621, MPFR_RNDN);
        mpfr_sqrt(r31623, r31622, MPFR_RNDN);
        mpfr_sqrt(r31624, r31623, MPFR_RNDN);
        mpfr_mul(r31625, r31618, r31624, MPFR_RNDN);
        mpfr_mul(r31626, r31625, r31624, MPFR_RNDN);
        mpfr_sqrt(r31627, r31615, MPFR_RNDN);
        mpfr_sqrt(r31628, r31621, MPFR_RNDN);
        mpfr_div(r31629, r31627, r31628, MPFR_RNDN);
        mpfr_mul(r31630, r31618, r31629, MPFR_RNDN);
        if (mpfr_get_si(r31617, MPFR_RNDN)) { mpfr_set(r31631, r31626, MPFR_RNDN); } else { mpfr_set(r31631, r31630, MPFR_RNDN); };
        return mpfr_get_d(r31631, MPFR_RNDN);
}

