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

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

double f_if(float w0, float M, float D, float h, float l, float d) {
        float r31112 = w0;
        float r31113 = 1;
        float r31114 = M;
        float r31115 = D;
        float r31116 = r31114 * r31115;
        float r31117 = 2;
        float r31118 = d;
        float r31119 = r31117 * r31118;
        float r31120 = r31116 / r31119;
        float r31121 = pow(r31120, r31117);
        float r31122 = h;
        float r31123 = l;
        float r31124 = r31122 / r31123;
        float r31125 = r31121 * r31124;
        float r31126 = r31113 - r31125;
        float r31127 = sqrt(r31126);
        float r31128 = r31112 * r31127;
        return r31128;
}

double f_id(double w0, double M, double D, double h, double l, double d) {
        double r31129 = w0;
        double r31130 = 1;
        double r31131 = M;
        double r31132 = D;
        double r31133 = r31131 * r31132;
        double r31134 = 2;
        double r31135 = d;
        double r31136 = r31134 * r31135;
        double r31137 = r31133 / r31136;
        double r31138 = pow(r31137, r31134);
        double r31139 = h;
        double r31140 = l;
        double r31141 = r31139 / r31140;
        double r31142 = r31138 * r31141;
        double r31143 = r31130 - r31142;
        double r31144 = sqrt(r31143);
        double r31145 = r31129 * r31144;
        return r31145;
}


double f_of(float w0, float M, float D, float h, float l, float d) {
        float r31146 = w0;
        float r31147 = 1;
        float r31148 = M;
        float r31149 = D;
        float r31150 = r31148 * r31149;
        float r31151 = 2;
        float r31152 = d;
        float r31153 = r31151 * r31152;
        float r31154 = r31150 / r31153;
        float r31155 = h;
        float r31156 = r31154 * r31155;
        float r31157 = r31154 * r31156;
        float r31158 = l;
        float r31159 = r31157 / r31158;
        float r31160 = r31147 - r31159;
        float r31161 = sqrt(r31160);
        float r31162 = r31146 * r31161;
        return r31162;
}

double f_od(double w0, double M, double D, double h, double l, double d) {
        double r31163 = w0;
        double r31164 = 1;
        double r31165 = M;
        double r31166 = D;
        double r31167 = r31165 * r31166;
        double r31168 = 2;
        double r31169 = d;
        double r31170 = r31168 * r31169;
        double r31171 = r31167 / r31170;
        double r31172 = h;
        double r31173 = r31171 * r31172;
        double r31174 = r31171 * r31173;
        double r31175 = l;
        double r31176 = r31174 / r31175;
        double r31177 = r31164 - r31176;
        double r31178 = sqrt(r31177);
        double r31179 = r31163 * r31178;
        return r31179;
}

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 r31180, r31181, r31182, r31183, r31184, r31185, r31186, r31187, r31188, r31189, r31190, r31191, r31192, r31193, r31194, r31195, r31196;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r31180);
        mpfr_init_set_str(r31181, "1", 10, MPFR_RNDN);
        mpfr_init(r31182);
        mpfr_init(r31183);
        mpfr_init(r31184);
        mpfr_init_set_str(r31185, "2", 10, MPFR_RNDN);
        mpfr_init(r31186);
        mpfr_init(r31187);
        mpfr_init(r31188);
        mpfr_init(r31189);
        mpfr_init(r31190);
        mpfr_init(r31191);
        mpfr_init(r31192);
        mpfr_init(r31193);
        mpfr_init(r31194);
        mpfr_init(r31195);
        mpfr_init(r31196);
}

double f_im(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r31180, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r31182, M, MPFR_RNDN);
        mpfr_set_d(r31183, D, MPFR_RNDN);
        mpfr_mul(r31184, r31182, r31183, MPFR_RNDN);
        ;
        mpfr_set_d(r31186, d, MPFR_RNDN);
        mpfr_mul(r31187, r31185, r31186, MPFR_RNDN);
        mpfr_div(r31188, r31184, r31187, MPFR_RNDN);
        mpfr_pow(r31189, r31188, r31185, MPFR_RNDN);
        mpfr_set_d(r31190, h, MPFR_RNDN);
        mpfr_set_d(r31191, l, MPFR_RNDN);
        mpfr_div(r31192, r31190, r31191, MPFR_RNDN);
        mpfr_mul(r31193, r31189, r31192, MPFR_RNDN);
        mpfr_sub(r31194, r31181, r31193, MPFR_RNDN);
        mpfr_sqrt(r31195, r31194, MPFR_RNDN);
        mpfr_mul(r31196, r31180, r31195, MPFR_RNDN);
        return mpfr_get_d(r31196, MPFR_RNDN);
}

