#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 r10014 = c0;
        float r10015 = 2.0f;
        float r10016 = w;
        float r10017 = r10015 * r10016;
        float r10018 = r10014 / r10017;
        float r10019 = d;
        float r10020 = r10019 * r10019;
        float r10021 = r10014 * r10020;
        float r10022 = h;
        float r10023 = r10016 * r10022;
        float r10024 = D;
        float r10025 = r10024 * r10024;
        float r10026 = r10023 * r10025;
        float r10027 = r10021 / r10026;
        float r10028 = r10027 * r10027;
        float r10029 = M;
        float r10030 = r10029 * r10029;
        float r10031 = r10028 - r10030;
        float r10032 = sqrt(r10031);
        float r10033 = r10027 + r10032;
        float r10034 = r10018 * r10033;
        return r10034;
}

double f_id(double c0, double w, double h, double D, double d, double M) {
        double r10035 = c0;
        double r10036 = 2.0;
        double r10037 = w;
        double r10038 = r10036 * r10037;
        double r10039 = r10035 / r10038;
        double r10040 = d;
        double r10041 = r10040 * r10040;
        double r10042 = r10035 * r10041;
        double r10043 = h;
        double r10044 = r10037 * r10043;
        double r10045 = D;
        double r10046 = r10045 * r10045;
        double r10047 = r10044 * r10046;
        double r10048 = r10042 / r10047;
        double r10049 = r10048 * r10048;
        double r10050 = M;
        double r10051 = r10050 * r10050;
        double r10052 = r10049 - r10051;
        double r10053 = sqrt(r10052);
        double r10054 = r10048 + r10053;
        double r10055 = r10039 * r10054;
        return r10055;
}


double f_of(float c0, float w, float h, float D, float d, float M) {
        float r10056 = d;
        float r10057 = D;
        float r10058 = r10056 / r10057;
        float r10059 = r10058 * r10058;
        float r10060 = c0;
        float r10061 = w;
        float r10062 = r10060 / r10061;
        float r10063 = h;
        float r10064 = r10062 / r10063;
        float r10065 = r10059 * r10064;
        float r10066 = M;
        float r10067 = r10065 - r10066;
        float r10068 = r10065 + r10066;
        float r10069 = r10067 * r10068;
        float r10070 = sqrt(r10069);
        float r10071 = cbrt(r10065);
        float r10072 = r10071 * r10071;
        float r10073 = r10071 * r10072;
        float r10074 = r10070 + r10073;
        float r10075 = 2.0f;
        float r10076 = r10060 / r10075;
        float r10077 = r10076 / r10061;
        float r10078 = r10074 * r10077;
        float r10079 = 8.203893795628373e+302f;
        bool r10080 = r10078 <= r10079;
        float r10081 = r10070 + r10065;
        float r10082 = cbrt(r10081);
        float r10083 = r10082 * r10082;
        float r10084 = r10083 * r10082;
        float r10085 = r10084 * r10077;
        float r10086 = pow(r10056, r10075);
        float r10087 = r10060 * r10086;
        float r10088 = pow(r10057, r10075);
        float r10089 = r10061 * r10063;
        float r10090 = r10088 * r10089;
        float r10091 = r10087 / r10090;
        float r10092 = r10091 * r10075;
        float r10093 = r10077 * r10092;
        float r10094 = r10080 ? r10085 : r10093;
        return r10094;
}

