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

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

double f_if(float d, float h, float l, float M, float D) {
        float r31782 = d;
        float r31783 = h;
        float r31784 = r31782 / r31783;
        float r31785 = 1;
        float r31786 = 2;
        float r31787 = r31785 / r31786;
        float r31788 = pow(r31784, r31787);
        float r31789 = l;
        float r31790 = r31782 / r31789;
        float r31791 = pow(r31790, r31787);
        float r31792 = r31788 * r31791;
        float r31793 = M;
        float r31794 = D;
        float r31795 = r31793 * r31794;
        float r31796 = r31786 * r31782;
        float r31797 = r31795 / r31796;
        float r31798 = pow(r31797, r31786);
        float r31799 = r31787 * r31798;
        float r31800 = r31783 / r31789;
        float r31801 = r31799 * r31800;
        float r31802 = r31785 - r31801;
        float r31803 = r31792 * r31802;
        return r31803;
}

double f_id(double d, double h, double l, double M, double D) {
        double r31804 = d;
        double r31805 = h;
        double r31806 = r31804 / r31805;
        double r31807 = 1;
        double r31808 = 2;
        double r31809 = r31807 / r31808;
        double r31810 = pow(r31806, r31809);
        double r31811 = l;
        double r31812 = r31804 / r31811;
        double r31813 = pow(r31812, r31809);
        double r31814 = r31810 * r31813;
        double r31815 = M;
        double r31816 = D;
        double r31817 = r31815 * r31816;
        double r31818 = r31808 * r31804;
        double r31819 = r31817 / r31818;
        double r31820 = pow(r31819, r31808);
        double r31821 = r31809 * r31820;
        double r31822 = r31805 / r31811;
        double r31823 = r31821 * r31822;
        double r31824 = r31807 - r31823;
        double r31825 = r31814 * r31824;
        return r31825;
}


double f_of(float d, float h, float l, float M, float D) {
        float r31826 = l;
        float r31827 = 1.1752293688657991e-300;
        bool r31828 = r31826 <= r31827;
        float r31829 = d;
        float r31830 = h;
        float r31831 = r31829 / r31830;
        float r31832 = cbrt(r31831);
        float r31833 = r31832 * r31832;
        float r31834 = 1;
        float r31835 = 2;
        float r31836 = r31834 / r31835;
        float r31837 = pow(r31833, r31836);
        float r31838 = pow(r31832, r31836);
        float r31839 = r31837 * r31838;
        float r31840 = r31829 / r31826;
        float r31841 = pow(r31840, r31836);
        float r31842 = r31839 * r31841;
        float r31843 = M;
        float r31844 = D;
        float r31845 = r31843 * r31844;
        float r31846 = r31835 * r31829;
        float r31847 = r31845 / r31846;
        float r31848 = pow(r31847, r31835);
        float r31849 = r31834 * r31848;
        float r31850 = r31849 * r31830;
        float r31851 = r31835 * r31826;
        float r31852 = r31850 / r31851;
        float r31853 = r31834 - r31852;
        float r31854 = r31842 * r31853;
        float r31855 = 4.16807317627252e-141;
        bool r31856 = r31826 <= r31855;
        float r31857 = pow(r31831, r31836);
        float r31858 = pow(r31829, r31836);
        float r31859 = r31834 / r31826;
        float r31860 = pow(r31859, r31836);
        float r31861 = r31858 * r31860;
        float r31862 = r31857 * r31861;
        float r31863 = r31862 * r31853;
        float r31864 = r31834 / r31830;
        float r31865 = pow(r31864, r31836);
        float r31866 = r31858 * r31865;
        float r31867 = r31866 * r31841;
        float r31868 = r31867 * r31853;
        float r31869 = r31856 ? r31863 : r31868;
        float r31870 = r31828 ? r31854 : r31869;
        return r31870;
}

