#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 r31384 = w0;
        float r31385 = 1;
        float r31386 = M;
        float r31387 = D;
        float r31388 = r31386 * r31387;
        float r31389 = 2;
        float r31390 = d;
        float r31391 = r31389 * r31390;
        float r31392 = r31388 / r31391;
        float r31393 = pow(r31392, r31389);
        float r31394 = h;
        float r31395 = l;
        float r31396 = r31394 / r31395;
        float r31397 = r31393 * r31396;
        float r31398 = r31385 - r31397;
        float r31399 = sqrt(r31398);
        float r31400 = r31384 * r31399;
        return r31400;
}

double f_id(double w0, double M, double D, double h, double l, double d) {
        double r31401 = w0;
        double r31402 = 1;
        double r31403 = M;
        double r31404 = D;
        double r31405 = r31403 * r31404;
        double r31406 = 2;
        double r31407 = d;
        double r31408 = r31406 * r31407;
        double r31409 = r31405 / r31408;
        double r31410 = pow(r31409, r31406);
        double r31411 = h;
        double r31412 = l;
        double r31413 = r31411 / r31412;
        double r31414 = r31410 * r31413;
        double r31415 = r31402 - r31414;
        double r31416 = sqrt(r31415);
        double r31417 = r31401 * r31416;
        return r31417;
}


double f_of(float w0, float M, float D, float h, float l, float d) {
        float r31418 = w0;
        float r31419 = 1;
        float r31420 = M;
        float r31421 = D;
        float r31422 = r31420 * r31421;
        float r31423 = 2;
        float r31424 = d;
        float r31425 = r31423 * r31424;
        float r31426 = r31422 / r31425;
        float r31427 = h;
        float r31428 = r31426 * r31427;
        float r31429 = r31426 * r31428;
        float r31430 = l;
        float r31431 = r31429 / r31430;
        float r31432 = r31419 - r31431;
        float r31433 = sqrt(r31432);
        float r31434 = r31418 * r31433;
        return r31434;
}

double f_od(double w0, double M, double D, double h, double l, double d) {
        double r31435 = w0;
        double r31436 = 1;
        double r31437 = M;
        double r31438 = D;
        double r31439 = r31437 * r31438;
        double r31440 = 2;
        double r31441 = d;
        double r31442 = r31440 * r31441;
        double r31443 = r31439 / r31442;
        double r31444 = h;
        double r31445 = r31443 * r31444;
        double r31446 = r31443 * r31445;
        double r31447 = l;
        double r31448 = r31446 / r31447;
        double r31449 = r31436 - r31448;
        double r31450 = sqrt(r31449);
        double r31451 = r31435 * r31450;
        return r31451;
}

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 r31452, r31453, r31454, r31455, r31456, r31457, r31458, r31459, r31460, r31461, r31462, r31463, r31464, r31465, r31466, r31467, r31468;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r31452);
        mpfr_init_set_str(r31453, "1", 10, MPFR_RNDN);
        mpfr_init(r31454);
        mpfr_init(r31455);
        mpfr_init(r31456);
        mpfr_init_set_str(r31457, "2", 10, MPFR_RNDN);
        mpfr_init(r31458);
        mpfr_init(r31459);
        mpfr_init(r31460);
        mpfr_init(r31461);
        mpfr_init(r31462);
        mpfr_init(r31463);
        mpfr_init(r31464);
        mpfr_init(r31465);
        mpfr_init(r31466);
        mpfr_init(r31467);
        mpfr_init(r31468);
}

double f_im(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r31452, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r31454, M, MPFR_RNDN);
        mpfr_set_d(r31455, D, MPFR_RNDN);
        mpfr_mul(r31456, r31454, r31455, MPFR_RNDN);
        ;
        mpfr_set_d(r31458, d, MPFR_RNDN);
        mpfr_mul(r31459, r31457, r31458, MPFR_RNDN);
        mpfr_div(r31460, r31456, r31459, MPFR_RNDN);
        mpfr_pow(r31461, r31460, r31457, MPFR_RNDN);
        mpfr_set_d(r31462, h, MPFR_RNDN);
        mpfr_set_d(r31463, l, MPFR_RNDN);
        mpfr_div(r31464, r31462, r31463, MPFR_RNDN);
        mpfr_mul(r31465, r31461, r31464, MPFR_RNDN);
        mpfr_sub(r31466, r31453, r31465, MPFR_RNDN);
        mpfr_sqrt(r31467, r31466, MPFR_RNDN);
        mpfr_mul(r31468, r31452, r31467, MPFR_RNDN);
        return mpfr_get_d(r31468, MPFR_RNDN);
}