double f_od(double c0, double w, double h, double D, double d, double M) {
        double r10095 = d;
        double r10096 = D;
        double r10097 = r10095 / r10096;
        double r10098 = r10097 * r10097;
        double r10099 = c0;
        double r10100 = w;
        double r10101 = r10099 / r10100;
        double r10102 = h;
        double r10103 = r10101 / r10102;
        double r10104 = r10098 * r10103;
        double r10105 = M;
        double r10106 = r10104 - r10105;
        double r10107 = r10104 + r10105;
        double r10108 = r10106 * r10107;
        double r10109 = sqrt(r10108);
        double r10110 = cbrt(r10104);
        double r10111 = r10110 * r10110;
        double r10112 = r10110 * r10111;
        double r10113 = r10109 + r10112;
        double r10114 = 2.0;
        double r10115 = r10099 / r10114;
        double r10116 = r10115 / r10100;
        double r10117 = r10113 * r10116;
        double r10118 = 8.203893795628373e+302;
        bool r10119 = r10117 <= r10118;
        double r10120 = r10109 + r10104;
        double r10121 = cbrt(r10120);
        double r10122 = r10121 * r10121;
        double r10123 = r10122 * r10121;
        double r10124 = r10123 * r10116;
        double r10125 = pow(r10095, r10114);
        double r10126 = r10099 * r10125;
        double r10127 = pow(r10096, r10114);
        double r10128 = r10100 * r10102;
        double r10129 = r10127 * r10128;
        double r10130 = r10126 / r10129;
        double r10131 = r10130 * r10114;
        double r10132 = r10116 * r10131;
        double r10133 = r10119 ? r10124 : r10132;
        return r10133;
}

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 r10134, r10135, r10136, r10137, r10138, r10139, r10140, r10141, r10142, r10143, r10144, r10145, r10146, r10147, r10148, r10149, r10150, r10151, r10152, r10153, r10154;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(6992);
        mpfr_init(r10134);
        mpfr_init_set_str(r10135, "2", 10, MPFR_RNDN);
        mpfr_init(r10136);
        mpfr_init(r10137);
        mpfr_init(r10138);
        mpfr_init(r10139);
        mpfr_init(r10140);
        mpfr_init(r10141);
        mpfr_init(r10142);
        mpfr_init(r10143);
        mpfr_init(r10144);
        mpfr_init(r10145);
        mpfr_init(r10146);
        mpfr_init(r10147);
        mpfr_init(r10148);
        mpfr_init(r10149);
        mpfr_init(r10150);
        mpfr_init(r10151);
        mpfr_init(r10152);
        mpfr_init(r10153);
        mpfr_init(r10154);
}

double f_im(double c0, double w, double h, double D, double d, double M) {
        mpfr_set_d(r10134, c0, MPFR_RNDN);
        ;
        mpfr_set_d(r10136, w, MPFR_RNDN);
        mpfr_mul(r10137, r10135, r10136, MPFR_RNDN);
        mpfr_div(r10138, r10134, r10137, MPFR_RNDN);
        mpfr_set_d(r10139, d, MPFR_RNDN);
        mpfr_mul(r10140, r10139, r10139, MPFR_RNDN);
        mpfr_mul(r10141, r10134, r10140, MPFR_RNDN);
        mpfr_set_d(r10142, h, MPFR_RNDN);
        mpfr_mul(r10143, r10136, r10142, MPFR_RNDN);
        mpfr_set_d(r10144, D, MPFR_RNDN);
        mpfr_mul(r10145, r10144, r10144, MPFR_RNDN);
        mpfr_mul(r10146, r10143, r10145, MPFR_RNDN);
        mpfr_div(r10147, r10141, r10146, MPFR_RNDN);
        mpfr_mul(r10148, r10147, r10147, MPFR_RNDN);
        mpfr_set_d(r10149, M, MPFR_RNDN);
        mpfr_mul(r10150, r10149, r10149, MPFR_RNDN);
        mpfr_sub(r10151, r10148, r10150, MPFR_RNDN);
        mpfr_sqrt(r10152, r10151, MPFR_RNDN);
        mpfr_add(r10153, r10147, r10152, MPFR_RNDN);
        mpfr_mul(r10154, r10138, r10153, MPFR_RNDN);
        return mpfr_get_d(r10154, MPFR_RNDN);
}

static mpfr_t r10155, r10156, r10157, r10158, r10159, r10160, r10161, r10162, r10163, r10164, r10165, r10166, r10167, r10168, r10169, r10170, r10171, r10172, r10173, r10174, r10175, r10176, r10177, r10178, r10179, r10180, r10181, r10182, r10183, r10184, r10185, r10186, r10187, r10188, r10189, r10190, r10191, r10192, r10193;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(6992);
        mpfr_init(r10155);
        mpfr_init(r10156);
        mpfr_init(r10157);
        mpfr_init(r10158);
        mpfr_init(r10159);
        mpfr_init(r10160);
        mpfr_init(r10161);
        mpfr_init(r10162);
        mpfr_init(r10163);
        mpfr_init(r10164);
        mpfr_init(r10165);
        mpfr_init(r10166);
        mpfr_init(r10167);
        mpfr_init(r10168);
        mpfr_init(r10169);
        mpfr_init(r10170);
        mpfr_init(r10171);
        mpfr_init(r10172);
        mpfr_init(r10173);
        mpfr_init_set_str(r10174, "2", 10, MPFR_RNDN);
        mpfr_init(r10175);
        mpfr_init(r10176);
        mpfr_init(r10177);
        mpfr_init_set_str(r10178, "8.203893795628373e+302", 10, MPFR_RNDN);
        mpfr_init(r10179);
        mpfr_init(r10180);
        mpfr_init(r10181);
        mpfr_init(r10182);
        mpfr_init(r10183);
        mpfr_init(r10184);
        mpfr_init(r10185);
        mpfr_init(r10186);
        mpfr_init(r10187);
        mpfr_init(r10188);
        mpfr_init(r10189);
        mpfr_init(r10190);
        mpfr_init(r10191);
        mpfr_init(r10192);
        mpfr_init(r10193);
}

