#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 r31717 = w0;
        float r31718 = 1;
        float r31719 = M;
        float r31720 = D;
        float r31721 = r31719 * r31720;
        float r31722 = 2;
        float r31723 = d;
        float r31724 = r31722 * r31723;
        float r31725 = r31721 / r31724;
        float r31726 = pow(r31725, r31722);
        float r31727 = h;
        float r31728 = l;
        float r31729 = r31727 / r31728;
        float r31730 = r31726 * r31729;
        float r31731 = r31718 - r31730;
        float r31732 = sqrt(r31731);
        float r31733 = r31717 * r31732;
        return r31733;
}

double f_id(double w0, double M, double D, double h, double l, double d) {
        double r31734 = w0;
        double r31735 = 1;
        double r31736 = M;
        double r31737 = D;
        double r31738 = r31736 * r31737;
        double r31739 = 2;
        double r31740 = d;
        double r31741 = r31739 * r31740;
        double r31742 = r31738 / r31741;
        double r31743 = pow(r31742, r31739);
        double r31744 = h;
        double r31745 = l;
        double r31746 = r31744 / r31745;
        double r31747 = r31743 * r31746;
        double r31748 = r31735 - r31747;
        double r31749 = sqrt(r31748);
        double r31750 = r31734 * r31749;
        return r31750;
}


double f_of(float w0, float M, float D, float h, float l, float d) {
        float r31751 = w0;
        float r31752 = 1;
        float r31753 = M;
        float r31754 = D;
        float r31755 = r31753 * r31754;
        float r31756 = 2;
        float r31757 = d;
        float r31758 = r31756 * r31757;
        float r31759 = r31755 / r31758;
        float r31760 = h;
        float r31761 = r31759 * r31760;
        float r31762 = r31759 * r31761;
        float r31763 = l;
        float r31764 = r31762 / r31763;
        float r31765 = r31752 - r31764;
        float r31766 = sqrt(r31765);
        float r31767 = r31751 * r31766;
        return r31767;
}

double f_od(double w0, double M, double D, double h, double l, double d) {
        double r31768 = w0;
        double r31769 = 1;
        double r31770 = M;
        double r31771 = D;
        double r31772 = r31770 * r31771;
        double r31773 = 2;
        double r31774 = d;
        double r31775 = r31773 * r31774;
        double r31776 = r31772 / r31775;
        double r31777 = h;
        double r31778 = r31776 * r31777;
        double r31779 = r31776 * r31778;
        double r31780 = l;
        double r31781 = r31779 / r31780;
        double r31782 = r31769 - r31781;
        double r31783 = sqrt(r31782);
        double r31784 = r31768 * r31783;
        return r31784;
}

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 r31785, r31786, r31787, r31788, r31789, r31790, r31791, r31792, r31793, r31794, r31795, r31796, r31797, r31798, r31799, r31800, r31801;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r31785);
        mpfr_init_set_str(r31786, "1", 10, MPFR_RNDN);
        mpfr_init(r31787);
        mpfr_init(r31788);
        mpfr_init(r31789);
        mpfr_init_set_str(r31790, "2", 10, MPFR_RNDN);
        mpfr_init(r31791);
        mpfr_init(r31792);
        mpfr_init(r31793);
        mpfr_init(r31794);
        mpfr_init(r31795);
        mpfr_init(r31796);
        mpfr_init(r31797);
        mpfr_init(r31798);
        mpfr_init(r31799);
        mpfr_init(r31800);
        mpfr_init(r31801);
}

double f_im(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r31785, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r31787, M, MPFR_RNDN);
        mpfr_set_d(r31788, D, MPFR_RNDN);
        mpfr_mul(r31789, r31787, r31788, MPFR_RNDN);
        ;
        mpfr_set_d(r31791, d, MPFR_RNDN);
        mpfr_mul(r31792, r31790, r31791, MPFR_RNDN);
        mpfr_div(r31793, r31789, r31792, MPFR_RNDN);
        mpfr_pow(r31794, r31793, r31790, MPFR_RNDN);
        mpfr_set_d(r31795, h, MPFR_RNDN);
        mpfr_set_d(r31796, l, MPFR_RNDN);
        mpfr_div(r31797, r31795, r31796, MPFR_RNDN);
        mpfr_mul(r31798, r31794, r31797, MPFR_RNDN);
        mpfr_sub(r31799, r31786, r31798, MPFR_RNDN);
        mpfr_sqrt(r31800, r31799, MPFR_RNDN);
        mpfr_mul(r31801, r31785, r31800, MPFR_RNDN);
        return mpfr_get_d(r31801, MPFR_RNDN);
}