double f_od(double d, double h, double l, double M, double D) {
        double r31871 = l;
        double r31872 = 1.1752293688657991e-300;
        bool r31873 = r31871 <= r31872;
        double r31874 = d;
        double r31875 = h;
        double r31876 = r31874 / r31875;
        double r31877 = cbrt(r31876);
        double r31878 = r31877 * r31877;
        double r31879 = 1;
        double r31880 = 2;
        double r31881 = r31879 / r31880;
        double r31882 = pow(r31878, r31881);
        double r31883 = pow(r31877, r31881);
        double r31884 = r31882 * r31883;
        double r31885 = r31874 / r31871;
        double r31886 = pow(r31885, r31881);
        double r31887 = r31884 * r31886;
        double r31888 = M;
        double r31889 = D;
        double r31890 = r31888 * r31889;
        double r31891 = r31880 * r31874;
        double r31892 = r31890 / r31891;
        double r31893 = pow(r31892, r31880);
        double r31894 = r31879 * r31893;
        double r31895 = r31894 * r31875;
        double r31896 = r31880 * r31871;
        double r31897 = r31895 / r31896;
        double r31898 = r31879 - r31897;
        double r31899 = r31887 * r31898;
        double r31900 = 4.16807317627252e-141;
        bool r31901 = r31871 <= r31900;
        double r31902 = pow(r31876, r31881);
        double r31903 = pow(r31874, r31881);
        double r31904 = r31879 / r31871;
        double r31905 = pow(r31904, r31881);
        double r31906 = r31903 * r31905;
        double r31907 = r31902 * r31906;
        double r31908 = r31907 * r31898;
        double r31909 = r31879 / r31875;
        double r31910 = pow(r31909, r31881);
        double r31911 = r31903 * r31910;
        double r31912 = r31911 * r31886;
        double r31913 = r31912 * r31898;
        double r31914 = r31901 ? r31908 : r31913;
        double r31915 = r31873 ? r31899 : r31914;
        return r31915;
}

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 r31916, r31917, r31918, r31919, r31920, r31921, r31922, r31923, r31924, r31925, r31926, r31927, r31928, r31929, r31930, r31931, r31932, r31933, r31934, r31935, r31936, r31937;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r31916);
        mpfr_init(r31917);
        mpfr_init(r31918);
        mpfr_init_set_str(r31919, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r31920, "2", 10, MPFR_RNDN);
        mpfr_init(r31921);
        mpfr_init(r31922);
        mpfr_init(r31923);
        mpfr_init(r31924);
        mpfr_init(r31925);
        mpfr_init(r31926);
        mpfr_init(r31927);
        mpfr_init(r31928);
        mpfr_init(r31929);
        mpfr_init(r31930);
        mpfr_init(r31931);
        mpfr_init(r31932);
        mpfr_init(r31933);
        mpfr_init(r31934);
        mpfr_init(r31935);
        mpfr_init(r31936);
        mpfr_init(r31937);
}

double f_im(double d, double h, double l, double M, double D) {
        mpfr_set_d(r31916, d, MPFR_RNDN);
        mpfr_set_d(r31917, h, MPFR_RNDN);
        mpfr_div(r31918, r31916, r31917, MPFR_RNDN);
        ;
        ;
        mpfr_div(r31921, r31919, r31920, MPFR_RNDN);
        mpfr_pow(r31922, r31918, r31921, MPFR_RNDN);
        mpfr_set_d(r31923, l, MPFR_RNDN);
        mpfr_div(r31924, r31916, r31923, MPFR_RNDN);
        mpfr_pow(r31925, r31924, r31921, MPFR_RNDN);
        mpfr_mul(r31926, r31922, r31925, MPFR_RNDN);
        mpfr_set_d(r31927, M, MPFR_RNDN);
        mpfr_set_d(r31928, D, MPFR_RNDN);
        mpfr_mul(r31929, r31927, r31928, MPFR_RNDN);
        mpfr_mul(r31930, r31920, r31916, MPFR_RNDN);
        mpfr_div(r31931, r31929, r31930, MPFR_RNDN);
        mpfr_pow(r31932, r31931, r31920, MPFR_RNDN);
        mpfr_mul(r31933, r31921, r31932, MPFR_RNDN);
        mpfr_div(r31934, r31917, r31923, MPFR_RNDN);
        mpfr_mul(r31935, r31933, r31934, MPFR_RNDN);
        mpfr_sub(r31936, r31919, r31935, MPFR_RNDN);
        mpfr_mul(r31937, r31926, r31936, MPFR_RNDN);
        return mpfr_get_d(r31937, MPFR_RNDN);
}

