#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 r9696 = w0;
        float r9697 = 1;
        float r9698 = M;
        float r9699 = D;
        float r9700 = r9698 * r9699;
        float r9701 = 2;
        float r9702 = d;
        float r9703 = r9701 * r9702;
        float r9704 = r9700 / r9703;
        float r9705 = pow(r9704, r9701);
        float r9706 = h;
        float r9707 = l;
        float r9708 = r9706 / r9707;
        float r9709 = r9705 * r9708;
        float r9710 = r9697 - r9709;
        float r9711 = sqrt(r9710);
        float r9712 = r9696 * r9711;
        return r9712;
}

double f_id(double w0, double M, double D, double h, double l, double d) {
        double r9713 = w0;
        double r9714 = 1;
        double r9715 = M;
        double r9716 = D;
        double r9717 = r9715 * r9716;
        double r9718 = 2;
        double r9719 = d;
        double r9720 = r9718 * r9719;
        double r9721 = r9717 / r9720;
        double r9722 = pow(r9721, r9718);
        double r9723 = h;
        double r9724 = l;
        double r9725 = r9723 / r9724;
        double r9726 = r9722 * r9725;
        double r9727 = r9714 - r9726;
        double r9728 = sqrt(r9727);
        double r9729 = r9713 * r9728;
        return r9729;
}


double f_of(float w0, float M, float D, float h, float l, float d) {
        float r9730 = M;
        float r9731 = D;
        float r9732 = r9730 * r9731;
        float r9733 = 2;
        float r9734 = d;
        float r9735 = r9733 * r9734;
        float r9736 = r9732 / r9735;
        float r9737 = pow(r9736, r9733);
        float r9738 = h;
        float r9739 = l;
        float r9740 = r9738 / r9739;
        float r9741 = r9737 * r9740;
        float r9742 = -6.503081529298164e-10;
        bool r9743 = r9741 <= r9742;
        float r9744 = w0;
        float r9745 = 1;
        float r9746 = r9736 * r9740;
        float r9747 = r9736 * r9746;
        float r9748 = r9745 - r9747;
        float r9749 = sqrt(r9748);
        float r9750 = r9744 * r9749;
        float r9751 = r9743 ? r9750 : r9744;
        return r9751;
}

double f_od(double w0, double M, double D, double h, double l, double d) {
        double r9752 = M;
        double r9753 = D;
        double r9754 = r9752 * r9753;
        double r9755 = 2;
        double r9756 = d;
        double r9757 = r9755 * r9756;
        double r9758 = r9754 / r9757;
        double r9759 = pow(r9758, r9755);
        double r9760 = h;
        double r9761 = l;
        double r9762 = r9760 / r9761;
        double r9763 = r9759 * r9762;
        double r9764 = -6.503081529298164e-10;
        bool r9765 = r9763 <= r9764;
        double r9766 = w0;
        double r9767 = 1;
        double r9768 = r9758 * r9762;
        double r9769 = r9758 * r9768;
        double r9770 = r9767 - r9769;
        double r9771 = sqrt(r9770);
        double r9772 = r9766 * r9771;
        double r9773 = r9765 ? r9772 : r9766;
        return r9773;
}

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 r9774, r9775, r9776, r9777, r9778, r9779, r9780, r9781, r9782, r9783, r9784, r9785, r9786, r9787, r9788, r9789, r9790;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r9774);
        mpfr_init_set_str(r9775, "1", 10, MPFR_RNDN);
        mpfr_init(r9776);
        mpfr_init(r9777);
        mpfr_init(r9778);
        mpfr_init_set_str(r9779, "2", 10, MPFR_RNDN);
        mpfr_init(r9780);
        mpfr_init(r9781);
        mpfr_init(r9782);
        mpfr_init(r9783);
        mpfr_init(r9784);
        mpfr_init(r9785);
        mpfr_init(r9786);
        mpfr_init(r9787);
        mpfr_init(r9788);
        mpfr_init(r9789);
        mpfr_init(r9790);
}

double f_im(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r9774, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r9776, M, MPFR_RNDN);
        mpfr_set_d(r9777, D, MPFR_RNDN);
        mpfr_mul(r9778, r9776, r9777, MPFR_RNDN);
        ;
        mpfr_set_d(r9780, d, MPFR_RNDN);
        mpfr_mul(r9781, r9779, r9780, MPFR_RNDN);
        mpfr_div(r9782, r9778, r9781, MPFR_RNDN);
        mpfr_pow(r9783, r9782, r9779, MPFR_RNDN);
        mpfr_set_d(r9784, h, MPFR_RNDN);
        mpfr_set_d(r9785, l, MPFR_RNDN);
        mpfr_div(r9786, r9784, r9785, MPFR_RNDN);
        mpfr_mul(r9787, r9783, r9786, MPFR_RNDN);
        mpfr_sub(r9788, r9775, r9787, MPFR_RNDN);
        mpfr_sqrt(r9789, r9788, MPFR_RNDN);
        mpfr_mul(r9790, r9774, r9789, MPFR_RNDN);
        return mpfr_get_d(r9790, MPFR_RNDN);
}