double f_fm(double c0, double w, double h, double D, double d, double M) {
        mpfr_set_d(r10155, d, MPFR_RNDN);
        mpfr_set_d(r10156, D, MPFR_RNDN);
        mpfr_div(r10157, r10155, r10156, MPFR_RNDN);
        mpfr_mul(r10158, r10157, r10157, MPFR_RNDN);
        mpfr_set_d(r10159, c0, MPFR_RNDN);
        mpfr_set_d(r10160, w, MPFR_RNDN);
        mpfr_div(r10161, r10159, r10160, MPFR_RNDN);
        mpfr_set_d(r10162, h, MPFR_RNDN);
        mpfr_div(r10163, r10161, r10162, MPFR_RNDN);
        mpfr_mul(r10164, r10158, r10163, MPFR_RNDN);
        mpfr_set_d(r10165, M, MPFR_RNDN);
        mpfr_sub(r10166, r10164, r10165, MPFR_RNDN);
        mpfr_add(r10167, r10164, r10165, MPFR_RNDN);
        mpfr_mul(r10168, r10166, r10167, MPFR_RNDN);
        mpfr_sqrt(r10169, r10168, MPFR_RNDN);
        mpfr_cbrt(r10170, r10164, MPFR_RNDN);
        mpfr_mul(r10171, r10170, r10170, MPFR_RNDN);
        mpfr_mul(r10172, r10170, r10171, MPFR_RNDN);
        mpfr_add(r10173, r10169, r10172, MPFR_RNDN);
        ;
        mpfr_div(r10175, r10159, r10174, MPFR_RNDN);
        mpfr_div(r10176, r10175, r10160, MPFR_RNDN);
        mpfr_mul(r10177, r10173, r10176, MPFR_RNDN);
        ;
        mpfr_set_si(r10179, mpfr_cmp(r10177, r10178) <= 0, MPFR_RNDN);
        mpfr_add(r10180, r10169, r10164, MPFR_RNDN);
        mpfr_cbrt(r10181, r10180, MPFR_RNDN);
        mpfr_mul(r10182, r10181, r10181, MPFR_RNDN);
        mpfr_mul(r10183, r10182, r10181, MPFR_RNDN);
        mpfr_mul(r10184, r10183, r10176, MPFR_RNDN);
        mpfr_pow(r10185, r10155, r10174, MPFR_RNDN);
        mpfr_mul(r10186, r10159, r10185, MPFR_RNDN);
        mpfr_pow(r10187, r10156, r10174, MPFR_RNDN);
        mpfr_mul(r10188, r10160, r10162, MPFR_RNDN);
        mpfr_mul(r10189, r10187, r10188, MPFR_RNDN);
        mpfr_div(r10190, r10186, r10189, MPFR_RNDN);
        mpfr_mul(r10191, r10190, r10174, MPFR_RNDN);
        mpfr_mul(r10192, r10176, r10191, MPFR_RNDN);
        if (mpfr_get_si(r10179, MPFR_RNDN)) { mpfr_set(r10193, r10184, MPFR_RNDN); } else { mpfr_set(r10193, r10192, MPFR_RNDN); };
        return mpfr_get_d(r10193, MPFR_RNDN);
}

