#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 r32231 = d;
        float r32232 = h;
        float r32233 = r32231 / r32232;
        float r32234 = 1;
        float r32235 = 2;
        float r32236 = r32234 / r32235;
        float r32237 = pow(r32233, r32236);
        float r32238 = l;
        float r32239 = r32231 / r32238;
        float r32240 = pow(r32239, r32236);
        float r32241 = r32237 * r32240;
        float r32242 = M;
        float r32243 = D;
        float r32244 = r32242 * r32243;
        float r32245 = r32235 * r32231;
        float r32246 = r32244 / r32245;
        float r32247 = pow(r32246, r32235);
        float r32248 = r32236 * r32247;
        float r32249 = r32232 / r32238;
        float r32250 = r32248 * r32249;
        float r32251 = r32234 - r32250;
        float r32252 = r32241 * r32251;
        return r32252;
}

double f_id(double d, double h, double l, double M, double D) {
        double r32253 = d;
        double r32254 = h;
        double r32255 = r32253 / r32254;
        double r32256 = 1;
        double r32257 = 2;
        double r32258 = r32256 / r32257;
        double r32259 = pow(r32255, r32258);
        double r32260 = l;
        double r32261 = r32253 / r32260;
        double r32262 = pow(r32261, r32258);
        double r32263 = r32259 * r32262;
        double r32264 = M;
        double r32265 = D;
        double r32266 = r32264 * r32265;
        double r32267 = r32257 * r32253;
        double r32268 = r32266 / r32267;
        double r32269 = pow(r32268, r32257);
        double r32270 = r32258 * r32269;
        double r32271 = r32254 / r32260;
        double r32272 = r32270 * r32271;
        double r32273 = r32256 - r32272;
        double r32274 = r32263 * r32273;
        return r32274;
}


double f_of(float d, float h, float l, float M, float D) {
        float r32275 = l;
        float r32276 = 1.1752293688657991e-300;
        bool r32277 = r32275 <= r32276;
        float r32278 = d;
        float r32279 = h;
        float r32280 = r32278 / r32279;
        float r32281 = cbrt(r32280);
        float r32282 = r32281 * r32281;
        float r32283 = 1;
        float r32284 = 2;
        float r32285 = r32283 / r32284;
        float r32286 = pow(r32282, r32285);
        float r32287 = cbrt(r32278);
        float r32288 = r32283 / r32279;
        float r32289 = cbrt(r32288);
        float r32290 = r32287 * r32289;
        float r32291 = pow(r32290, r32285);
        float r32292 = r32286 * r32291;
        float r32293 = r32278 / r32275;
        float r32294 = pow(r32293, r32285);
        float r32295 = r32292 * r32294;
        float r32296 = M;
        float r32297 = D;
        float r32298 = r32296 * r32297;
        float r32299 = r32284 * r32278;
        float r32300 = r32298 / r32299;
        float r32301 = pow(r32300, r32284);
        float r32302 = r32283 * r32301;
        float r32303 = r32302 * r32279;
        float r32304 = r32284 * r32275;
        float r32305 = r32303 / r32304;
        float r32306 = r32283 - r32305;
        float r32307 = r32295 * r32306;
        float r32308 = 4.16807317627252e-141;
        bool r32309 = r32275 <= r32308;
        float r32310 = pow(r32280, r32285);
        float r32311 = pow(r32278, r32285);
        float r32312 = r32283 / r32275;
        float r32313 = pow(r32312, r32285);
        float r32314 = r32311 * r32313;
        float r32315 = r32310 * r32314;
        float r32316 = r32315 * r32306;
        float r32317 = pow(r32288, r32285);
        float r32318 = r32311 * r32317;
        float r32319 = r32318 * r32294;
        float r32320 = r32319 * r32306;
        float r32321 = r32309 ? r32316 : r32320;
        float r32322 = r32277 ? r32307 : r32321;
        return r32322;
}

