#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 r31979 = d;
        float r31980 = h;
        float r31981 = r31979 / r31980;
        float r31982 = 1;
        float r31983 = 2;
        float r31984 = r31982 / r31983;
        float r31985 = pow(r31981, r31984);
        float r31986 = l;
        float r31987 = r31979 / r31986;
        float r31988 = pow(r31987, r31984);
        float r31989 = r31985 * r31988;
        float r31990 = M;
        float r31991 = D;
        float r31992 = r31990 * r31991;
        float r31993 = r31983 * r31979;
        float r31994 = r31992 / r31993;
        float r31995 = pow(r31994, r31983);
        float r31996 = r31984 * r31995;
        float r31997 = r31980 / r31986;
        float r31998 = r31996 * r31997;
        float r31999 = r31982 - r31998;
        float r32000 = r31989 * r31999;
        return r32000;
}

double f_id(double d, double h, double l, double M, double D) {
        double r32001 = d;
        double r32002 = h;
        double r32003 = r32001 / r32002;
        double r32004 = 1;
        double r32005 = 2;
        double r32006 = r32004 / r32005;
        double r32007 = pow(r32003, r32006);
        double r32008 = l;
        double r32009 = r32001 / r32008;
        double r32010 = pow(r32009, r32006);
        double r32011 = r32007 * r32010;
        double r32012 = M;
        double r32013 = D;
        double r32014 = r32012 * r32013;
        double r32015 = r32005 * r32001;
        double r32016 = r32014 / r32015;
        double r32017 = pow(r32016, r32005);
        double r32018 = r32006 * r32017;
        double r32019 = r32002 / r32008;
        double r32020 = r32018 * r32019;
        double r32021 = r32004 - r32020;
        double r32022 = r32011 * r32021;
        return r32022;
}


double f_of(float d, float h, float l, float M, float D) {
        float r32023 = l;
        float r32024 = 2.34152252046331e-309;
        bool r32025 = r32023 <= r32024;
        float r32026 = d;
        float r32027 = h;
        float r32028 = r32026 / r32027;
        float r32029 = cbrt(r32028);
        float r32030 = r32029 * r32029;
        float r32031 = 1;
        float r32032 = 2;
        float r32033 = r32031 / r32032;
        float r32034 = pow(r32030, r32033);
        float r32035 = cbrt(r32026);
        float r32036 = r32031 / r32027;
        float r32037 = cbrt(r32036);
        float r32038 = r32035 * r32037;
        float r32039 = pow(r32038, r32033);
        float r32040 = r32034 * r32039;
        float r32041 = r32026 / r32023;
        float r32042 = pow(r32041, r32033);
        float r32043 = r32040 * r32042;
        float r32044 = M;
        float r32045 = D;
        float r32046 = r32044 * r32045;
        float r32047 = r32032 * r32026;
        float r32048 = r32046 / r32047;
        float r32049 = pow(r32048, r32032);
        float r32050 = r32031 * r32049;
        float r32051 = r32050 * r32027;
        float r32052 = r32032 * r32023;
        float r32053 = r32051 / r32052;
        float r32054 = r32031 - r32053;
        float r32055 = r32043 * r32054;
        float r32056 = 3.0224487140598196e-141;
        bool r32057 = r32023 <= r32056;
        float r32058 = pow(r32028, r32033);
        float r32059 = pow(r32026, r32033);
        float r32060 = r32031 / r32023;
        float r32061 = pow(r32060, r32033);
        float r32062 = r32059 * r32061;
        float r32063 = r32058 * r32062;
        float r32064 = r32063 * r32054;
        float r32065 = pow(r32036, r32033);
        float r32066 = r32059 * r32065;
        float r32067 = r32066 * r32042;
        float r32068 = r32067 * r32054;
        float r32069 = r32057 ? r32064 : r32068;
        float r32070 = r32025 ? r32055 : r32069;
        return r32070;
}