static mpfr_t r10194, r10195, r10196, r10197, r10198, r10199, r10200, r10201, r10202, r10203, r10204, r10205, r10206, r10207, r10208, r10209, r10210, r10211, r10212, r10213, r10214, r10215, r10216, r10217, r10218, r10219, r10220, r10221, r10222, r10223, r10224, r10225, r10226, r10227, r10228, r10229, r10230, r10231, r10232;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(6992);
        mpfr_init(r10194);
        mpfr_init(r10195);
        mpfr_init(r10196);
        mpfr_init(r10197);
        mpfr_init(r10198);
        mpfr_init(r10199);
        mpfr_init(r10200);
        mpfr_init(r10201);
        mpfr_init(r10202);
        mpfr_init(r10203);
        mpfr_init(r10204);
        mpfr_init(r10205);
        mpfr_init(r10206);
        mpfr_init(r10207);
        mpfr_init(r10208);
        mpfr_init(r10209);
        mpfr_init(r10210);
        mpfr_init(r10211);
        mpfr_init(r10212);
        mpfr_init_set_str(r10213, "2", 10, MPFR_RNDN);
        mpfr_init(r10214);
        mpfr_init(r10215);
        mpfr_init(r10216);
        mpfr_init_set_str(r10217, "8.203893795628373e+302", 10, MPFR_RNDN);
        mpfr_init(r10218);
        mpfr_init(r10219);
        mpfr_init(r10220);
        mpfr_init(r10221);
        mpfr_init(r10222);
        mpfr_init(r10223);
        mpfr_init(r10224);
        mpfr_init(r10225);
        mpfr_init(r10226);
        mpfr_init(r10227);
        mpfr_init(r10228);
        mpfr_init(r10229);
        mpfr_init(r10230);
        mpfr_init(r10231);
        mpfr_init(r10232);
}

double f_dm(double c0, double w, double h, double D, double d, double M) {
        mpfr_set_d(r10194, d, MPFR_RNDN);
        mpfr_set_d(r10195, D, MPFR_RNDN);
        mpfr_div(r10196, r10194, r10195, MPFR_RNDN);
        mpfr_mul(r10197, r10196, r10196, MPFR_RNDN);
        mpfr_set_d(r10198, c0, MPFR_RNDN);
        mpfr_set_d(r10199, w, MPFR_RNDN);
        mpfr_div(r10200, r10198, r10199, MPFR_RNDN);
        mpfr_set_d(r10201, h, MPFR_RNDN);
        mpfr_div(r10202, r10200, r10201, MPFR_RNDN);
        mpfr_mul(r10203, r10197, r10202, MPFR_RNDN);
        mpfr_set_d(r10204, M, MPFR_RNDN);
        mpfr_sub(r10205, r10203, r10204, MPFR_RNDN);
        mpfr_add(r10206, r10203, r10204, MPFR_RNDN);
        mpfr_mul(r10207, r10205, r10206, MPFR_RNDN);
        mpfr_sqrt(r10208, r10207, MPFR_RNDN);
        mpfr_cbrt(r10209, r10203, MPFR_RNDN);
        mpfr_mul(r10210, r10209, r10209, MPFR_RNDN);
        mpfr_mul(r10211, r10209, r10210, MPFR_RNDN);
        mpfr_add(r10212, r10208, r10211, MPFR_RNDN);
        ;
        mpfr_div(r10214, r10198, r10213, MPFR_RNDN);
        mpfr_div(r10215, r10214, r10199, MPFR_RNDN);
        mpfr_mul(r10216, r10212, r10215, MPFR_RNDN);
        ;
        mpfr_set_si(r10218, mpfr_cmp(r10216, r10217) <= 0, MPFR_RNDN);
        mpfr_add(r10219, r10208, r10203, MPFR_RNDN);
        mpfr_cbrt(r10220, r10219, MPFR_RNDN);
        mpfr_mul(r10221, r10220, r10220, MPFR_RNDN);
        mpfr_mul(r10222, r10221, r10220, MPFR_RNDN);
        mpfr_mul(r10223, r10222, r10215, MPFR_RNDN);
        mpfr_pow(r10224, r10194, r10213, MPFR_RNDN);
        mpfr_mul(r10225, r10198, r10224, MPFR_RNDN);
        mpfr_pow(r10226, r10195, r10213, MPFR_RNDN);
        mpfr_mul(r10227, r10199, r10201, MPFR_RNDN);
        mpfr_mul(r10228, r10226, r10227, MPFR_RNDN);
        mpfr_div(r10229, r10225, r10228, MPFR_RNDN);
        mpfr_mul(r10230, r10229, r10213, MPFR_RNDN);
        mpfr_mul(r10231, r10215, r10230, MPFR_RNDN);
        if (mpfr_get_si(r10218, MPFR_RNDN)) { mpfr_set(r10232, r10223, MPFR_RNDN); } else { mpfr_set(r10232, r10231, MPFR_RNDN); };
        return mpfr_get_d(r10232, MPFR_RNDN);
}