double f_od(double d, double h, double l, double M, double D) {
        double r32323 = l;
        double r32324 = 1.1752293688657991e-300;
        bool r32325 = r32323 <= r32324;
        double r32326 = d;
        double r32327 = h;
        double r32328 = r32326 / r32327;
        double r32329 = cbrt(r32328);
        double r32330 = r32329 * r32329;
        double r32331 = 1;
        double r32332 = 2;
        double r32333 = r32331 / r32332;
        double r32334 = pow(r32330, r32333);
        double r32335 = cbrt(r32326);
        double r32336 = r32331 / r32327;
        double r32337 = cbrt(r32336);
        double r32338 = r32335 * r32337;
        double r32339 = pow(r32338, r32333);
        double r32340 = r32334 * r32339;
        double r32341 = r32326 / r32323;
        double r32342 = pow(r32341, r32333);
        double r32343 = r32340 * r32342;
        double r32344 = M;
        double r32345 = D;
        double r32346 = r32344 * r32345;
        double r32347 = r32332 * r32326;
        double r32348 = r32346 / r32347;
        double r32349 = pow(r32348, r32332);
        double r32350 = r32331 * r32349;
        double r32351 = r32350 * r32327;
        double r32352 = r32332 * r32323;
        double r32353 = r32351 / r32352;
        double r32354 = r32331 - r32353;
        double r32355 = r32343 * r32354;
        double r32356 = 4.16807317627252e-141;
        bool r32357 = r32323 <= r32356;
        double r32358 = pow(r32328, r32333);
        double r32359 = pow(r32326, r32333);
        double r32360 = r32331 / r32323;
        double r32361 = pow(r32360, r32333);
        double r32362 = r32359 * r32361;
        double r32363 = r32358 * r32362;
        double r32364 = r32363 * r32354;
        double r32365 = pow(r32336, r32333);
        double r32366 = r32359 * r32365;
        double r32367 = r32366 * r32342;
        double r32368 = r32367 * r32354;
        double r32369 = r32357 ? r32364 : r32368;
        double r32370 = r32325 ? r32355 : r32369;
        return r32370;
}

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 r32371, r32372, r32373, r32374, r32375, r32376, r32377, r32378, r32379, r32380, r32381, r32382, r32383, r32384, r32385, r32386, r32387, r32388, r32389, r32390, r32391, r32392;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r32371);
        mpfr_init(r32372);
        mpfr_init(r32373);
        mpfr_init_set_str(r32374, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32375, "2", 10, MPFR_RNDN);
        mpfr_init(r32376);
        mpfr_init(r32377);
        mpfr_init(r32378);
        mpfr_init(r32379);
        mpfr_init(r32380);
        mpfr_init(r32381);
        mpfr_init(r32382);
        mpfr_init(r32383);
        mpfr_init(r32384);
        mpfr_init(r32385);
        mpfr_init(r32386);
        mpfr_init(r32387);
        mpfr_init(r32388);
        mpfr_init(r32389);
        mpfr_init(r32390);
        mpfr_init(r32391);
        mpfr_init(r32392);
}

double f_im(double d, double h, double l, double M, double D) {
        mpfr_set_d(r32371, d, MPFR_RNDN);
        mpfr_set_d(r32372, h, MPFR_RNDN);
        mpfr_div(r32373, r32371, r32372, MPFR_RNDN);
        ;
        ;
        mpfr_div(r32376, r32374, r32375, MPFR_RNDN);
        mpfr_pow(r32377, r32373, r32376, MPFR_RNDN);
        mpfr_set_d(r32378, l, MPFR_RNDN);
        mpfr_div(r32379, r32371, r32378, MPFR_RNDN);
        mpfr_pow(r32380, r32379, r32376, MPFR_RNDN);
        mpfr_mul(r32381, r32377, r32380, MPFR_RNDN);
        mpfr_set_d(r32382, M, MPFR_RNDN);
        mpfr_set_d(r32383, D, MPFR_RNDN);
        mpfr_mul(r32384, r32382, r32383, MPFR_RNDN);
        mpfr_mul(r32385, r32375, r32371, MPFR_RNDN);
        mpfr_div(r32386, r32384, r32385, MPFR_RNDN);
        mpfr_pow(r32387, r32386, r32375, MPFR_RNDN);
        mpfr_mul(r32388, r32376, r32387, MPFR_RNDN);
        mpfr_div(r32389, r32372, r32378, MPFR_RNDN);
        mpfr_mul(r32390, r32388, r32389, MPFR_RNDN);
        mpfr_sub(r32391, r32374, r32390, MPFR_RNDN);
        mpfr_mul(r32392, r32381, r32391, MPFR_RNDN);
        return mpfr_get_d(r32392, MPFR_RNDN);
}