double f_od(double d, double h, double l, double M, double D) {
        double r32071 = l;
        double r32072 = 2.34152252046331e-309;
        bool r32073 = r32071 <= r32072;
        double r32074 = d;
        double r32075 = h;
        double r32076 = r32074 / r32075;
        double r32077 = cbrt(r32076);
        double r32078 = r32077 * r32077;
        double r32079 = 1;
        double r32080 = 2;
        double r32081 = r32079 / r32080;
        double r32082 = pow(r32078, r32081);
        double r32083 = cbrt(r32074);
        double r32084 = r32079 / r32075;
        double r32085 = cbrt(r32084);
        double r32086 = r32083 * r32085;
        double r32087 = pow(r32086, r32081);
        double r32088 = r32082 * r32087;
        double r32089 = r32074 / r32071;
        double r32090 = pow(r32089, r32081);
        double r32091 = r32088 * r32090;
        double r32092 = M;
        double r32093 = D;
        double r32094 = r32092 * r32093;
        double r32095 = r32080 * r32074;
        double r32096 = r32094 / r32095;
        double r32097 = pow(r32096, r32080);
        double r32098 = r32079 * r32097;
        double r32099 = r32098 * r32075;
        double r32100 = r32080 * r32071;
        double r32101 = r32099 / r32100;
        double r32102 = r32079 - r32101;
        double r32103 = r32091 * r32102;
        double r32104 = 3.0224487140598196e-141;
        bool r32105 = r32071 <= r32104;
        double r32106 = pow(r32076, r32081);
        double r32107 = pow(r32074, r32081);
        double r32108 = r32079 / r32071;
        double r32109 = pow(r32108, r32081);
        double r32110 = r32107 * r32109;
        double r32111 = r32106 * r32110;
        double r32112 = r32111 * r32102;
        double r32113 = pow(r32084, r32081);
        double r32114 = r32107 * r32113;
        double r32115 = r32114 * r32090;
        double r32116 = r32115 * r32102;
        double r32117 = r32105 ? r32112 : r32116;
        double r32118 = r32073 ? r32103 : r32117;
        return r32118;
}

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 r32119, r32120, r32121, r32122, r32123, r32124, r32125, r32126, r32127, r32128, r32129, r32130, r32131, r32132, r32133, r32134, r32135, r32136, r32137, r32138, r32139, r32140;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r32119);
        mpfr_init(r32120);
        mpfr_init(r32121);
        mpfr_init_set_str(r32122, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32123, "2", 10, MPFR_RNDN);
        mpfr_init(r32124);
        mpfr_init(r32125);
        mpfr_init(r32126);
        mpfr_init(r32127);
        mpfr_init(r32128);
        mpfr_init(r32129);
        mpfr_init(r32130);
        mpfr_init(r32131);
        mpfr_init(r32132);
        mpfr_init(r32133);
        mpfr_init(r32134);
        mpfr_init(r32135);
        mpfr_init(r32136);
        mpfr_init(r32137);
        mpfr_init(r32138);
        mpfr_init(r32139);
        mpfr_init(r32140);
}

double f_im(double d, double h, double l, double M, double D) {
        mpfr_set_d(r32119, d, MPFR_RNDN);
        mpfr_set_d(r32120, h, MPFR_RNDN);
        mpfr_div(r32121, r32119, r32120, MPFR_RNDN);
        ;
        ;
        mpfr_div(r32124, r32122, r32123, MPFR_RNDN);
        mpfr_pow(r32125, r32121, r32124, MPFR_RNDN);
        mpfr_set_d(r32126, l, MPFR_RNDN);
        mpfr_div(r32127, r32119, r32126, MPFR_RNDN);
        mpfr_pow(r32128, r32127, r32124, MPFR_RNDN);
        mpfr_mul(r32129, r32125, r32128, MPFR_RNDN);
        mpfr_set_d(r32130, M, MPFR_RNDN);
        mpfr_set_d(r32131, D, MPFR_RNDN);
        mpfr_mul(r32132, r32130, r32131, MPFR_RNDN);
        mpfr_mul(r32133, r32123, r32119, MPFR_RNDN);
        mpfr_div(r32134, r32132, r32133, MPFR_RNDN);
        mpfr_pow(r32135, r32134, r32123, MPFR_RNDN);
        mpfr_mul(r32136, r32124, r32135, MPFR_RNDN);
        mpfr_div(r32137, r32120, r32126, MPFR_RNDN);
        mpfr_mul(r32138, r32136, r32137, MPFR_RNDN);
        mpfr_sub(r32139, r32122, r32138, MPFR_RNDN);
        mpfr_mul(r32140, r32129, r32139, MPFR_RNDN);
        return mpfr_get_d(r32140, MPFR_RNDN);
}

