#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 r31304 = w0;
        float r31305 = 1;
        float r31306 = M;
        float r31307 = D;
        float r31308 = r31306 * r31307;
        float r31309 = 2;
        float r31310 = d;
        float r31311 = r31309 * r31310;
        float r31312 = r31308 / r31311;
        float r31313 = pow(r31312, r31309);
        float r31314 = h;
        float r31315 = l;
        float r31316 = r31314 / r31315;
        float r31317 = r31313 * r31316;
        float r31318 = r31305 - r31317;
        float r31319 = sqrt(r31318);
        float r31320 = r31304 * r31319;
        return r31320;
}

double f_id(double w0, double M, double D, double h, double l, double d) {
        double r31321 = w0;
        double r31322 = 1;
        double r31323 = M;
        double r31324 = D;
        double r31325 = r31323 * r31324;
        double r31326 = 2;
        double r31327 = d;
        double r31328 = r31326 * r31327;
        double r31329 = r31325 / r31328;
        double r31330 = pow(r31329, r31326);
        double r31331 = h;
        double r31332 = l;
        double r31333 = r31331 / r31332;
        double r31334 = r31330 * r31333;
        double r31335 = r31322 - r31334;
        double r31336 = sqrt(r31335);
        double r31337 = r31321 * r31336;
        return r31337;
}


double f_of(float w0, float M, float D, float h, float l, float d) {
        float r31338 = w0;
        float r31339 = 1;
        float r31340 = M;
        float r31341 = D;
        float r31342 = r31340 * r31341;
        float r31343 = 2;
        float r31344 = d;
        float r31345 = r31343 * r31344;
        float r31346 = r31342 / r31345;
        float r31347 = h;
        float r31348 = r31346 * r31347;
        float r31349 = r31346 * r31348;
        float r31350 = l;
        float r31351 = r31349 / r31350;
        float r31352 = r31339 - r31351;
        float r31353 = sqrt(r31352);
        float r31354 = r31338 * r31353;
        return r31354;
}

double f_od(double w0, double M, double D, double h, double l, double d) {
        double r31355 = w0;
        double r31356 = 1;
        double r31357 = M;
        double r31358 = D;
        double r31359 = r31357 * r31358;
        double r31360 = 2;
        double r31361 = d;
        double r31362 = r31360 * r31361;
        double r31363 = r31359 / r31362;
        double r31364 = h;
        double r31365 = r31363 * r31364;
        double r31366 = r31363 * r31365;
        double r31367 = l;
        double r31368 = r31366 / r31367;
        double r31369 = r31356 - r31368;
        double r31370 = sqrt(r31369);
        double r31371 = r31355 * r31370;
        return r31371;
}

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 r31372, r31373, r31374, r31375, r31376, r31377, r31378, r31379, r31380, r31381, r31382, r31383, r31384, r31385, r31386, r31387, r31388;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r31372);
        mpfr_init_set_str(r31373, "1", 10, MPFR_RNDN);
        mpfr_init(r31374);
        mpfr_init(r31375);
        mpfr_init(r31376);
        mpfr_init_set_str(r31377, "2", 10, MPFR_RNDN);
        mpfr_init(r31378);
        mpfr_init(r31379);
        mpfr_init(r31380);
        mpfr_init(r31381);
        mpfr_init(r31382);
        mpfr_init(r31383);
        mpfr_init(r31384);
        mpfr_init(r31385);
        mpfr_init(r31386);
        mpfr_init(r31387);
        mpfr_init(r31388);
}

double f_im(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r31372, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r31374, M, MPFR_RNDN);
        mpfr_set_d(r31375, D, MPFR_RNDN);
        mpfr_mul(r31376, r31374, r31375, MPFR_RNDN);
        ;
        mpfr_set_d(r31378, d, MPFR_RNDN);
        mpfr_mul(r31379, r31377, r31378, MPFR_RNDN);
        mpfr_div(r31380, r31376, r31379, MPFR_RNDN);
        mpfr_pow(r31381, r31380, r31377, MPFR_RNDN);
        mpfr_set_d(r31382, h, MPFR_RNDN);
        mpfr_set_d(r31383, l, MPFR_RNDN);
        mpfr_div(r31384, r31382, r31383, MPFR_RNDN);
        mpfr_mul(r31385, r31381, r31384, MPFR_RNDN);
        mpfr_sub(r31386, r31373, r31385, MPFR_RNDN);
        mpfr_sqrt(r31387, r31386, MPFR_RNDN);
        mpfr_mul(r31388, r31372, r31387, MPFR_RNDN);
        return mpfr_get_d(r31388, MPFR_RNDN);
}