static mpfr_t r32393, r32394, r32395, r32396, r32397, r32398, r32399, r32400, r32401, r32402, r32403, r32404, r32405, r32406, r32407, r32408, r32409, r32410, r32411, r32412, r32413, r32414, r32415, r32416, r32417, r32418, r32419, r32420, r32421, r32422, r32423, r32424, r32425, r32426, r32427, r32428, r32429, r32430, r32431, r32432, r32433, r32434, r32435, r32436, r32437, r32438, r32439, r32440;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32393);
        mpfr_init_set_str(r32394, "1.1752293688657991e-300", 10, MPFR_RNDN);
        mpfr_init(r32395);
        mpfr_init(r32396);
        mpfr_init(r32397);
        mpfr_init(r32398);
        mpfr_init(r32399);
        mpfr_init(r32400);
        mpfr_init_set_str(r32401, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32402, "2", 10, MPFR_RNDN);
        mpfr_init(r32403);
        mpfr_init(r32404);
        mpfr_init(r32405);
        mpfr_init(r32406);
        mpfr_init(r32407);
        mpfr_init(r32408);
        mpfr_init(r32409);
        mpfr_init(r32410);
        mpfr_init(r32411);
        mpfr_init(r32412);
        mpfr_init(r32413);
        mpfr_init(r32414);
        mpfr_init(r32415);
        mpfr_init(r32416);
        mpfr_init(r32417);
        mpfr_init(r32418);
        mpfr_init(r32419);
        mpfr_init(r32420);
        mpfr_init(r32421);
        mpfr_init(r32422);
        mpfr_init(r32423);
        mpfr_init(r32424);
        mpfr_init(r32425);
        mpfr_init_set_str(r32426, "4.16807317627252e-141", 10, MPFR_RNDN);
        mpfr_init(r32427);
        mpfr_init(r32428);
        mpfr_init(r32429);
        mpfr_init(r32430);
        mpfr_init(r32431);
        mpfr_init(r32432);
        mpfr_init(r32433);
        mpfr_init(r32434);
        mpfr_init(r32435);
        mpfr_init(r32436);
        mpfr_init(r32437);
        mpfr_init(r32438);
        mpfr_init(r32439);
        mpfr_init(r32440);
}

