#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 r32072 = c0;
        float r32073 = A;
        float r32074 = V;
        float r32075 = l;
        float r32076 = r32074 * r32075;
        float r32077 = r32073 / r32076;
        float r32078 = sqrt(r32077);
        float r32079 = r32072 * r32078;
        return r32079;
}

double f_id(double c0, double A, double V, double l) {
        double r32080 = c0;
        double r32081 = A;
        double r32082 = V;
        double r32083 = l;
        double r32084 = r32082 * r32083;
        double r32085 = r32081 / r32084;
        double r32086 = sqrt(r32085);
        double r32087 = r32080 * r32086;
        return r32087;
}


double f_of(float c0, float A, float V, float l) {
        float r32088 = A;
        float r32089 = 1.232099879448477e-293;
        bool r32090 = r32088 <= r32089;
        float r32091 = c0;
        float r32092 = V;
        float r32093 = l;
        float r32094 = r32092 * r32093;
        float r32095 = r32088 / r32094;
        float r32096 = sqrt(r32095);
        float r32097 = sqrt(r32096);
        float r32098 = r32091 * r32097;
        float r32099 = r32098 * r32097;
        float r32100 = sqrt(r32088);
        float r32101 = sqrt(r32094);
        float r32102 = r32100 / r32101;
        float r32103 = r32091 * r32102;
        float r32104 = r32090 ? r32099 : r32103;
        return r32104;
}

double f_od(double c0, double A, double V, double l) {
        double r32105 = A;
        double r32106 = 1.232099879448477e-293;
        bool r32107 = r32105 <= r32106;
        double r32108 = c0;
        double r32109 = V;
        double r32110 = l;
        double r32111 = r32109 * r32110;
        double r32112 = r32105 / r32111;
        double r32113 = sqrt(r32112);
        double r32114 = sqrt(r32113);
        double r32115 = r32108 * r32114;
        double r32116 = r32115 * r32114;
        double r32117 = sqrt(r32105);
        double r32118 = sqrt(r32111);
        double r32119 = r32117 / r32118;
        double r32120 = r32108 * r32119;
        double r32121 = r32107 ? r32116 : r32120;
        return r32121;
}

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 r32122, r32123, r32124, r32125, r32126, r32127, r32128, r32129;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r32122);
        mpfr_init(r32123);
        mpfr_init(r32124);
        mpfr_init(r32125);
        mpfr_init(r32126);
        mpfr_init(r32127);
        mpfr_init(r32128);
        mpfr_init(r32129);
}

double f_im(double c0, double A, double V, double l) {
        mpfr_set_d(r32122, c0, MPFR_RNDN);
        mpfr_set_d(r32123, A, MPFR_RNDN);
        mpfr_set_d(r32124, V, MPFR_RNDN);
        mpfr_set_d(r32125, l, MPFR_RNDN);
        mpfr_mul(r32126, r32124, r32125, MPFR_RNDN);
        mpfr_div(r32127, r32123, r32126, MPFR_RNDN);
        mpfr_sqrt(r32128, r32127, MPFR_RNDN);
        mpfr_mul(r32129, r32122, r32128, MPFR_RNDN);
        return mpfr_get_d(r32129, MPFR_RNDN);
}

static mpfr_t r32130, r32131, r32132, r32133, r32134, r32135, r32136, r32137, r32138, r32139, r32140, r32141, r32142, r32143, r32144, r32145, r32146;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32130);
        mpfr_init_set_str(r32131, "1.232099879448477e-293", 10, MPFR_RNDN);
        mpfr_init(r32132);
        mpfr_init(r32133);
        mpfr_init(r32134);
        mpfr_init(r32135);
        mpfr_init(r32136);
        mpfr_init(r32137);
        mpfr_init(r32138);
        mpfr_init(r32139);
        mpfr_init(r32140);
        mpfr_init(r32141);
        mpfr_init(r32142);
        mpfr_init(r32143);
        mpfr_init(r32144);
        mpfr_init(r32145);
        mpfr_init(r32146);
}

