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

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

double f_if(float c0, float A, float V, float l) {
        float r31423 = c0;
        float r31424 = A;
        float r31425 = V;
        float r31426 = l;
        float r31427 = r31425 * r31426;
        float r31428 = r31424 / r31427;
        float r31429 = sqrt(r31428);
        float r31430 = r31423 * r31429;
        return r31430;
}

double f_id(double c0, double A, double V, double l) {
        double r31431 = c0;
        double r31432 = A;
        double r31433 = V;
        double r31434 = l;
        double r31435 = r31433 * r31434;
        double r31436 = r31432 / r31435;
        double r31437 = sqrt(r31436);
        double r31438 = r31431 * r31437;
        return r31438;
}


double f_of(float c0, float A, float V, float l) {
        float r31439 = A;
        float r31440 = 3.6519349309068006e-301;
        bool r31441 = r31439 <= r31440;
        float r31442 = c0;
        float r31443 = V;
        float r31444 = l;
        float r31445 = r31443 * r31444;
        float r31446 = r31439 / r31445;
        float r31447 = sqrt(r31446);
        float r31448 = sqrt(r31447);
        float r31449 = r31442 * r31448;
        float r31450 = r31449 * r31448;
        float r31451 = sqrt(r31439);
        float r31452 = sqrt(r31445);
        float r31453 = r31451 / r31452;
        float r31454 = r31442 * r31453;
        float r31455 = r31441 ? r31450 : r31454;
        return r31455;
}

double f_od(double c0, double A, double V, double l) {
        double r31456 = A;
        double r31457 = 3.6519349309068006e-301;
        bool r31458 = r31456 <= r31457;
        double r31459 = c0;
        double r31460 = V;
        double r31461 = l;
        double r31462 = r31460 * r31461;
        double r31463 = r31456 / r31462;
        double r31464 = sqrt(r31463);
        double r31465 = sqrt(r31464);
        double r31466 = r31459 * r31465;
        double r31467 = r31466 * r31465;
        double r31468 = sqrt(r31456);
        double r31469 = sqrt(r31462);
        double r31470 = r31468 / r31469;
        double r31471 = r31459 * r31470;
        double r31472 = r31458 ? r31467 : r31471;
        return r31472;
}

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 r31473, r31474, r31475, r31476, r31477, r31478, r31479, r31480;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r31473);
        mpfr_init(r31474);
        mpfr_init(r31475);
        mpfr_init(r31476);
        mpfr_init(r31477);
        mpfr_init(r31478);
        mpfr_init(r31479);
        mpfr_init(r31480);
}

double f_im(double c0, double A, double V, double l) {
        mpfr_set_d(r31473, c0, MPFR_RNDN);
        mpfr_set_d(r31474, A, MPFR_RNDN);
        mpfr_set_d(r31475, V, MPFR_RNDN);
        mpfr_set_d(r31476, l, MPFR_RNDN);
        mpfr_mul(r31477, r31475, r31476, MPFR_RNDN);
        mpfr_div(r31478, r31474, r31477, MPFR_RNDN);
        mpfr_sqrt(r31479, r31478, MPFR_RNDN);
        mpfr_mul(r31480, r31473, r31479, MPFR_RNDN);
        return mpfr_get_d(r31480, MPFR_RNDN);
}

static mpfr_t r31481, r31482, r31483, r31484, r31485, r31486, r31487, r31488, r31489, r31490, r31491, r31492, r31493, r31494, r31495, r31496, r31497;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31481);
        mpfr_init_set_str(r31482, "3.6519349309068006e-301", 10, MPFR_RNDN);
        mpfr_init(r31483);
        mpfr_init(r31484);
        mpfr_init(r31485);
        mpfr_init(r31486);
        mpfr_init(r31487);
        mpfr_init(r31488);
        mpfr_init(r31489);
        mpfr_init(r31490);
        mpfr_init(r31491);
        mpfr_init(r31492);
        mpfr_init(r31493);
        mpfr_init(r31494);
        mpfr_init(r31495);
        mpfr_init(r31496);
        mpfr_init(r31497);
}