static mpfr_t r31802, r31803, r31804, r31805, r31806, r31807, r31808, r31809, r31810, r31811, r31812, r31813, r31814, r31815, r31816, r31817, r31818;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31802);
        mpfr_init_set_str(r31803, "1", 10, MPFR_RNDN);
        mpfr_init(r31804);
        mpfr_init(r31805);
        mpfr_init(r31806);
        mpfr_init_set_str(r31807, "2", 10, MPFR_RNDN);
        mpfr_init(r31808);
        mpfr_init(r31809);
        mpfr_init(r31810);
        mpfr_init(r31811);
        mpfr_init(r31812);
        mpfr_init(r31813);
        mpfr_init(r31814);
        mpfr_init(r31815);
        mpfr_init(r31816);
        mpfr_init(r31817);
        mpfr_init(r31818);
}

double f_fm(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r31802, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r31804, M, MPFR_RNDN);
        mpfr_set_d(r31805, D, MPFR_RNDN);
        mpfr_mul(r31806, r31804, r31805, MPFR_RNDN);
        ;
        mpfr_set_d(r31808, d, MPFR_RNDN);
        mpfr_mul(r31809, r31807, r31808, MPFR_RNDN);
        mpfr_div(r31810, r31806, r31809, MPFR_RNDN);
        mpfr_set_d(r31811, h, MPFR_RNDN);
        mpfr_mul(r31812, r31810, r31811, MPFR_RNDN);
        mpfr_mul(r31813, r31810, r31812, MPFR_RNDN);
        mpfr_set_d(r31814, l, MPFR_RNDN);
        mpfr_div(r31815, r31813, r31814, MPFR_RNDN);
        mpfr_sub(r31816, r31803, r31815, MPFR_RNDN);
        mpfr_sqrt(r31817, r31816, MPFR_RNDN);
        mpfr_mul(r31818, r31802, r31817, MPFR_RNDN);
        return mpfr_get_d(r31818, MPFR_RNDN);
}

static mpfr_t r31819, r31820, r31821, r31822, r31823, r31824, r31825, r31826, r31827, r31828, r31829, r31830, r31831, r31832, r31833, r31834, r31835;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31819);
        mpfr_init_set_str(r31820, "1", 10, MPFR_RNDN);
        mpfr_init(r31821);
        mpfr_init(r31822);
        mpfr_init(r31823);
        mpfr_init_set_str(r31824, "2", 10, MPFR_RNDN);
        mpfr_init(r31825);
        mpfr_init(r31826);
        mpfr_init(r31827);
        mpfr_init(r31828);
        mpfr_init(r31829);
        mpfr_init(r31830);
        mpfr_init(r31831);
        mpfr_init(r31832);
        mpfr_init(r31833);
        mpfr_init(r31834);
        mpfr_init(r31835);
}

double f_dm(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r31819, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r31821, M, MPFR_RNDN);
        mpfr_set_d(r31822, D, MPFR_RNDN);
        mpfr_mul(r31823, r31821, r31822, MPFR_RNDN);
        ;
        mpfr_set_d(r31825, d, MPFR_RNDN);
        mpfr_mul(r31826, r31824, r31825, MPFR_RNDN);
        mpfr_div(r31827, r31823, r31826, MPFR_RNDN);
        mpfr_set_d(r31828, h, MPFR_RNDN);
        mpfr_mul(r31829, r31827, r31828, MPFR_RNDN);
        mpfr_mul(r31830, r31827, r31829, MPFR_RNDN);
        mpfr_set_d(r31831, l, MPFR_RNDN);
        mpfr_div(r31832, r31830, r31831, MPFR_RNDN);
        mpfr_sub(r31833, r31820, r31832, MPFR_RNDN);
        mpfr_sqrt(r31834, r31833, MPFR_RNDN);
        mpfr_mul(r31835, r31819, r31834, MPFR_RNDN);
        return mpfr_get_d(r31835, MPFR_RNDN);
}

