#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 r31627 = c0;
        float r31628 = A;
        float r31629 = V;
        float r31630 = l;
        float r31631 = r31629 * r31630;
        float r31632 = r31628 / r31631;
        float r31633 = sqrt(r31632);
        float r31634 = r31627 * r31633;
        return r31634;
}

double f_id(double c0, double A, double V, double l) {
        double r31635 = c0;
        double r31636 = A;
        double r31637 = V;
        double r31638 = l;
        double r31639 = r31637 * r31638;
        double r31640 = r31636 / r31639;
        double r31641 = sqrt(r31640);
        double r31642 = r31635 * r31641;
        return r31642;
}


double f_of(float c0, float A, float V, float l) {
        float r31643 = A;
        float r31644 = 3.6519349309068006e-301;
        bool r31645 = r31643 <= r31644;
        float r31646 = c0;
        float r31647 = V;
        float r31648 = l;
        float r31649 = r31647 * r31648;
        float r31650 = r31643 / r31649;
        float r31651 = sqrt(r31650);
        float r31652 = sqrt(r31651);
        float r31653 = r31646 * r31652;
        float r31654 = r31653 * r31652;
        float r31655 = sqrt(r31643);
        float r31656 = sqrt(r31649);
        float r31657 = r31655 / r31656;
        float r31658 = r31646 * r31657;
        float r31659 = r31645 ? r31654 : r31658;
        return r31659;
}

double f_od(double c0, double A, double V, double l) {
        double r31660 = A;
        double r31661 = 3.6519349309068006e-301;
        bool r31662 = r31660 <= r31661;
        double r31663 = c0;
        double r31664 = V;
        double r31665 = l;
        double r31666 = r31664 * r31665;
        double r31667 = r31660 / r31666;
        double r31668 = sqrt(r31667);
        double r31669 = sqrt(r31668);
        double r31670 = r31663 * r31669;
        double r31671 = r31670 * r31669;
        double r31672 = sqrt(r31660);
        double r31673 = sqrt(r31666);
        double r31674 = r31672 / r31673;
        double r31675 = r31663 * r31674;
        double r31676 = r31662 ? r31671 : r31675;
        return r31676;
}

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 r31677, r31678, r31679, r31680, r31681, r31682, r31683, r31684;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r31677);
        mpfr_init(r31678);
        mpfr_init(r31679);
        mpfr_init(r31680);
        mpfr_init(r31681);
        mpfr_init(r31682);
        mpfr_init(r31683);
        mpfr_init(r31684);
}

double f_im(double c0, double A, double V, double l) {
        mpfr_set_d(r31677, c0, MPFR_RNDN);
        mpfr_set_d(r31678, A, MPFR_RNDN);
        mpfr_set_d(r31679, V, MPFR_RNDN);
        mpfr_set_d(r31680, l, MPFR_RNDN);
        mpfr_mul(r31681, r31679, r31680, MPFR_RNDN);
        mpfr_div(r31682, r31678, r31681, MPFR_RNDN);
        mpfr_sqrt(r31683, r31682, MPFR_RNDN);
        mpfr_mul(r31684, r31677, r31683, MPFR_RNDN);
        return mpfr_get_d(r31684, MPFR_RNDN);
}

static mpfr_t r31685, r31686, r31687, r31688, r31689, r31690, r31691, r31692, r31693, r31694, r31695, r31696, r31697, r31698, r31699, r31700, r31701;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31685);
        mpfr_init_set_str(r31686, "3.6519349309068006e-301", 10, MPFR_RNDN);
        mpfr_init(r31687);
        mpfr_init(r31688);
        mpfr_init(r31689);
        mpfr_init(r31690);
        mpfr_init(r31691);
        mpfr_init(r31692);
        mpfr_init(r31693);
        mpfr_init(r31694);
        mpfr_init(r31695);
        mpfr_init(r31696);
        mpfr_init(r31697);
        mpfr_init(r31698);
        mpfr_init(r31699);
        mpfr_init(r31700);
        mpfr_init(r31701);
}