double f_fm(double d, double h, double l, double M, double D) {
        mpfr_set_d(r32393, l, MPFR_RNDN);
        ;
        mpfr_set_si(r32395, mpfr_cmp(r32393, r32394) <= 0, MPFR_RNDN);
        mpfr_set_d(r32396, d, MPFR_RNDN);
        mpfr_set_d(r32397, h, MPFR_RNDN);
        mpfr_div(r32398, r32396, r32397, MPFR_RNDN);
        mpfr_cbrt(r32399, r32398, MPFR_RNDN);
        mpfr_mul(r32400, r32399, r32399, MPFR_RNDN);
        ;
        ;
        mpfr_div(r32403, r32401, r32402, MPFR_RNDN);
        mpfr_pow(r32404, r32400, r32403, MPFR_RNDN);
        mpfr_cbrt(r32405, r32396, MPFR_RNDN);
        mpfr_div(r32406, r32401, r32397, MPFR_RNDN);
        mpfr_cbrt(r32407, r32406, MPFR_RNDN);
        mpfr_mul(r32408, r32405, r32407, MPFR_RNDN);
        mpfr_pow(r32409, r32408, r32403, MPFR_RNDN);
        mpfr_mul(r32410, r32404, r32409, MPFR_RNDN);
        mpfr_div(r32411, r32396, r32393, MPFR_RNDN);
        mpfr_pow(r32412, r32411, r32403, MPFR_RNDN);
        mpfr_mul(r32413, r32410, r32412, MPFR_RNDN);
        mpfr_set_d(r32414, M, MPFR_RNDN);
        mpfr_set_d(r32415, D, MPFR_RNDN);
        mpfr_mul(r32416, r32414, r32415, MPFR_RNDN);
        mpfr_mul(r32417, r32402, r32396, MPFR_RNDN);
        mpfr_div(r32418, r32416, r32417, MPFR_RNDN);
        mpfr_pow(r32419, r32418, r32402, MPFR_RNDN);
        mpfr_mul(r32420, r32401, r32419, MPFR_RNDN);
        mpfr_mul(r32421, r32420, r32397, MPFR_RNDN);
        mpfr_mul(r32422, r32402, r32393, MPFR_RNDN);
        mpfr_div(r32423, r32421, r32422, MPFR_RNDN);
        mpfr_sub(r32424, r32401, r32423, MPFR_RNDN);
        mpfr_mul(r32425, r32413, r32424, MPFR_RNDN);
        ;
        mpfr_set_si(r32427, mpfr_cmp(r32393, r32426) <= 0, MPFR_RNDN);
        mpfr_pow(r32428, r32398, r32403, MPFR_RNDN);
        mpfr_pow(r32429, r32396, r32403, MPFR_RNDN);
        mpfr_div(r32430, r32401, r32393, MPFR_RNDN);
        mpfr_pow(r32431, r32430, r32403, MPFR_RNDN);
        mpfr_mul(r32432, r32429, r32431, MPFR_RNDN);
        mpfr_mul(r32433, r32428, r32432, MPFR_RNDN);
        mpfr_mul(r32434, r32433, r32424, MPFR_RNDN);
        mpfr_pow(r32435, r32406, r32403, MPFR_RNDN);
        mpfr_mul(r32436, r32429, r32435, MPFR_RNDN);
        mpfr_mul(r32437, r32436, r32412, MPFR_RNDN);
        mpfr_mul(r32438, r32437, r32424, MPFR_RNDN);
        if (mpfr_get_si(r32427, MPFR_RNDN)) { mpfr_set(r32439, r32434, MPFR_RNDN); } else { mpfr_set(r32439, r32438, MPFR_RNDN); };
        if (mpfr_get_si(r32395, MPFR_RNDN)) { mpfr_set(r32440, r32425, MPFR_RNDN); } else { mpfr_set(r32440, r32439, MPFR_RNDN); };
        return mpfr_get_d(r32440, MPFR_RNDN);
}

static mpfr_t r32441, r32442, r32443, r32444, r32445, r32446, r32447, r32448, r32449, r32450, r32451, r32452, r32453, r32454, r32455, r32456, r32457, r32458, r32459, r32460, r32461, r32462, r32463, r32464, r32465, r32466, r32467, r32468, r32469, r32470, r32471, r32472, r32473, r32474, r32475, r32476, r32477, r32478, r32479, r32480, r32481, r32482, r32483, r32484, r32485, r32486, r32487, r32488;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32441);
        mpfr_init_set_str(r32442, "1.1752293688657991e-300", 10, MPFR_RNDN);
        mpfr_init(r32443);
        mpfr_init(r32444);
        mpfr_init(r32445);
        mpfr_init(r32446);
        mpfr_init(r32447);
        mpfr_init(r32448);
        mpfr_init_set_str(r32449, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32450, "2", 10, MPFR_RNDN);
        mpfr_init(r32451);
        mpfr_init(r32452);
        mpfr_init(r32453);
        mpfr_init(r32454);
        mpfr_init(r32455);
        mpfr_init(r32456);
        mpfr_init(r32457);
        mpfr_init(r32458);
        mpfr_init(r32459);
        mpfr_init(r32460);
        mpfr_init(r32461);
        mpfr_init(r32462);
        mpfr_init(r32463);
        mpfr_init(r32464);
        mpfr_init(r32465);
        mpfr_init(r32466);
        mpfr_init(r32467);
        mpfr_init(r32468);
        mpfr_init(r32469);
        mpfr_init(r32470);
        mpfr_init(r32471);
        mpfr_init(r32472);
        mpfr_init(r32473);
        mpfr_init_set_str(r32474, "4.16807317627252e-141", 10, MPFR_RNDN);
        mpfr_init(r32475);
        mpfr_init(r32476);
        mpfr_init(r32477);
        mpfr_init(r32478);
        mpfr_init(r32479);
        mpfr_init(r32480);
        mpfr_init(r32481);
        mpfr_init(r32482);
        mpfr_init(r32483);
        mpfr_init(r32484);
        mpfr_init(r32485);
        mpfr_init(r32486);
        mpfr_init(r32487);
        mpfr_init(r32488);
}

