#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Henrywood and Agarwal, Equation (13)";

double f_if(float c0, float w, float h, float D, float d, float M) {
        float r31719 = c0;
        float r31720 = 2;
        float r31721 = w;
        float r31722 = r31720 * r31721;
        float r31723 = r31719 / r31722;
        float r31724 = d;
        float r31725 = r31724 * r31724;
        float r31726 = r31719 * r31725;
        float r31727 = h;
        float r31728 = r31721 * r31727;
        float r31729 = D;
        float r31730 = r31729 * r31729;
        float r31731 = r31728 * r31730;
        float r31732 = r31726 / r31731;
        float r31733 = r31732 * r31732;
        float r31734 = M;
        float r31735 = r31734 * r31734;
        float r31736 = r31733 - r31735;
        float r31737 = sqrt(r31736);
        float r31738 = r31732 + r31737;
        float r31739 = r31723 * r31738;
        return r31739;
}

double f_id(double c0, double w, double h, double D, double d, double M) {
        double r31740 = c0;
        double r31741 = 2;
        double r31742 = w;
        double r31743 = r31741 * r31742;
        double r31744 = r31740 / r31743;
        double r31745 = d;
        double r31746 = r31745 * r31745;
        double r31747 = r31740 * r31746;
        double r31748 = h;
        double r31749 = r31742 * r31748;
        double r31750 = D;
        double r31751 = r31750 * r31750;
        double r31752 = r31749 * r31751;
        double r31753 = r31747 / r31752;
        double r31754 = r31753 * r31753;
        double r31755 = M;
        double r31756 = r31755 * r31755;
        double r31757 = r31754 - r31756;
        double r31758 = sqrt(r31757);
        double r31759 = r31753 + r31758;
        double r31760 = r31744 * r31759;
        return r31760;
}


double f_of(float c0, float w, float h, float D, float d, float M) {
        float r31761 = c0;
        float r31762 = -1.8786594606845356e+35;
        bool r31763 = r31761 <= r31762;
        float r31764 = 0;
        float r31765 = -3.560508914672266e-87;
        bool r31766 = r31761 <= r31765;
        float r31767 = 2;
        float r31768 = w;
        float r31769 = r31767 * r31768;
        float r31770 = r31761 / r31769;
        float r31771 = M;
        float r31772 = r31771 * r31771;
        float r31773 = d;
        float r31774 = D;
        float r31775 = r31773 / r31774;
        float r31776 = r31775 * r31775;
        float r31777 = h;
        float r31778 = r31777 * r31768;
        float r31779 = r31778 / r31761;
        float r31780 = r31776 / r31779;
        float r31781 = r31780 - r31771;
        float r31782 = r31771 + r31780;
        float r31783 = r31781 * r31782;
        float r31784 = sqrt(r31783);
        float r31785 = r31780 - r31784;
        float r31786 = r31772 / r31785;
        float r31787 = r31770 * r31786;
        float r31788 = r31766 ? r31787 : r31764;
        float r31789 = r31763 ? r31764 : r31788;
        return r31789;
}

double f_od(double c0, double w, double h, double D, double d, double M) {
        double r31790 = c0;
        double r31791 = -1.8786594606845356e+35;
        bool r31792 = r31790 <= r31791;
        double r31793 = 0;
        double r31794 = -3.560508914672266e-87;
        bool r31795 = r31790 <= r31794;
        double r31796 = 2;
        double r31797 = w;
        double r31798 = r31796 * r31797;
        double r31799 = r31790 / r31798;
        double r31800 = M;
        double r31801 = r31800 * r31800;
        double r31802 = d;
        double r31803 = D;
        double r31804 = r31802 / r31803;
        double r31805 = r31804 * r31804;
        double r31806 = h;
        double r31807 = r31806 * r31797;
        double r31808 = r31807 / r31790;
        double r31809 = r31805 / r31808;
        double r31810 = r31809 - r31800;
        double r31811 = r31800 + r31809;
        double r31812 = r31810 * r31811;
        double r31813 = sqrt(r31812);
        double r31814 = r31809 - r31813;
        double r31815 = r31801 / r31814;
        double r31816 = r31799 * r31815;
        double r31817 = r31795 ? r31816 : r31793;
        double r31818 = r31792 ? r31793 : r31817;
        return r31818;
}

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 r31819, r31820, r31821, r31822, r31823, r31824, r31825, r31826, r31827, r31828, r31829, r31830, r31831, r31832, r31833, r31834, r31835, r31836, r31837, r31838, r31839;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(5008);
        mpfr_init(r31819);
        mpfr_init_set_str(r31820, "2", 10, MPFR_RNDN);
        mpfr_init(r31821);
        mpfr_init(r31822);
        mpfr_init(r31823);
        mpfr_init(r31824);
        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);
        mpfr_init(r31836);
        mpfr_init(r31837);
        mpfr_init(r31838);
        mpfr_init(r31839);
}