static mpfr_t r32141, r32142, r32143, r32144, r32145, r32146, r32147, r32148, r32149, r32150, r32151, r32152, r32153, r32154, r32155, r32156, r32157, r32158, r32159, r32160, r32161, r32162, r32163, r32164, r32165, r32166, r32167, r32168, r32169, r32170, r32171, r32172, r32173, r32174, r32175, r32176, r32177, r32178, r32179, r32180, r32181, r32182, r32183, r32184, r32185, r32186, r32187, r32188;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32141);
        mpfr_init_set_str(r32142, "2.34152252046331e-309", 10, MPFR_RNDN);
        mpfr_init(r32143);
        mpfr_init(r32144);
        mpfr_init(r32145);
        mpfr_init(r32146);
        mpfr_init(r32147);
        mpfr_init(r32148);
        mpfr_init_set_str(r32149, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32150, "2", 10, MPFR_RNDN);
        mpfr_init(r32151);
        mpfr_init(r32152);
        mpfr_init(r32153);
        mpfr_init(r32154);
        mpfr_init(r32155);
        mpfr_init(r32156);
        mpfr_init(r32157);
        mpfr_init(r32158);
        mpfr_init(r32159);
        mpfr_init(r32160);
        mpfr_init(r32161);
        mpfr_init(r32162);
        mpfr_init(r32163);
        mpfr_init(r32164);
        mpfr_init(r32165);
        mpfr_init(r32166);
        mpfr_init(r32167);
        mpfr_init(r32168);
        mpfr_init(r32169);
        mpfr_init(r32170);
        mpfr_init(r32171);
        mpfr_init(r32172);
        mpfr_init(r32173);
        mpfr_init_set_str(r32174, "3.0224487140598196e-141", 10, MPFR_RNDN);
        mpfr_init(r32175);
        mpfr_init(r32176);
        mpfr_init(r32177);
        mpfr_init(r32178);
        mpfr_init(r32179);
        mpfr_init(r32180);
        mpfr_init(r32181);
        mpfr_init(r32182);
        mpfr_init(r32183);
        mpfr_init(r32184);
        mpfr_init(r32185);
        mpfr_init(r32186);
        mpfr_init(r32187);
        mpfr_init(r32188);
}