static mpfr_t r31389, r31390, r31391, r31392, r31393, r31394, r31395, r31396, r31397, r31398, r31399, r31400, r31401, r31402, r31403, r31404, r31405;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31389);
        mpfr_init_set_str(r31390, "1", 10, MPFR_RNDN);
        mpfr_init(r31391);
        mpfr_init(r31392);
        mpfr_init(r31393);
        mpfr_init_set_str(r31394, "2", 10, MPFR_RNDN);
        mpfr_init(r31395);
        mpfr_init(r31396);
        mpfr_init(r31397);
        mpfr_init(r31398);
        mpfr_init(r31399);
        mpfr_init(r31400);
        mpfr_init(r31401);
        mpfr_init(r31402);
        mpfr_init(r31403);
        mpfr_init(r31404);
        mpfr_init(r31405);
}

double f_fm(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r31389, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r31391, M, MPFR_RNDN);
        mpfr_set_d(r31392, D, MPFR_RNDN);
        mpfr_mul(r31393, r31391, r31392, MPFR_RNDN);
        ;
        mpfr_set_d(r31395, d, MPFR_RNDN);
        mpfr_mul(r31396, r31394, r31395, MPFR_RNDN);
        mpfr_div(r31397, r31393, r31396, MPFR_RNDN);
        mpfr_set_d(r31398, h, MPFR_RNDN);
        mpfr_mul(r31399, r31397, r31398, MPFR_RNDN);
        mpfr_mul(r31400, r31397, r31399, MPFR_RNDN);
        mpfr_set_d(r31401, l, MPFR_RNDN);
        mpfr_div(r31402, r31400, r31401, MPFR_RNDN);
        mpfr_sub(r31403, r31390, r31402, MPFR_RNDN);
        mpfr_sqrt(r31404, r31403, MPFR_RNDN);
        mpfr_mul(r31405, r31389, r31404, MPFR_RNDN);
        return mpfr_get_d(r31405, MPFR_RNDN);
}

static mpfr_t r31406, r31407, r31408, r31409, r31410, r31411, r31412, r31413, r31414, r31415, r31416, r31417, r31418, r31419, r31420, r31421, r31422;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31406);
        mpfr_init_set_str(r31407, "1", 10, MPFR_RNDN);
        mpfr_init(r31408);
        mpfr_init(r31409);
        mpfr_init(r31410);
        mpfr_init_set_str(r31411, "2", 10, MPFR_RNDN);
        mpfr_init(r31412);
        mpfr_init(r31413);
        mpfr_init(r31414);
        mpfr_init(r31415);
        mpfr_init(r31416);
        mpfr_init(r31417);
        mpfr_init(r31418);
        mpfr_init(r31419);
        mpfr_init(r31420);
        mpfr_init(r31421);
        mpfr_init(r31422);
}

double f_dm(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r31406, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r31408, M, MPFR_RNDN);
        mpfr_set_d(r31409, D, MPFR_RNDN);
        mpfr_mul(r31410, r31408, r31409, MPFR_RNDN);
        ;
        mpfr_set_d(r31412, d, MPFR_RNDN);
        mpfr_mul(r31413, r31411, r31412, MPFR_RNDN);
        mpfr_div(r31414, r31410, r31413, MPFR_RNDN);
        mpfr_set_d(r31415, h, MPFR_RNDN);
        mpfr_mul(r31416, r31414, r31415, MPFR_RNDN);
        mpfr_mul(r31417, r31414, r31416, MPFR_RNDN);
        mpfr_set_d(r31418, l, MPFR_RNDN);
        mpfr_div(r31419, r31417, r31418, MPFR_RNDN);
        mpfr_sub(r31420, r31407, r31419, MPFR_RNDN);
        mpfr_sqrt(r31421, r31420, MPFR_RNDN);
        mpfr_mul(r31422, r31406, r31421, MPFR_RNDN);
        return mpfr_get_d(r31422, MPFR_RNDN);
}

