#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 r31508 = w0;
        float r31509 = 1;
        float r31510 = M;
        float r31511 = D;
        float r31512 = r31510 * r31511;
        float r31513 = 2;
        float r31514 = d;
        float r31515 = r31513 * r31514;
        float r31516 = r31512 / r31515;
        float r31517 = pow(r31516, r31513);
        float r31518 = h;
        float r31519 = l;
        float r31520 = r31518 / r31519;
        float r31521 = r31517 * r31520;
        float r31522 = r31509 - r31521;
        float r31523 = sqrt(r31522);
        float r31524 = r31508 * r31523;
        return r31524;
}

double f_id(double w0, double M, double D, double h, double l, double d) {
        double r31525 = w0;
        double r31526 = 1;
        double r31527 = M;
        double r31528 = D;
        double r31529 = r31527 * r31528;
        double r31530 = 2;
        double r31531 = d;
        double r31532 = r31530 * r31531;
        double r31533 = r31529 / r31532;
        double r31534 = pow(r31533, r31530);
        double r31535 = h;
        double r31536 = l;
        double r31537 = r31535 / r31536;
        double r31538 = r31534 * r31537;
        double r31539 = r31526 - r31538;
        double r31540 = sqrt(r31539);
        double r31541 = r31525 * r31540;
        return r31541;
}


double f_of(float w0, float M, float D, float h, float l, float d) {
        float r31542 = w0;
        float r31543 = 1;
        float r31544 = M;
        float r31545 = D;
        float r31546 = r31544 * r31545;
        float r31547 = 2;
        float r31548 = d;
        float r31549 = r31547 * r31548;
        float r31550 = r31546 / r31549;
        float r31551 = h;
        float r31552 = r31550 * r31551;
        float r31553 = r31550 * r31552;
        float r31554 = l;
        float r31555 = r31553 / r31554;
        float r31556 = r31543 - r31555;
        float r31557 = sqrt(r31556);
        float r31558 = r31542 * r31557;
        return r31558;
}

double f_od(double w0, double M, double D, double h, double l, double d) {
        double r31559 = w0;
        double r31560 = 1;
        double r31561 = M;
        double r31562 = D;
        double r31563 = r31561 * r31562;
        double r31564 = 2;
        double r31565 = d;
        double r31566 = r31564 * r31565;
        double r31567 = r31563 / r31566;
        double r31568 = h;
        double r31569 = r31567 * r31568;
        double r31570 = r31567 * r31569;
        double r31571 = l;
        double r31572 = r31570 / r31571;
        double r31573 = r31560 - r31572;
        double r31574 = sqrt(r31573);
        double r31575 = r31559 * r31574;
        return r31575;
}

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 r31576, r31577, r31578, r31579, r31580, r31581, r31582, r31583, r31584, r31585, r31586, r31587, r31588, r31589, r31590, r31591, r31592;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r31576);
        mpfr_init_set_str(r31577, "1", 10, MPFR_RNDN);
        mpfr_init(r31578);
        mpfr_init(r31579);
        mpfr_init(r31580);
        mpfr_init_set_str(r31581, "2", 10, MPFR_RNDN);
        mpfr_init(r31582);
        mpfr_init(r31583);
        mpfr_init(r31584);
        mpfr_init(r31585);
        mpfr_init(r31586);
        mpfr_init(r31587);
        mpfr_init(r31588);
        mpfr_init(r31589);
        mpfr_init(r31590);
        mpfr_init(r31591);
        mpfr_init(r31592);
}

double f_im(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r31576, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r31578, M, MPFR_RNDN);
        mpfr_set_d(r31579, D, MPFR_RNDN);
        mpfr_mul(r31580, r31578, r31579, MPFR_RNDN);
        ;
        mpfr_set_d(r31582, d, MPFR_RNDN);
        mpfr_mul(r31583, r31581, r31582, MPFR_RNDN);
        mpfr_div(r31584, r31580, r31583, MPFR_RNDN);
        mpfr_pow(r31585, r31584, r31581, MPFR_RNDN);
        mpfr_set_d(r31586, h, MPFR_RNDN);
        mpfr_set_d(r31587, l, MPFR_RNDN);
        mpfr_div(r31588, r31586, r31587, MPFR_RNDN);
        mpfr_mul(r31589, r31585, r31588, MPFR_RNDN);
        mpfr_sub(r31590, r31577, r31589, MPFR_RNDN);
        mpfr_sqrt(r31591, r31590, MPFR_RNDN);
        mpfr_mul(r31592, r31576, r31591, MPFR_RNDN);
        return mpfr_get_d(r31592, MPFR_RNDN);
}