static mpfr_t r31938, r31939, r31940, r31941, r31942, r31943, r31944, r31945, r31946, r31947, r31948, r31949, r31950, r31951, r31952, r31953, r31954, r31955, r31956, r31957, r31958, r31959, r31960, r31961, r31962, r31963, r31964, r31965, r31966, r31967, r31968, r31969, r31970, r31971, r31972, r31973, r31974, r31975, r31976, r31977, r31978, r31979, r31980, r31981, r31982;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31938);
        mpfr_init_set_str(r31939, "1.1752293688657991e-300", 10, MPFR_RNDN);
        mpfr_init(r31940);
        mpfr_init(r31941);
        mpfr_init(r31942);
        mpfr_init(r31943);
        mpfr_init(r31944);
        mpfr_init(r31945);
        mpfr_init_set_str(r31946, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r31947, "2", 10, MPFR_RNDN);
        mpfr_init(r31948);
        mpfr_init(r31949);
        mpfr_init(r31950);
        mpfr_init(r31951);
        mpfr_init(r31952);
        mpfr_init(r31953);
        mpfr_init(r31954);
        mpfr_init(r31955);
        mpfr_init(r31956);
        mpfr_init(r31957);
        mpfr_init(r31958);
        mpfr_init(r31959);
        mpfr_init(r31960);
        mpfr_init(r31961);
        mpfr_init(r31962);
        mpfr_init(r31963);
        mpfr_init(r31964);
        mpfr_init(r31965);
        mpfr_init(r31966);
        mpfr_init_set_str(r31967, "4.16807317627252e-141", 10, MPFR_RNDN);
        mpfr_init(r31968);
        mpfr_init(r31969);
        mpfr_init(r31970);
        mpfr_init(r31971);
        mpfr_init(r31972);
        mpfr_init(r31973);
        mpfr_init(r31974);
        mpfr_init(r31975);
        mpfr_init(r31976);
        mpfr_init(r31977);
        mpfr_init(r31978);
        mpfr_init(r31979);
        mpfr_init(r31980);
        mpfr_init(r31981);
        mpfr_init(r31982);
}