double f_fm(double c0, double A, double V, double l) {
        mpfr_set_d(r31481, A, MPFR_RNDN);
        ;
        mpfr_set_si(r31483, mpfr_cmp(r31481, r31482) <= 0, MPFR_RNDN);
        mpfr_set_d(r31484, c0, MPFR_RNDN);
        mpfr_set_d(r31485, V, MPFR_RNDN);
        mpfr_set_d(r31486, l, MPFR_RNDN);
        mpfr_mul(r31487, r31485, r31486, MPFR_RNDN);
        mpfr_div(r31488, r31481, r31487, MPFR_RNDN);
        mpfr_sqrt(r31489, r31488, MPFR_RNDN);
        mpfr_sqrt(r31490, r31489, MPFR_RNDN);
        mpfr_mul(r31491, r31484, r31490, MPFR_RNDN);
        mpfr_mul(r31492, r31491, r31490, MPFR_RNDN);
        mpfr_sqrt(r31493, r31481, MPFR_RNDN);
        mpfr_sqrt(r31494, r31487, MPFR_RNDN);
        mpfr_div(r31495, r31493, r31494, MPFR_RNDN);
        mpfr_mul(r31496, r31484, r31495, MPFR_RNDN);
        if (mpfr_get_si(r31483, MPFR_RNDN)) { mpfr_set(r31497, r31492, MPFR_RNDN); } else { mpfr_set(r31497, r31496, MPFR_RNDN); };
        return mpfr_get_d(r31497, MPFR_RNDN);
}

static mpfr_t r31498, r31499, r31500, r31501, r31502, r31503, r31504, r31505, r31506, r31507, r31508, r31509, r31510, r31511, r31512, r31513, r31514;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r31498);
        mpfr_init_set_str(r31499, "3.6519349309068006e-301", 10, MPFR_RNDN);
        mpfr_init(r31500);
        mpfr_init(r31501);
        mpfr_init(r31502);
        mpfr_init(r31503);
        mpfr_init(r31504);
        mpfr_init(r31505);
        mpfr_init(r31506);
        mpfr_init(r31507);
        mpfr_init(r31508);
        mpfr_init(r31509);
        mpfr_init(r31510);
        mpfr_init(r31511);
        mpfr_init(r31512);
        mpfr_init(r31513);
        mpfr_init(r31514);
}

double f_dm(double c0, double A, double V, double l) {
        mpfr_set_d(r31498, A, MPFR_RNDN);
        ;
        mpfr_set_si(r31500, mpfr_cmp(r31498, r31499) <= 0, MPFR_RNDN);
        mpfr_set_d(r31501, c0, MPFR_RNDN);
        mpfr_set_d(r31502, V, MPFR_RNDN);
        mpfr_set_d(r31503, l, MPFR_RNDN);
        mpfr_mul(r31504, r31502, r31503, MPFR_RNDN);
        mpfr_div(r31505, r31498, r31504, MPFR_RNDN);
        mpfr_sqrt(r31506, r31505, MPFR_RNDN);
        mpfr_sqrt(r31507, r31506, MPFR_RNDN);
        mpfr_mul(r31508, r31501, r31507, MPFR_RNDN);
        mpfr_mul(r31509, r31508, r31507, MPFR_RNDN);
        mpfr_sqrt(r31510, r31498, MPFR_RNDN);
        mpfr_sqrt(r31511, r31504, MPFR_RNDN);
        mpfr_div(r31512, r31510, r31511, MPFR_RNDN);
        mpfr_mul(r31513, r31501, r31512, MPFR_RNDN);
        if (mpfr_get_si(r31500, MPFR_RNDN)) { mpfr_set(r31514, r31509, MPFR_RNDN); } else { mpfr_set(r31514, r31513, MPFR_RNDN); };
        return mpfr_get_d(r31514, MPFR_RNDN);
}