double f_dm(double d, double h, double l, double M, double D) {
        mpfr_set_d(r32441, l, MPFR_RNDN);
        ;
        mpfr_set_si(r32443, mpfr_cmp(r32441, r32442) <= 0, MPFR_RNDN);
        mpfr_set_d(r32444, d, MPFR_RNDN);
        mpfr_set_d(r32445, h, MPFR_RNDN);
        mpfr_div(r32446, r32444, r32445, MPFR_RNDN);
        mpfr_cbrt(r32447, r32446, MPFR_RNDN);
        mpfr_mul(r32448, r32447, r32447, MPFR_RNDN);
        ;
        ;
        mpfr_div(r32451, r32449, r32450, MPFR_RNDN);
        mpfr_pow(r32452, r32448, r32451, MPFR_RNDN);
        mpfr_cbrt(r32453, r32444, MPFR_RNDN);
        mpfr_div(r32454, r32449, r32445, MPFR_RNDN);
        mpfr_cbrt(r32455, r32454, MPFR_RNDN);
        mpfr_mul(r32456, r32453, r32455, MPFR_RNDN);
        mpfr_pow(r32457, r32456, r32451, MPFR_RNDN);
        mpfr_mul(r32458, r32452, r32457, MPFR_RNDN);
        mpfr_div(r32459, r32444, r32441, MPFR_RNDN);
        mpfr_pow(r32460, r32459, r32451, MPFR_RNDN);
        mpfr_mul(r32461, r32458, r32460, MPFR_RNDN);
        mpfr_set_d(r32462, M, MPFR_RNDN);
        mpfr_set_d(r32463, D, MPFR_RNDN);
        mpfr_mul(r32464, r32462, r32463, MPFR_RNDN);
        mpfr_mul(r32465, r32450, r32444, MPFR_RNDN);
        mpfr_div(r32466, r32464, r32465, MPFR_RNDN);
        mpfr_pow(r32467, r32466, r32450, MPFR_RNDN);
        mpfr_mul(r32468, r32449, r32467, MPFR_RNDN);
        mpfr_mul(r32469, r32468, r32445, MPFR_RNDN);
        mpfr_mul(r32470, r32450, r32441, MPFR_RNDN);
        mpfr_div(r32471, r32469, r32470, MPFR_RNDN);
        mpfr_sub(r32472, r32449, r32471, MPFR_RNDN);
        mpfr_mul(r32473, r32461, r32472, MPFR_RNDN);
        ;
        mpfr_set_si(r32475, mpfr_cmp(r32441, r32474) <= 0, MPFR_RNDN);
        mpfr_pow(r32476, r32446, r32451, MPFR_RNDN);
        mpfr_pow(r32477, r32444, r32451, MPFR_RNDN);
        mpfr_div(r32478, r32449, r32441, MPFR_RNDN);
        mpfr_pow(r32479, r32478, r32451, MPFR_RNDN);
        mpfr_mul(r32480, r32477, r32479, MPFR_RNDN);
        mpfr_mul(r32481, r32476, r32480, MPFR_RNDN);
        mpfr_mul(r32482, r32481, r32472, MPFR_RNDN);
        mpfr_pow(r32483, r32454, r32451, MPFR_RNDN);
        mpfr_mul(r32484, r32477, r32483, MPFR_RNDN);
        mpfr_mul(r32485, r32484, r32460, MPFR_RNDN);
        mpfr_mul(r32486, r32485, r32472, MPFR_RNDN);
        if (mpfr_get_si(r32475, MPFR_RNDN)) { mpfr_set(r32487, r32482, MPFR_RNDN); } else { mpfr_set(r32487, r32486, MPFR_RNDN); };
        if (mpfr_get_si(r32443, MPFR_RNDN)) { mpfr_set(r32488, r32473, MPFR_RNDN); } else { mpfr_set(r32488, r32487, MPFR_RNDN); };
        return mpfr_get_d(r32488, MPFR_RNDN);
}