double f_fm(double d, double h, double l, double M, double D) {
        mpfr_set_d(r32141, l, MPFR_RNDN);
        ;
        mpfr_set_si(r32143, mpfr_cmp(r32141, r32142) <= 0, MPFR_RNDN);
        mpfr_set_d(r32144, d, MPFR_RNDN);
        mpfr_set_d(r32145, h, MPFR_RNDN);
        mpfr_div(r32146, r32144, r32145, MPFR_RNDN);
        mpfr_cbrt(r32147, r32146, MPFR_RNDN);
        mpfr_mul(r32148, r32147, r32147, MPFR_RNDN);
        ;
        ;
        mpfr_div(r32151, r32149, r32150, MPFR_RNDN);
        mpfr_pow(r32152, r32148, r32151, MPFR_RNDN);
        mpfr_cbrt(r32153, r32144, MPFR_RNDN);
        mpfr_div(r32154, r32149, r32145, MPFR_RNDN);
        mpfr_cbrt(r32155, r32154, MPFR_RNDN);
        mpfr_mul(r32156, r32153, r32155, MPFR_RNDN);
        mpfr_pow(r32157, r32156, r32151, MPFR_RNDN);
        mpfr_mul(r32158, r32152, r32157, MPFR_RNDN);
        mpfr_div(r32159, r32144, r32141, MPFR_RNDN);
        mpfr_pow(r32160, r32159, r32151, MPFR_RNDN);
        mpfr_mul(r32161, r32158, r32160, MPFR_RNDN);
        mpfr_set_d(r32162, M, MPFR_RNDN);
        mpfr_set_d(r32163, D, MPFR_RNDN);
        mpfr_mul(r32164, r32162, r32163, MPFR_RNDN);
        mpfr_mul(r32165, r32150, r32144, MPFR_RNDN);
        mpfr_div(r32166, r32164, r32165, MPFR_RNDN);
        mpfr_pow(r32167, r32166, r32150, MPFR_RNDN);
        mpfr_mul(r32168, r32149, r32167, MPFR_RNDN);
        mpfr_mul(r32169, r32168, r32145, MPFR_RNDN);
        mpfr_mul(r32170, r32150, r32141, MPFR_RNDN);
        mpfr_div(r32171, r32169, r32170, MPFR_RNDN);
        mpfr_sub(r32172, r32149, r32171, MPFR_RNDN);
        mpfr_mul(r32173, r32161, r32172, MPFR_RNDN);
        ;
        mpfr_set_si(r32175, mpfr_cmp(r32141, r32174) <= 0, MPFR_RNDN);
        mpfr_pow(r32176, r32146, r32151, MPFR_RNDN);
        mpfr_pow(r32177, r32144, r32151, MPFR_RNDN);
        mpfr_div(r32178, r32149, r32141, MPFR_RNDN);
        mpfr_pow(r32179, r32178, r32151, MPFR_RNDN);
        mpfr_mul(r32180, r32177, r32179, MPFR_RNDN);
        mpfr_mul(r32181, r32176, r32180, MPFR_RNDN);
        mpfr_mul(r32182, r32181, r32172, MPFR_RNDN);
        mpfr_pow(r32183, r32154, r32151, MPFR_RNDN);
        mpfr_mul(r32184, r32177, r32183, MPFR_RNDN);
        mpfr_mul(r32185, r32184, r32160, MPFR_RNDN);
        mpfr_mul(r32186, r32185, r32172, MPFR_RNDN);
        if (mpfr_get_si(r32175, MPFR_RNDN)) { mpfr_set(r32187, r32182, MPFR_RNDN); } else { mpfr_set(r32187, r32186, MPFR_RNDN); };
        if (mpfr_get_si(r32143, MPFR_RNDN)) { mpfr_set(r32188, r32173, MPFR_RNDN); } else { mpfr_set(r32188, r32187, MPFR_RNDN); };
        return mpfr_get_d(r32188, MPFR_RNDN);
}

static mpfr_t r32189, r32190, r32191, r32192, r32193, r32194, r32195, r32196, r32197, r32198, r32199, r32200, r32201, r32202, r32203, r32204, r32205, r32206, r32207, r32208, r32209, r32210, r32211, r32212, r32213, r32214, r32215, r32216, r32217, r32218, r32219, r32220, r32221, r32222, r32223, r32224, r32225, r32226, r32227, r32228, r32229, r32230, r32231, r32232, r32233, r32234, r32235, r32236;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32189);
        mpfr_init_set_str(r32190, "2.34152252046331e-309", 10, MPFR_RNDN);
        mpfr_init(r32191);
        mpfr_init(r32192);
        mpfr_init(r32193);
        mpfr_init(r32194);
        mpfr_init(r32195);
        mpfr_init(r32196);
        mpfr_init_set_str(r32197, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32198, "2", 10, MPFR_RNDN);
        mpfr_init(r32199);
        mpfr_init(r32200);
        mpfr_init(r32201);
        mpfr_init(r32202);
        mpfr_init(r32203);
        mpfr_init(r32204);
        mpfr_init(r32205);
        mpfr_init(r32206);
        mpfr_init(r32207);
        mpfr_init(r32208);
        mpfr_init(r32209);
        mpfr_init(r32210);
        mpfr_init(r32211);
        mpfr_init(r32212);
        mpfr_init(r32213);
        mpfr_init(r32214);
        mpfr_init(r32215);
        mpfr_init(r32216);
        mpfr_init(r32217);
        mpfr_init(r32218);
        mpfr_init(r32219);
        mpfr_init(r32220);
        mpfr_init(r32221);
        mpfr_init_set_str(r32222, "3.0224487140598196e-141", 10, MPFR_RNDN);
        mpfr_init(r32223);
        mpfr_init(r32224);
        mpfr_init(r32225);
        mpfr_init(r32226);
        mpfr_init(r32227);
        mpfr_init(r32228);
        mpfr_init(r32229);
        mpfr_init(r32230);
        mpfr_init(r32231);
        mpfr_init(r32232);
        mpfr_init(r32233);
        mpfr_init(r32234);
        mpfr_init(r32235);
        mpfr_init(r32236);
}