static mpfr_t r9791, r9792, r9793, r9794, r9795, r9796, r9797, r9798, r9799, r9800, r9801, r9802, r9803, r9804, r9805, r9806, r9807, r9808, r9809, r9810, r9811, r9812;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r9791);
        mpfr_init(r9792);
        mpfr_init(r9793);
        mpfr_init_set_str(r9794, "2", 10, MPFR_RNDN);
        mpfr_init(r9795);
        mpfr_init(r9796);
        mpfr_init(r9797);
        mpfr_init(r9798);
        mpfr_init(r9799);
        mpfr_init(r9800);
        mpfr_init(r9801);
        mpfr_init(r9802);
        mpfr_init_set_str(r9803, "-6.503081529298164e-10", 10, MPFR_RNDN);
        mpfr_init(r9804);
        mpfr_init(r9805);
        mpfr_init_set_str(r9806, "1", 10, MPFR_RNDN);
        mpfr_init(r9807);
        mpfr_init(r9808);
        mpfr_init(r9809);
        mpfr_init(r9810);
        mpfr_init(r9811);
        mpfr_init(r9812);
}

double f_fm(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r9791, M, MPFR_RNDN);
        mpfr_set_d(r9792, D, MPFR_RNDN);
        mpfr_mul(r9793, r9791, r9792, MPFR_RNDN);
        ;
        mpfr_set_d(r9795, d, MPFR_RNDN);
        mpfr_mul(r9796, r9794, r9795, MPFR_RNDN);
        mpfr_div(r9797, r9793, r9796, MPFR_RNDN);
        mpfr_pow(r9798, r9797, r9794, MPFR_RNDN);
        mpfr_set_d(r9799, h, MPFR_RNDN);
        mpfr_set_d(r9800, l, MPFR_RNDN);
        mpfr_div(r9801, r9799, r9800, MPFR_RNDN);
        mpfr_mul(r9802, r9798, r9801, MPFR_RNDN);
        ;
        mpfr_set_si(r9804, mpfr_cmp(r9802, r9803) <= 0, MPFR_RNDN);
        mpfr_set_d(r9805, w0, MPFR_RNDN);
        ;
        mpfr_mul(r9807, r9797, r9801, MPFR_RNDN);
        mpfr_mul(r9808, r9797, r9807, MPFR_RNDN);
        mpfr_sub(r9809, r9806, r9808, MPFR_RNDN);
        mpfr_sqrt(r9810, r9809, MPFR_RNDN);
        mpfr_mul(r9811, r9805, r9810, MPFR_RNDN);
        if (mpfr_get_si(r9804, MPFR_RNDN)) { mpfr_set(r9812, r9811, MPFR_RNDN); } else { mpfr_set(r9812, r9805, MPFR_RNDN); };
        return mpfr_get_d(r9812, MPFR_RNDN);
}

static mpfr_t r9813, r9814, r9815, r9816, r9817, r9818, r9819, r9820, r9821, r9822, r9823, r9824, r9825, r9826, r9827, r9828, r9829, r9830, r9831, r9832, r9833, r9834;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r9813);
        mpfr_init(r9814);
        mpfr_init(r9815);
        mpfr_init_set_str(r9816, "2", 10, MPFR_RNDN);
        mpfr_init(r9817);
        mpfr_init(r9818);
        mpfr_init(r9819);
        mpfr_init(r9820);
        mpfr_init(r9821);
        mpfr_init(r9822);
        mpfr_init(r9823);
        mpfr_init(r9824);
        mpfr_init_set_str(r9825, "-6.503081529298164e-10", 10, MPFR_RNDN);
        mpfr_init(r9826);
        mpfr_init(r9827);
        mpfr_init_set_str(r9828, "1", 10, MPFR_RNDN);
        mpfr_init(r9829);
        mpfr_init(r9830);
        mpfr_init(r9831);
        mpfr_init(r9832);
        mpfr_init(r9833);
        mpfr_init(r9834);
}

double f_dm(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r9813, M, MPFR_RNDN);
        mpfr_set_d(r9814, D, MPFR_RNDN);
        mpfr_mul(r9815, r9813, r9814, MPFR_RNDN);
        ;
        mpfr_set_d(r9817, d, MPFR_RNDN);
        mpfr_mul(r9818, r9816, r9817, MPFR_RNDN);
        mpfr_div(r9819, r9815, r9818, MPFR_RNDN);
        mpfr_pow(r9820, r9819, r9816, MPFR_RNDN);
        mpfr_set_d(r9821, h, MPFR_RNDN);
        mpfr_set_d(r9822, l, MPFR_RNDN);
        mpfr_div(r9823, r9821, r9822, MPFR_RNDN);
        mpfr_mul(r9824, r9820, r9823, MPFR_RNDN);
        ;
        mpfr_set_si(r9826, mpfr_cmp(r9824, r9825) <= 0, MPFR_RNDN);
        mpfr_set_d(r9827, w0, MPFR_RNDN);
        ;
        mpfr_mul(r9829, r9819, r9823, MPFR_RNDN);
        mpfr_mul(r9830, r9819, r9829, MPFR_RNDN);
        mpfr_sub(r9831, r9828, r9830, MPFR_RNDN);
        mpfr_sqrt(r9832, r9831, MPFR_RNDN);
        mpfr_mul(r9833, r9827, r9832, MPFR_RNDN);
        if (mpfr_get_si(r9826, MPFR_RNDN)) { mpfr_set(r9834, r9833, MPFR_RNDN); } else { mpfr_set(r9834, r9827, MPFR_RNDN); };
        return mpfr_get_d(r9834, MPFR_RNDN);
}