static mpfr_t r31469, r31470, r31471, r31472, r31473, r31474, r31475, r31476, r31477, r31478, r31479, r31480, r31481, r31482, r31483, r31484, r31485;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31469);
        mpfr_init_set_str(r31470, "1", 10, MPFR_RNDN);
        mpfr_init(r31471);
        mpfr_init(r31472);
        mpfr_init(r31473);
        mpfr_init_set_str(r31474, "2", 10, MPFR_RNDN);
        mpfr_init(r31475);
        mpfr_init(r31476);
        mpfr_init(r31477);
        mpfr_init(r31478);
        mpfr_init(r31479);
        mpfr_init(r31480);
        mpfr_init(r31481);
        mpfr_init(r31482);
        mpfr_init(r31483);
        mpfr_init(r31484);
        mpfr_init(r31485);
}

double f_fm(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r31469, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r31471, M, MPFR_RNDN);
        mpfr_set_d(r31472, D, MPFR_RNDN);
        mpfr_mul(r31473, r31471, r31472, MPFR_RNDN);
        ;
        mpfr_set_d(r31475, d, MPFR_RNDN);
        mpfr_mul(r31476, r31474, r31475, MPFR_RNDN);
        mpfr_div(r31477, r31473, r31476, MPFR_RNDN);
        mpfr_set_d(r31478, h, MPFR_RNDN);
        mpfr_mul(r31479, r31477, r31478, MPFR_RNDN);
        mpfr_mul(r31480, r31477, r31479, MPFR_RNDN);
        mpfr_set_d(r31481, l, MPFR_RNDN);
        mpfr_div(r31482, r31480, r31481, MPFR_RNDN);
        mpfr_sub(r31483, r31470, r31482, MPFR_RNDN);
        mpfr_sqrt(r31484, r31483, MPFR_RNDN);
        mpfr_mul(r31485, r31469, r31484, MPFR_RNDN);
        return mpfr_get_d(r31485, MPFR_RNDN);
}

static mpfr_t r31486, r31487, r31488, r31489, r31490, r31491, r31492, r31493, r31494, r31495, r31496, r31497, r31498, r31499, r31500, r31501, r31502;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31486);
        mpfr_init_set_str(r31487, "1", 10, MPFR_RNDN);
        mpfr_init(r31488);
        mpfr_init(r31489);
        mpfr_init(r31490);
        mpfr_init_set_str(r31491, "2", 10, MPFR_RNDN);
        mpfr_init(r31492);
        mpfr_init(r31493);
        mpfr_init(r31494);
        mpfr_init(r31495);
        mpfr_init(r31496);
        mpfr_init(r31497);
        mpfr_init(r31498);
        mpfr_init(r31499);
        mpfr_init(r31500);
        mpfr_init(r31501);
        mpfr_init(r31502);
}

double f_dm(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r31486, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r31488, M, MPFR_RNDN);
        mpfr_set_d(r31489, D, MPFR_RNDN);
        mpfr_mul(r31490, r31488, r31489, MPFR_RNDN);
        ;
        mpfr_set_d(r31492, d, MPFR_RNDN);
        mpfr_mul(r31493, r31491, r31492, MPFR_RNDN);
        mpfr_div(r31494, r31490, r31493, MPFR_RNDN);
        mpfr_set_d(r31495, h, MPFR_RNDN);
        mpfr_mul(r31496, r31494, r31495, MPFR_RNDN);
        mpfr_mul(r31497, r31494, r31496, MPFR_RNDN);
        mpfr_set_d(r31498, l, MPFR_RNDN);
        mpfr_div(r31499, r31497, r31498, MPFR_RNDN);
        mpfr_sub(r31500, r31487, r31499, MPFR_RNDN);
        mpfr_sqrt(r31501, r31500, MPFR_RNDN);
        mpfr_mul(r31502, r31486, r31501, MPFR_RNDN);
        return mpfr_get_d(r31502, MPFR_RNDN);
}