double f_dm(double d, double h, double l, double M, double D) {
        mpfr_set_d(r32189, l, MPFR_RNDN);
        ;
        mpfr_set_si(r32191, mpfr_cmp(r32189, r32190) <= 0, MPFR_RNDN);
        mpfr_set_d(r32192, d, MPFR_RNDN);
        mpfr_set_d(r32193, h, MPFR_RNDN);
        mpfr_div(r32194, r32192, r32193, MPFR_RNDN);
        mpfr_cbrt(r32195, r32194, MPFR_RNDN);
        mpfr_mul(r32196, r32195, r32195, MPFR_RNDN);
        ;
        ;
        mpfr_div(r32199, r32197, r32198, MPFR_RNDN);
        mpfr_pow(r32200, r32196, r32199, MPFR_RNDN);
        mpfr_cbrt(r32201, r32192, MPFR_RNDN);
        mpfr_div(r32202, r32197, r32193, MPFR_RNDN);
        mpfr_cbrt(r32203, r32202, MPFR_RNDN);
        mpfr_mul(r32204, r32201, r32203, MPFR_RNDN);
        mpfr_pow(r32205, r32204, r32199, MPFR_RNDN);
        mpfr_mul(r32206, r32200, r32205, MPFR_RNDN);
        mpfr_div(r32207, r32192, r32189, MPFR_RNDN);
        mpfr_pow(r32208, r32207, r32199, MPFR_RNDN);
        mpfr_mul(r32209, r32206, r32208, MPFR_RNDN);
        mpfr_set_d(r32210, M, MPFR_RNDN);
        mpfr_set_d(r32211, D, MPFR_RNDN);
        mpfr_mul(r32212, r32210, r32211, MPFR_RNDN);
        mpfr_mul(r32213, r32198, r32192, MPFR_RNDN);
        mpfr_div(r32214, r32212, r32213, MPFR_RNDN);
        mpfr_pow(r32215, r32214, r32198, MPFR_RNDN);
        mpfr_mul(r32216, r32197, r32215, MPFR_RNDN);
        mpfr_mul(r32217, r32216, r32193, MPFR_RNDN);
        mpfr_mul(r32218, r32198, r32189, MPFR_RNDN);
        mpfr_div(r32219, r32217, r32218, MPFR_RNDN);
        mpfr_sub(r32220, r32197, r32219, MPFR_RNDN);
        mpfr_mul(r32221, r32209, r32220, MPFR_RNDN);
        ;
        mpfr_set_si(r32223, mpfr_cmp(r32189, r32222) <= 0, MPFR_RNDN);
        mpfr_pow(r32224, r32194, r32199, MPFR_RNDN);
        mpfr_pow(r32225, r32192, r32199, MPFR_RNDN);
        mpfr_div(r32226, r32197, r32189, MPFR_RNDN);
        mpfr_pow(r32227, r32226, r32199, MPFR_RNDN);
        mpfr_mul(r32228, r32225, r32227, MPFR_RNDN);
        mpfr_mul(r32229, r32224, r32228, MPFR_RNDN);
        mpfr_mul(r32230, r32229, r32220, MPFR_RNDN);
        mpfr_pow(r32231, r32202, r32199, MPFR_RNDN);
        mpfr_mul(r32232, r32225, r32231, MPFR_RNDN);
        mpfr_mul(r32233, r32232, r32208, MPFR_RNDN);
        mpfr_mul(r32234, r32233, r32220, MPFR_RNDN);
        if (mpfr_get_si(r32223, MPFR_RNDN)) { mpfr_set(r32235, r32230, MPFR_RNDN); } else { mpfr_set(r32235, r32234, MPFR_RNDN); };
        if (mpfr_get_si(r32191, MPFR_RNDN)) { mpfr_set(r32236, r32221, MPFR_RNDN); } else { mpfr_set(r32236, r32235, MPFR_RNDN); };
        return mpfr_get_d(r32236, MPFR_RNDN);
}