static mpfr_t r31197, r31198, r31199, r31200, r31201, r31202, r31203, r31204, r31205, r31206, r31207, r31208, r31209, r31210, r31211, r31212, r31213;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31197);
        mpfr_init_set_str(r31198, "1", 10, MPFR_RNDN);
        mpfr_init(r31199);
        mpfr_init(r31200);
        mpfr_init(r31201);
        mpfr_init_set_str(r31202, "2", 10, MPFR_RNDN);
        mpfr_init(r31203);
        mpfr_init(r31204);
        mpfr_init(r31205);
        mpfr_init(r31206);
        mpfr_init(r31207);
        mpfr_init(r31208);
        mpfr_init(r31209);
        mpfr_init(r31210);
        mpfr_init(r31211);
        mpfr_init(r31212);
        mpfr_init(r31213);
}

double f_fm(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r31197, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r31199, M, MPFR_RNDN);
        mpfr_set_d(r31200, D, MPFR_RNDN);
        mpfr_mul(r31201, r31199, r31200, MPFR_RNDN);
        ;
        mpfr_set_d(r31203, d, MPFR_RNDN);
        mpfr_mul(r31204, r31202, r31203, MPFR_RNDN);
        mpfr_div(r31205, r31201, r31204, MPFR_RNDN);
        mpfr_set_d(r31206, h, MPFR_RNDN);
        mpfr_mul(r31207, r31205, r31206, MPFR_RNDN);
        mpfr_mul(r31208, r31205, r31207, MPFR_RNDN);
        mpfr_set_d(r31209, l, MPFR_RNDN);
        mpfr_div(r31210, r31208, r31209, MPFR_RNDN);
        mpfr_sub(r31211, r31198, r31210, MPFR_RNDN);
        mpfr_sqrt(r31212, r31211, MPFR_RNDN);
        mpfr_mul(r31213, r31197, r31212, MPFR_RNDN);
        return mpfr_get_d(r31213, MPFR_RNDN);
}

static mpfr_t r31214, r31215, r31216, r31217, r31218, r31219, r31220, r31221, r31222, r31223, r31224, r31225, r31226, r31227, r31228, r31229, r31230;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31214);
        mpfr_init_set_str(r31215, "1", 10, MPFR_RNDN);
        mpfr_init(r31216);
        mpfr_init(r31217);
        mpfr_init(r31218);
        mpfr_init_set_str(r31219, "2", 10, MPFR_RNDN);
        mpfr_init(r31220);
        mpfr_init(r31221);
        mpfr_init(r31222);
        mpfr_init(r31223);
        mpfr_init(r31224);
        mpfr_init(r31225);
        mpfr_init(r31226);
        mpfr_init(r31227);
        mpfr_init(r31228);
        mpfr_init(r31229);
        mpfr_init(r31230);
}

double f_dm(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r31214, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r31216, M, MPFR_RNDN);
        mpfr_set_d(r31217, D, MPFR_RNDN);
        mpfr_mul(r31218, r31216, r31217, MPFR_RNDN);
        ;
        mpfr_set_d(r31220, d, MPFR_RNDN);
        mpfr_mul(r31221, r31219, r31220, MPFR_RNDN);
        mpfr_div(r31222, r31218, r31221, MPFR_RNDN);
        mpfr_set_d(r31223, h, MPFR_RNDN);
        mpfr_mul(r31224, r31222, r31223, MPFR_RNDN);
        mpfr_mul(r31225, r31222, r31224, MPFR_RNDN);
        mpfr_set_d(r31226, l, MPFR_RNDN);
        mpfr_div(r31227, r31225, r31226, MPFR_RNDN);
        mpfr_sub(r31228, r31215, r31227, MPFR_RNDN);
        mpfr_sqrt(r31229, r31228, MPFR_RNDN);
        mpfr_mul(r31230, r31214, r31229, MPFR_RNDN);
        return mpfr_get_d(r31230, MPFR_RNDN);
}