double f_fm(double c0, double A, double V, double l) {
        mpfr_set_d(r32130, A, MPFR_RNDN);
        ;
        mpfr_set_si(r32132, mpfr_cmp(r32130, r32131) <= 0, MPFR_RNDN);
        mpfr_set_d(r32133, c0, MPFR_RNDN);
        mpfr_set_d(r32134, V, MPFR_RNDN);
        mpfr_set_d(r32135, l, MPFR_RNDN);
        mpfr_mul(r32136, r32134, r32135, MPFR_RNDN);
        mpfr_div(r32137, r32130, r32136, MPFR_RNDN);
        mpfr_sqrt(r32138, r32137, MPFR_RNDN);
        mpfr_sqrt(r32139, r32138, MPFR_RNDN);
        mpfr_mul(r32140, r32133, r32139, MPFR_RNDN);
        mpfr_mul(r32141, r32140, r32139, MPFR_RNDN);
        mpfr_sqrt(r32142, r32130, MPFR_RNDN);
        mpfr_sqrt(r32143, r32136, MPFR_RNDN);
        mpfr_div(r32144, r32142, r32143, MPFR_RNDN);
        mpfr_mul(r32145, r32133, r32144, MPFR_RNDN);
        if (mpfr_get_si(r32132, MPFR_RNDN)) { mpfr_set(r32146, r32141, MPFR_RNDN); } else { mpfr_set(r32146, r32145, MPFR_RNDN); };
        return mpfr_get_d(r32146, MPFR_RNDN);
}

static mpfr_t r32147, r32148, r32149, r32150, r32151, r32152, r32153, r32154, r32155, r32156, r32157, r32158, r32159, r32160, r32161, r32162, r32163;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32147);
        mpfr_init_set_str(r32148, "1.232099879448477e-293", 10, MPFR_RNDN);
        mpfr_init(r32149);
        mpfr_init(r32150);
        mpfr_init(r32151);
        mpfr_init(r32152);
        mpfr_init(r32153);
        mpfr_init(r32154);
        mpfr_init(r32155);
        mpfr_init(r32156);
        mpfr_init(r32157);
        mpfr_init(r32158);
        mpfr_init(r32159);
        mpfr_init(r32160);
        mpfr_init(r32161);
        mpfr_init(r32162);
        mpfr_init(r32163);
}

double f_dm(double c0, double A, double V, double l) {
        mpfr_set_d(r32147, A, MPFR_RNDN);
        ;
        mpfr_set_si(r32149, mpfr_cmp(r32147, r32148) <= 0, MPFR_RNDN);
        mpfr_set_d(r32150, c0, MPFR_RNDN);
        mpfr_set_d(r32151, V, MPFR_RNDN);
        mpfr_set_d(r32152, l, MPFR_RNDN);
        mpfr_mul(r32153, r32151, r32152, MPFR_RNDN);
        mpfr_div(r32154, r32147, r32153, MPFR_RNDN);
        mpfr_sqrt(r32155, r32154, MPFR_RNDN);
        mpfr_sqrt(r32156, r32155, MPFR_RNDN);
        mpfr_mul(r32157, r32150, r32156, MPFR_RNDN);
        mpfr_mul(r32158, r32157, r32156, MPFR_RNDN);
        mpfr_sqrt(r32159, r32147, MPFR_RNDN);
        mpfr_sqrt(r32160, r32153, MPFR_RNDN);
        mpfr_div(r32161, r32159, r32160, MPFR_RNDN);
        mpfr_mul(r32162, r32150, r32161, MPFR_RNDN);
        if (mpfr_get_si(r32149, MPFR_RNDN)) { mpfr_set(r32163, r32158, MPFR_RNDN); } else { mpfr_set(r32163, r32162, MPFR_RNDN); };
        return mpfr_get_d(r32163, MPFR_RNDN);
}