static mpfr_t r31593, r31594, r31595, r31596, r31597, r31598, r31599, r31600, r31601, r31602, r31603, r31604, r31605, r31606, r31607, r31608, r31609;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31593);
        mpfr_init_set_str(r31594, "1", 10, MPFR_RNDN);
        mpfr_init(r31595);
        mpfr_init(r31596);
        mpfr_init(r31597);
        mpfr_init_set_str(r31598, "2", 10, MPFR_RNDN);
        mpfr_init(r31599);
        mpfr_init(r31600);
        mpfr_init(r31601);
        mpfr_init(r31602);
        mpfr_init(r31603);
        mpfr_init(r31604);
        mpfr_init(r31605);
        mpfr_init(r31606);
        mpfr_init(r31607);
        mpfr_init(r31608);
        mpfr_init(r31609);
}

double f_fm(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r31593, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r31595, M, MPFR_RNDN);
        mpfr_set_d(r31596, D, MPFR_RNDN);
        mpfr_mul(r31597, r31595, r31596, MPFR_RNDN);
        ;
        mpfr_set_d(r31599, d, MPFR_RNDN);
        mpfr_mul(r31600, r31598, r31599, MPFR_RNDN);
        mpfr_div(r31601, r31597, r31600, MPFR_RNDN);
        mpfr_set_d(r31602, h, MPFR_RNDN);
        mpfr_mul(r31603, r31601, r31602, MPFR_RNDN);
        mpfr_mul(r31604, r31601, r31603, MPFR_RNDN);
        mpfr_set_d(r31605, l, MPFR_RNDN);
        mpfr_div(r31606, r31604, r31605, MPFR_RNDN);
        mpfr_sub(r31607, r31594, r31606, MPFR_RNDN);
        mpfr_sqrt(r31608, r31607, MPFR_RNDN);
        mpfr_mul(r31609, r31593, r31608, MPFR_RNDN);
        return mpfr_get_d(r31609, MPFR_RNDN);
}

static mpfr_t r31610, r31611, r31612, r31613, r31614, r31615, r31616, r31617, r31618, r31619, r31620, r31621, r31622, r31623, r31624, r31625, r31626;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31610);
        mpfr_init_set_str(r31611, "1", 10, MPFR_RNDN);
        mpfr_init(r31612);
        mpfr_init(r31613);
        mpfr_init(r31614);
        mpfr_init_set_str(r31615, "2", 10, MPFR_RNDN);
        mpfr_init(r31616);
        mpfr_init(r31617);
        mpfr_init(r31618);
        mpfr_init(r31619);
        mpfr_init(r31620);
        mpfr_init(r31621);
        mpfr_init(r31622);
        mpfr_init(r31623);
        mpfr_init(r31624);
        mpfr_init(r31625);
        mpfr_init(r31626);
}

double f_dm(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r31610, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r31612, M, MPFR_RNDN);
        mpfr_set_d(r31613, D, MPFR_RNDN);
        mpfr_mul(r31614, r31612, r31613, MPFR_RNDN);
        ;
        mpfr_set_d(r31616, d, MPFR_RNDN);
        mpfr_mul(r31617, r31615, r31616, MPFR_RNDN);
        mpfr_div(r31618, r31614, r31617, MPFR_RNDN);
        mpfr_set_d(r31619, h, MPFR_RNDN);
        mpfr_mul(r31620, r31618, r31619, MPFR_RNDN);
        mpfr_mul(r31621, r31618, r31620, MPFR_RNDN);
        mpfr_set_d(r31622, l, MPFR_RNDN);
        mpfr_div(r31623, r31621, r31622, MPFR_RNDN);
        mpfr_sub(r31624, r31611, r31623, MPFR_RNDN);
        mpfr_sqrt(r31625, r31624, MPFR_RNDN);
        mpfr_mul(r31626, r31610, r31625, MPFR_RNDN);
        return mpfr_get_d(r31626, MPFR_RNDN);
}