double f_fm(double d, double h, double l, double M, double D) {
        mpfr_set_d(r31938, l, MPFR_RNDN);
        ;
        mpfr_set_si(r31940, mpfr_cmp(r31938, r31939) <= 0, MPFR_RNDN);
        mpfr_set_d(r31941, d, MPFR_RNDN);
        mpfr_set_d(r31942, h, MPFR_RNDN);
        mpfr_div(r31943, r31941, r31942, MPFR_RNDN);
        mpfr_cbrt(r31944, r31943, MPFR_RNDN);
        mpfr_mul(r31945, r31944, r31944, MPFR_RNDN);
        ;
        ;
        mpfr_div(r31948, r31946, r31947, MPFR_RNDN);
        mpfr_pow(r31949, r31945, r31948, MPFR_RNDN);
        mpfr_pow(r31950, r31944, r31948, MPFR_RNDN);
        mpfr_mul(r31951, r31949, r31950, MPFR_RNDN);
        mpfr_div(r31952, r31941, r31938, MPFR_RNDN);
        mpfr_pow(r31953, r31952, r31948, MPFR_RNDN);
        mpfr_mul(r31954, r31951, r31953, MPFR_RNDN);
        mpfr_set_d(r31955, M, MPFR_RNDN);
        mpfr_set_d(r31956, D, MPFR_RNDN);
        mpfr_mul(r31957, r31955, r31956, MPFR_RNDN);
        mpfr_mul(r31958, r31947, r31941, MPFR_RNDN);
        mpfr_div(r31959, r31957, r31958, MPFR_RNDN);
        mpfr_pow(r31960, r31959, r31947, MPFR_RNDN);
        mpfr_mul(r31961, r31946, r31960, MPFR_RNDN);
        mpfr_mul(r31962, r31961, r31942, MPFR_RNDN);
        mpfr_mul(r31963, r31947, r31938, MPFR_RNDN);
        mpfr_div(r31964, r31962, r31963, MPFR_RNDN);
        mpfr_sub(r31965, r31946, r31964, MPFR_RNDN);
        mpfr_mul(r31966, r31954, r31965, MPFR_RNDN);
        ;
        mpfr_set_si(r31968, mpfr_cmp(r31938, r31967) <= 0, MPFR_RNDN);
        mpfr_pow(r31969, r31943, r31948, MPFR_RNDN);
        mpfr_pow(r31970, r31941, r31948, MPFR_RNDN);
        mpfr_div(r31971, r31946, r31938, MPFR_RNDN);
        mpfr_pow(r31972, r31971, r31948, MPFR_RNDN);
        mpfr_mul(r31973, r31970, r31972, MPFR_RNDN);
        mpfr_mul(r31974, r31969, r31973, MPFR_RNDN);
        mpfr_mul(r31975, r31974, r31965, MPFR_RNDN);
        mpfr_div(r31976, r31946, r31942, MPFR_RNDN);
        mpfr_pow(r31977, r31976, r31948, MPFR_RNDN);
        mpfr_mul(r31978, r31970, r31977, MPFR_RNDN);
        mpfr_mul(r31979, r31978, r31953, MPFR_RNDN);
        mpfr_mul(r31980, r31979, r31965, MPFR_RNDN);
        if (mpfr_get_si(r31968, MPFR_RNDN)) { mpfr_set(r31981, r31975, MPFR_RNDN); } else { mpfr_set(r31981, r31980, MPFR_RNDN); };
        if (mpfr_get_si(r31940, MPFR_RNDN)) { mpfr_set(r31982, r31966, MPFR_RNDN); } else { mpfr_set(r31982, r31981, MPFR_RNDN); };
        return mpfr_get_d(r31982, MPFR_RNDN);
}

static mpfr_t r31983, r31984, r31985, r31986, r31987, r31988, r31989, r31990, r31991, r31992, r31993, r31994, r31995, r31996, r31997, r31998, r31999, r32000, r32001, r32002, r32003, r32004, r32005, r32006, r32007, r32008, r32009, r32010, r32011, r32012, r32013, r32014, r32015, r32016, r32017, r32018, r32019, r32020, r32021, r32022, r32023, r32024, r32025, r32026, r32027;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31983);
        mpfr_init_set_str(r31984, "1.1752293688657991e-300", 10, MPFR_RNDN);
        mpfr_init(r31985);
        mpfr_init(r31986);
        mpfr_init(r31987);
        mpfr_init(r31988);
        mpfr_init(r31989);
        mpfr_init(r31990);
        mpfr_init_set_str(r31991, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r31992, "2", 10, MPFR_RNDN);
        mpfr_init(r31993);
        mpfr_init(r31994);
        mpfr_init(r31995);
        mpfr_init(r31996);
        mpfr_init(r31997);
        mpfr_init(r31998);
        mpfr_init(r31999);
        mpfr_init(r32000);
        mpfr_init(r32001);
        mpfr_init(r32002);
        mpfr_init(r32003);
        mpfr_init(r32004);
        mpfr_init(r32005);
        mpfr_init(r32006);
        mpfr_init(r32007);
        mpfr_init(r32008);
        mpfr_init(r32009);
        mpfr_init(r32010);
        mpfr_init(r32011);
        mpfr_init_set_str(r32012, "4.16807317627252e-141", 10, MPFR_RNDN);
        mpfr_init(r32013);
        mpfr_init(r32014);
        mpfr_init(r32015);
        mpfr_init(r32016);
        mpfr_init(r32017);
        mpfr_init(r32018);
        mpfr_init(r32019);
        mpfr_init(r32020);
        mpfr_init(r32021);
        mpfr_init(r32022);
        mpfr_init(r32023);
        mpfr_init(r32024);
        mpfr_init(r32025);
        mpfr_init(r32026);
        mpfr_init(r32027);
}

