#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 r31701 = w0;
        float r31702 = 1;
        float r31703 = M;
        float r31704 = D;
        float r31705 = r31703 * r31704;
        float r31706 = 2;
        float r31707 = d;
        float r31708 = r31706 * r31707;
        float r31709 = r31705 / r31708;
        float r31710 = pow(r31709, r31706);
        float r31711 = h;
        float r31712 = l;
        float r31713 = r31711 / r31712;
        float r31714 = r31710 * r31713;
        float r31715 = r31702 - r31714;
        float r31716 = sqrt(r31715);
        float r31717 = r31701 * r31716;
        return r31717;
}

double f_id(double w0, double M, double D, double h, double l, double d) {
        double r31718 = w0;
        double r31719 = 1;
        double r31720 = M;
        double r31721 = D;
        double r31722 = r31720 * r31721;
        double r31723 = 2;
        double r31724 = d;
        double r31725 = r31723 * r31724;
        double r31726 = r31722 / r31725;
        double r31727 = pow(r31726, r31723);
        double r31728 = h;
        double r31729 = l;
        double r31730 = r31728 / r31729;
        double r31731 = r31727 * r31730;
        double r31732 = r31719 - r31731;
        double r31733 = sqrt(r31732);
        double r31734 = r31718 * r31733;
        return r31734;
}


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

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

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 r31769, r31770, r31771, r31772, r31773, r31774, r31775, r31776, r31777, r31778, r31779, r31780, r31781, r31782, r31783, r31784, r31785;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r31769);
        mpfr_init_set_str(r31770, "1", 10, MPFR_RNDN);
        mpfr_init(r31771);
        mpfr_init(r31772);
        mpfr_init(r31773);
        mpfr_init_set_str(r31774, "2", 10, MPFR_RNDN);
        mpfr_init(r31775);
        mpfr_init(r31776);
        mpfr_init(r31777);
        mpfr_init(r31778);
        mpfr_init(r31779);
        mpfr_init(r31780);
        mpfr_init(r31781);
        mpfr_init(r31782);
        mpfr_init(r31783);
        mpfr_init(r31784);
        mpfr_init(r31785);
}

double f_im(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r31769, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r31771, M, MPFR_RNDN);
        mpfr_set_d(r31772, D, MPFR_RNDN);
        mpfr_mul(r31773, r31771, r31772, MPFR_RNDN);
        ;
        mpfr_set_d(r31775, d, MPFR_RNDN);
        mpfr_mul(r31776, r31774, r31775, MPFR_RNDN);
        mpfr_div(r31777, r31773, r31776, MPFR_RNDN);
        mpfr_pow(r31778, r31777, r31774, MPFR_RNDN);
        mpfr_set_d(r31779, h, MPFR_RNDN);
        mpfr_set_d(r31780, l, MPFR_RNDN);
        mpfr_div(r31781, r31779, r31780, MPFR_RNDN);
        mpfr_mul(r31782, r31778, r31781, MPFR_RNDN);
        mpfr_sub(r31783, r31770, r31782, MPFR_RNDN);
        mpfr_sqrt(r31784, r31783, MPFR_RNDN);
        mpfr_mul(r31785, r31769, r31784, MPFR_RNDN);
        return mpfr_get_d(r31785, MPFR_RNDN);
}

static mpfr_t r31786, r31787, r31788, r31789, r31790, r31791, r31792, r31793, r31794, r31795, r31796, r31797, r31798, r31799, r31800, r31801, r31802;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31786);
        mpfr_init_set_str(r31787, "1", 10, MPFR_RNDN);
        mpfr_init(r31788);
        mpfr_init(r31789);
        mpfr_init(r31790);
        mpfr_init_set_str(r31791, "2", 10, MPFR_RNDN);
        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);
        mpfr_init(r31802);
}

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

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

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31803);
        mpfr_init_set_str(r31804, "1", 10, MPFR_RNDN);
        mpfr_init(r31805);
        mpfr_init(r31806);
        mpfr_init(r31807);
        mpfr_init_set_str(r31808, "2", 10, MPFR_RNDN);
        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);
        mpfr_init(r31819);
}

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