double f_im(double c0, double w, double h, double D, double d, double M) {
        mpfr_set_d(r31819, c0, MPFR_RNDN);
        ;
        mpfr_set_d(r31821, w, MPFR_RNDN);
        mpfr_mul(r31822, r31820, r31821, MPFR_RNDN);
        mpfr_div(r31823, r31819, r31822, MPFR_RNDN);
        mpfr_set_d(r31824, d, MPFR_RNDN);
        mpfr_mul(r31825, r31824, r31824, MPFR_RNDN);
        mpfr_mul(r31826, r31819, r31825, MPFR_RNDN);
        mpfr_set_d(r31827, h, MPFR_RNDN);
        mpfr_mul(r31828, r31821, r31827, MPFR_RNDN);
        mpfr_set_d(r31829, D, MPFR_RNDN);
        mpfr_mul(r31830, r31829, r31829, MPFR_RNDN);
        mpfr_mul(r31831, r31828, r31830, MPFR_RNDN);
        mpfr_div(r31832, r31826, r31831, MPFR_RNDN);
        mpfr_mul(r31833, r31832, r31832, MPFR_RNDN);
        mpfr_set_d(r31834, M, MPFR_RNDN);
        mpfr_mul(r31835, r31834, r31834, MPFR_RNDN);
        mpfr_sub(r31836, r31833, r31835, MPFR_RNDN);
        mpfr_sqrt(r31837, r31836, MPFR_RNDN);
        mpfr_add(r31838, r31832, r31837, MPFR_RNDN);
        mpfr_mul(r31839, r31823, r31838, MPFR_RNDN);
        return mpfr_get_d(r31839, MPFR_RNDN);
}

static mpfr_t r31840, r31841, r31842, r31843, r31844, r31845, r31846, r31847, r31848, r31849, r31850, r31851, r31852, r31853, r31854, r31855, r31856, r31857, r31858, r31859, r31860, r31861, r31862, r31863, r31864, r31865, r31866, r31867, r31868;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(5008);
        mpfr_init(r31840);
        mpfr_init_set_str(r31841, "-1.8786594606845356e+35", 10, MPFR_RNDN);
        mpfr_init(r31842);
        mpfr_init_set_str(r31843, "0", 10, MPFR_RNDN);
        mpfr_init_set_str(r31844, "-3.560508914672266e-87", 10, MPFR_RNDN);
        mpfr_init(r31845);
        mpfr_init_set_str(r31846, "2", 10, MPFR_RNDN);
        mpfr_init(r31847);
        mpfr_init(r31848);
        mpfr_init(r31849);
        mpfr_init(r31850);
        mpfr_init(r31851);
        mpfr_init(r31852);
        mpfr_init(r31853);
        mpfr_init(r31854);
        mpfr_init(r31855);
        mpfr_init(r31856);
        mpfr_init(r31857);
        mpfr_init(r31858);
        mpfr_init(r31859);
        mpfr_init(r31860);
        mpfr_init(r31861);
        mpfr_init(r31862);
        mpfr_init(r31863);
        mpfr_init(r31864);
        mpfr_init(r31865);
        mpfr_init(r31866);
        mpfr_init(r31867);
        mpfr_init(r31868);
}

