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

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


double f_of(float w0, float M, float D, float h, float l, float d) {
        float r9729 = 1.0f;
        float r9730 = D;
        float r9731 = M;
        float r9732 = r9730 * r9731;
        float r9733 = 2.0f;
        float r9734 = d;
        float r9735 = r9733 * r9734;
        float r9736 = r9732 / r9735;
        float r9737 = l;
        float r9738 = r9737 / r9736;
        float r9739 = r9736 / r9738;
        float r9740 = h;
        float r9741 = r9729 / r9740;
        float r9742 = cbrt(r9741);
        float r9743 = r9739 / r9742;
        float r9744 = r9742 * r9742;
        float r9745 = r9729 / r9744;
        float r9746 = r9743 * r9745;
        float r9747 = r9729 - r9746;
        float r9748 = sqrt(r9747);
        float r9749 = w0;
        float r9750 = r9748 * r9749;
        return r9750;
}

double f_od(double w0, double M, double D, double h, double l, double d) {
        double r9751 = 1.0;
        double r9752 = D;
        double r9753 = M;
        double r9754 = r9752 * r9753;
        double r9755 = 2.0;
        double r9756 = d;
        double r9757 = r9755 * r9756;
        double r9758 = r9754 / r9757;
        double r9759 = l;
        double r9760 = r9759 / r9758;
        double r9761 = r9758 / r9760;
        double r9762 = h;
        double r9763 = r9751 / r9762;
        double r9764 = cbrt(r9763);
        double r9765 = r9761 / r9764;
        double r9766 = r9764 * r9764;
        double r9767 = r9751 / r9766;
        double r9768 = r9765 * r9767;
        double r9769 = r9751 - r9768;
        double r9770 = sqrt(r9769);
        double r9771 = w0;
        double r9772 = r9770 * r9771;
        return r9772;
}

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

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r9773);
        mpfr_init_set_str(r9774, "1", 10, MPFR_RNDN);
        mpfr_init(r9775);
        mpfr_init(r9776);
        mpfr_init(r9777);
        mpfr_init_set_str(r9778, "2", 10, MPFR_RNDN);
        mpfr_init(r9779);
        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);
}

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

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

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r9790, "1", 10, MPFR_RNDN);
        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(r9803);
        mpfr_init(r9804);
        mpfr_init(r9805);
        mpfr_init(r9806);
        mpfr_init(r9807);
        mpfr_init(r9808);
        mpfr_init(r9809);
        mpfr_init(r9810);
        mpfr_init(r9811);
}

double f_fm(double w0, double M, double D, double h, double l, double d) {
        ;
        mpfr_set_d(r9791, D, MPFR_RNDN);
        mpfr_set_d(r9792, M, 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_set_d(r9798, l, MPFR_RNDN);
        mpfr_div(r9799, r9798, r9797, MPFR_RNDN);
        mpfr_div(r9800, r9797, r9799, MPFR_RNDN);
        mpfr_set_d(r9801, h, MPFR_RNDN);
        mpfr_div(r9802, r9790, r9801, MPFR_RNDN);
        mpfr_cbrt(r9803, r9802, MPFR_RNDN);
        mpfr_div(r9804, r9800, r9803, MPFR_RNDN);
        mpfr_mul(r9805, r9803, r9803, MPFR_RNDN);
        mpfr_div(r9806, r9790, r9805, MPFR_RNDN);
        mpfr_mul(r9807, r9804, r9806, MPFR_RNDN);
        mpfr_sub(r9808, r9790, r9807, MPFR_RNDN);
        mpfr_sqrt(r9809, r9808, MPFR_RNDN);
        mpfr_set_d(r9810, w0, MPFR_RNDN);
        mpfr_mul(r9811, r9809, r9810, MPFR_RNDN);
        return mpfr_get_d(r9811, MPFR_RNDN);
}

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

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r9812, "1", 10, MPFR_RNDN);
        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(r9825);
        mpfr_init(r9826);
        mpfr_init(r9827);
        mpfr_init(r9828);
        mpfr_init(r9829);
        mpfr_init(r9830);
        mpfr_init(r9831);
        mpfr_init(r9832);
        mpfr_init(r9833);
}

double f_dm(double w0, double M, double D, double h, double l, double d) {
        ;
        mpfr_set_d(r9813, D, MPFR_RNDN);
        mpfr_set_d(r9814, M, 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_set_d(r9820, l, MPFR_RNDN);
        mpfr_div(r9821, r9820, r9819, MPFR_RNDN);
        mpfr_div(r9822, r9819, r9821, MPFR_RNDN);
        mpfr_set_d(r9823, h, MPFR_RNDN);
        mpfr_div(r9824, r9812, r9823, MPFR_RNDN);
        mpfr_cbrt(r9825, r9824, MPFR_RNDN);
        mpfr_div(r9826, r9822, r9825, MPFR_RNDN);
        mpfr_mul(r9827, r9825, r9825, MPFR_RNDN);
        mpfr_div(r9828, r9812, r9827, MPFR_RNDN);
        mpfr_mul(r9829, r9826, r9828, MPFR_RNDN);
        mpfr_sub(r9830, r9812, r9829, MPFR_RNDN);
        mpfr_sqrt(r9831, r9830, MPFR_RNDN);
        mpfr_set_d(r9832, w0, MPFR_RNDN);
        mpfr_mul(r9833, r9831, r9832, MPFR_RNDN);
        return mpfr_get_d(r9833, MPFR_RNDN);
}