double f_fm(double c0, double A, double V, double l) {
        mpfr_set_d(r31685, A, MPFR_RNDN);
        ;
        mpfr_set_si(r31687, mpfr_cmp(r31685, r31686) <= 0, MPFR_RNDN);
        mpfr_set_d(r31688, c0, MPFR_RNDN);
        mpfr_set_d(r31689, V, MPFR_RNDN);
        mpfr_set_d(r31690, l, MPFR_RNDN);
        mpfr_mul(r31691, r31689, r31690, MPFR_RNDN);
        mpfr_div(r31692, r31685, r31691, MPFR_RNDN);
        mpfr_sqrt(r31693, r31692, MPFR_RNDN);
        mpfr_sqrt(r31694, r31693, MPFR_RNDN);
        mpfr_mul(r31695, r31688, r31694, MPFR_RNDN);
        mpfr_mul(r31696, r31695, r31694, MPFR_RNDN);
        mpfr_sqrt(r31697, r31685, MPFR_RNDN);
        mpfr_sqrt(r31698, r31691, MPFR_RNDN);
        mpfr_div(r31699, r31697, r31698, MPFR_RNDN);
        mpfr_mul(r31700, r31688, r31699, MPFR_RNDN);
        if (mpfr_get_si(r31687, MPFR_RNDN)) { mpfr_set(r31701, r31696, MPFR_RNDN); } else { mpfr_set(r31701, r31700, MPFR_RNDN); };
        return mpfr_get_d(r31701, MPFR_RNDN);
}

static mpfr_t r31702, r31703, r31704, r31705, r31706, r31707, r31708, r31709, r31710, r31711, r31712, r31713, r31714, r31715, r31716, r31717, r31718;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31702);
        mpfr_init_set_str(r31703, "3.6519349309068006e-301", 10, MPFR_RNDN);
        mpfr_init(r31704);
        mpfr_init(r31705);
        mpfr_init(r31706);
        mpfr_init(r31707);
        mpfr_init(r31708);
        mpfr_init(r31709);
        mpfr_init(r31710);
        mpfr_init(r31711);
        mpfr_init(r31712);
        mpfr_init(r31713);
        mpfr_init(r31714);
        mpfr_init(r31715);
        mpfr_init(r31716);
        mpfr_init(r31717);
        mpfr_init(r31718);
}

double f_dm(double c0, double A, double V, double l) {
        mpfr_set_d(r31702, A, MPFR_RNDN);
        ;
        mpfr_set_si(r31704, mpfr_cmp(r31702, r31703) <= 0, MPFR_RNDN);
        mpfr_set_d(r31705, c0, MPFR_RNDN);
        mpfr_set_d(r31706, V, MPFR_RNDN);
        mpfr_set_d(r31707, l, MPFR_RNDN);
        mpfr_mul(r31708, r31706, r31707, MPFR_RNDN);
        mpfr_div(r31709, r31702, r31708, MPFR_RNDN);
        mpfr_sqrt(r31710, r31709, MPFR_RNDN);
        mpfr_sqrt(r31711, r31710, MPFR_RNDN);
        mpfr_mul(r31712, r31705, r31711, MPFR_RNDN);
        mpfr_mul(r31713, r31712, r31711, MPFR_RNDN);
        mpfr_sqrt(r31714, r31702, MPFR_RNDN);
        mpfr_sqrt(r31715, r31708, MPFR_RNDN);
        mpfr_div(r31716, r31714, r31715, MPFR_RNDN);
        mpfr_mul(r31717, r31705, r31716, MPFR_RNDN);
        if (mpfr_get_si(r31704, MPFR_RNDN)) { mpfr_set(r31718, r31713, MPFR_RNDN); } else { mpfr_set(r31718, r31717, MPFR_RNDN); };
        return mpfr_get_d(r31718, MPFR_RNDN);
}