double f_fm(double c0, double w, double h, double D, double d, double M) {
        mpfr_set_d(r31840, c0, MPFR_RNDN);
        ;
        mpfr_set_si(r31842, mpfr_cmp(r31840, r31841) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_si(r31845, mpfr_cmp(r31840, r31844) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r31847, w, MPFR_RNDN);
        mpfr_mul(r31848, r31846, r31847, MPFR_RNDN);
        mpfr_div(r31849, r31840, r31848, MPFR_RNDN);
        mpfr_set_d(r31850, M, MPFR_RNDN);
        mpfr_mul(r31851, r31850, r31850, MPFR_RNDN);
        mpfr_set_d(r31852, d, MPFR_RNDN);
        mpfr_set_d(r31853, D, MPFR_RNDN);
        mpfr_div(r31854, r31852, r31853, MPFR_RNDN);
        mpfr_mul(r31855, r31854, r31854, MPFR_RNDN);
        mpfr_set_d(r31856, h, MPFR_RNDN);
        mpfr_mul(r31857, r31856, r31847, MPFR_RNDN);
        mpfr_div(r31858, r31857, r31840, MPFR_RNDN);
        mpfr_div(r31859, r31855, r31858, MPFR_RNDN);
        mpfr_sub(r31860, r31859, r31850, MPFR_RNDN);
        mpfr_add(r31861, r31850, r31859, MPFR_RNDN);
        mpfr_mul(r31862, r31860, r31861, MPFR_RNDN);
        mpfr_sqrt(r31863, r31862, MPFR_RNDN);
        mpfr_sub(r31864, r31859, r31863, MPFR_RNDN);
        mpfr_div(r31865, r31851, r31864, MPFR_RNDN);
        mpfr_mul(r31866, r31849, r31865, MPFR_RNDN);
        if (mpfr_get_si(r31845, MPFR_RNDN)) { mpfr_set(r31867, r31866, MPFR_RNDN); } else { mpfr_set(r31867, r31843, MPFR_RNDN); };
        if (mpfr_get_si(r31842, MPFR_RNDN)) { mpfr_set(r31868, r31843, MPFR_RNDN); } else { mpfr_set(r31868, r31867, MPFR_RNDN); };
        return mpfr_get_d(r31868, MPFR_RNDN);
}

static mpfr_t r31869, r31870, r31871, r31872, r31873, r31874, r31875, r31876, r31877, r31878, r31879, r31880, r31881, r31882, r31883, r31884, r31885, r31886, r31887, r31888, r31889, r31890, r31891, r31892, r31893, r31894, r31895, r31896, r31897;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(5008);
        mpfr_init(r31869);
        mpfr_init_set_str(r31870, "-1.8786594606845356e+35", 10, MPFR_RNDN);
        mpfr_init(r31871);
        mpfr_init_set_str(r31872, "0", 10, MPFR_RNDN);
        mpfr_init_set_str(r31873, "-3.560508914672266e-87", 10, MPFR_RNDN);
        mpfr_init(r31874);
        mpfr_init_set_str(r31875, "2", 10, MPFR_RNDN);
        mpfr_init(r31876);
        mpfr_init(r31877);
        mpfr_init(r31878);
        mpfr_init(r31879);
        mpfr_init(r31880);
        mpfr_init(r31881);
        mpfr_init(r31882);
        mpfr_init(r31883);
        mpfr_init(r31884);
        mpfr_init(r31885);
        mpfr_init(r31886);
        mpfr_init(r31887);
        mpfr_init(r31888);
        mpfr_init(r31889);
        mpfr_init(r31890);
        mpfr_init(r31891);
        mpfr_init(r31892);
        mpfr_init(r31893);
        mpfr_init(r31894);
        mpfr_init(r31895);
        mpfr_init(r31896);
        mpfr_init(r31897);
}

double f_dm(double c0, double w, double h, double D, double d, double M) {
        mpfr_set_d(r31869, c0, MPFR_RNDN);
        ;
        mpfr_set_si(r31871, mpfr_cmp(r31869, r31870) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_si(r31874, mpfr_cmp(r31869, r31873) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r31876, w, MPFR_RNDN);
        mpfr_mul(r31877, r31875, r31876, MPFR_RNDN);
        mpfr_div(r31878, r31869, r31877, MPFR_RNDN);
        mpfr_set_d(r31879, M, MPFR_RNDN);
        mpfr_mul(r31880, r31879, r31879, MPFR_RNDN);
        mpfr_set_d(r31881, d, MPFR_RNDN);
        mpfr_set_d(r31882, D, MPFR_RNDN);
        mpfr_div(r31883, r31881, r31882, MPFR_RNDN);
        mpfr_mul(r31884, r31883, r31883, MPFR_RNDN);
        mpfr_set_d(r31885, h, MPFR_RNDN);
        mpfr_mul(r31886, r31885, r31876, MPFR_RNDN);
        mpfr_div(r31887, r31886, r31869, MPFR_RNDN);
        mpfr_div(r31888, r31884, r31887, MPFR_RNDN);
        mpfr_sub(r31889, r31888, r31879, MPFR_RNDN);
        mpfr_add(r31890, r31879, r31888, MPFR_RNDN);
        mpfr_mul(r31891, r31889, r31890, MPFR_RNDN);
        mpfr_sqrt(r31892, r31891, MPFR_RNDN);
        mpfr_sub(r31893, r31888, r31892, MPFR_RNDN);
        mpfr_div(r31894, r31880, r31893, MPFR_RNDN);
        mpfr_mul(r31895, r31878, r31894, MPFR_RNDN);
        if (mpfr_get_si(r31874, MPFR_RNDN)) { mpfr_set(r31896, r31895, MPFR_RNDN); } else { mpfr_set(r31896, r31872, MPFR_RNDN); };
        if (mpfr_get_si(r31871, MPFR_RNDN)) { mpfr_set(r31897, r31872, MPFR_RNDN); } else { mpfr_set(r31897, r31896, MPFR_RNDN); };
        return mpfr_get_d(r31897, MPFR_RNDN);
}