double f_dm(double d, double h, double l, double M, double D) {
        mpfr_set_d(r31983, l, MPFR_RNDN);
        ;
        mpfr_set_si(r31985, mpfr_cmp(r31983, r31984) <= 0, MPFR_RNDN);
        mpfr_set_d(r31986, d, MPFR_RNDN);
        mpfr_set_d(r31987, h, MPFR_RNDN);
        mpfr_div(r31988, r31986, r31987, MPFR_RNDN);
        mpfr_cbrt(r31989, r31988, MPFR_RNDN);
        mpfr_mul(r31990, r31989, r31989, MPFR_RNDN);
        ;
        ;
        mpfr_div(r31993, r31991, r31992, MPFR_RNDN);
        mpfr_pow(r31994, r31990, r31993, MPFR_RNDN);
        mpfr_pow(r31995, r31989, r31993, MPFR_RNDN);
        mpfr_mul(r31996, r31994, r31995, MPFR_RNDN);
        mpfr_div(r31997, r31986, r31983, MPFR_RNDN);
        mpfr_pow(r31998, r31997, r31993, MPFR_RNDN);
        mpfr_mul(r31999, r31996, r31998, MPFR_RNDN);
        mpfr_set_d(r32000, M, MPFR_RNDN);
        mpfr_set_d(r32001, D, MPFR_RNDN);
        mpfr_mul(r32002, r32000, r32001, MPFR_RNDN);
        mpfr_mul(r32003, r31992, r31986, MPFR_RNDN);
        mpfr_div(r32004, r32002, r32003, MPFR_RNDN);
        mpfr_pow(r32005, r32004, r31992, MPFR_RNDN);
        mpfr_mul(r32006, r31991, r32005, MPFR_RNDN);
        mpfr_mul(r32007, r32006, r31987, MPFR_RNDN);
        mpfr_mul(r32008, r31992, r31983, MPFR_RNDN);
        mpfr_div(r32009, r32007, r32008, MPFR_RNDN);
        mpfr_sub(r32010, r31991, r32009, MPFR_RNDN);
        mpfr_mul(r32011, r31999, r32010, MPFR_RNDN);
        ;
        mpfr_set_si(r32013, mpfr_cmp(r31983, r32012) <= 0, MPFR_RNDN);
        mpfr_pow(r32014, r31988, r31993, MPFR_RNDN);
        mpfr_pow(r32015, r31986, r31993, MPFR_RNDN);
        mpfr_div(r32016, r31991, r31983, MPFR_RNDN);
        mpfr_pow(r32017, r32016, r31993, MPFR_RNDN);
        mpfr_mul(r32018, r32015, r32017, MPFR_RNDN);
        mpfr_mul(r32019, r32014, r32018, MPFR_RNDN);
        mpfr_mul(r32020, r32019, r32010, MPFR_RNDN);
        mpfr_div(r32021, r31991, r31987, MPFR_RNDN);
        mpfr_pow(r32022, r32021, r31993, MPFR_RNDN);
        mpfr_mul(r32023, r32015, r32022, MPFR_RNDN);
        mpfr_mul(r32024, r32023, r31998, MPFR_RNDN);
        mpfr_mul(r32025, r32024, r32010, MPFR_RNDN);
        if (mpfr_get_si(r32013, MPFR_RNDN)) { mpfr_set(r32026, r32020, MPFR_RNDN); } else { mpfr_set(r32026, r32025, MPFR_RNDN); };
        if (mpfr_get_si(r31985, MPFR_RNDN)) { mpfr_set(r32027, r32011, MPFR_RNDN); } else { mpfr_set(r32027, r32026, MPFR_RNDN); };
        return mpfr_get_d(r32027, MPFR_RNDN);
}

