#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 r9918 = w0;
        float r9919 = 1;
        float r9920 = M;
        float r9921 = D;
        float r9922 = r9920 * r9921;
        float r9923 = 2;
        float r9924 = d;
        float r9925 = r9923 * r9924;
        float r9926 = r9922 / r9925;
        float r9927 = pow(r9926, r9923);
        float r9928 = h;
        float r9929 = l;
        float r9930 = r9928 / r9929;
        float r9931 = r9927 * r9930;
        float r9932 = r9919 - r9931;
        float r9933 = sqrt(r9932);
        float r9934 = r9918 * r9933;
        return r9934;
}

double f_id(double w0, double M, double D, double h, double l, double d) {
        double r9935 = w0;
        double r9936 = 1;
        double r9937 = M;
        double r9938 = D;
        double r9939 = r9937 * r9938;
        double r9940 = 2;
        double r9941 = d;
        double r9942 = r9940 * r9941;
        double r9943 = r9939 / r9942;
        double r9944 = pow(r9943, r9940);
        double r9945 = h;
        double r9946 = l;
        double r9947 = r9945 / r9946;
        double r9948 = r9944 * r9947;
        double r9949 = r9936 - r9948;
        double r9950 = sqrt(r9949);
        double r9951 = r9935 * r9950;
        return r9951;
}


double f_of(float w0, float M, float D, float h, float l, float d) {
        float r9952 = M;
        float r9953 = D;
        float r9954 = r9952 * r9953;
        float r9955 = 2;
        float r9956 = d;
        float r9957 = r9955 * r9956;
        float r9958 = r9954 / r9957;
        float r9959 = pow(r9958, r9955);
        float r9960 = h;
        float r9961 = l;
        float r9962 = r9960 / r9961;
        float r9963 = r9959 * r9962;
        float r9964 = -6.503081529298164e-10;
        bool r9965 = r9963 <= r9964;
        float r9966 = w0;
        float r9967 = 1;
        float r9968 = r9958 * r9962;
        float r9969 = r9958 * r9968;
        float r9970 = r9967 - r9969;
        float r9971 = sqrt(r9970);
        float r9972 = r9966 * r9971;
        float r9973 = r9965 ? r9972 : r9966;
        return r9973;
}

double f_od(double w0, double M, double D, double h, double l, double d) {
        double r9974 = M;
        double r9975 = D;
        double r9976 = r9974 * r9975;
        double r9977 = 2;
        double r9978 = d;
        double r9979 = r9977 * r9978;
        double r9980 = r9976 / r9979;
        double r9981 = pow(r9980, r9977);
        double r9982 = h;
        double r9983 = l;
        double r9984 = r9982 / r9983;
        double r9985 = r9981 * r9984;
        double r9986 = -6.503081529298164e-10;
        bool r9987 = r9985 <= r9986;
        double r9988 = w0;
        double r9989 = 1;
        double r9990 = r9980 * r9984;
        double r9991 = r9980 * r9990;
        double r9992 = r9989 - r9991;
        double r9993 = sqrt(r9992);
        double r9994 = r9988 * r9993;
        double r9995 = r9987 ? r9994 : r9988;
        return r9995;
}

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 r9996, r9997, r9998, r9999, r10000, r10001, r10002, r10003, r10004, r10005, r10006, r10007, r10008, r10009, r10010, r10011, r10012;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r9996);
        mpfr_init_set_str(r9997, "1", 10, MPFR_RNDN);
        mpfr_init(r9998);
        mpfr_init(r9999);
        mpfr_init(r10000);
        mpfr_init_set_str(r10001, "2", 10, MPFR_RNDN);
        mpfr_init(r10002);
        mpfr_init(r10003);
        mpfr_init(r10004);
        mpfr_init(r10005);
        mpfr_init(r10006);
        mpfr_init(r10007);
        mpfr_init(r10008);
        mpfr_init(r10009);
        mpfr_init(r10010);
        mpfr_init(r10011);
        mpfr_init(r10012);
}

double f_im(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r9996, w0, MPFR_RNDN);
        ;
        mpfr_set_d(r9998, M, MPFR_RNDN);
        mpfr_set_d(r9999, D, MPFR_RNDN);
        mpfr_mul(r10000, r9998, r9999, MPFR_RNDN);
        ;
        mpfr_set_d(r10002, d, MPFR_RNDN);
        mpfr_mul(r10003, r10001, r10002, MPFR_RNDN);
        mpfr_div(r10004, r10000, r10003, MPFR_RNDN);
        mpfr_pow(r10005, r10004, r10001, MPFR_RNDN);
        mpfr_set_d(r10006, h, MPFR_RNDN);
        mpfr_set_d(r10007, l, MPFR_RNDN);
        mpfr_div(r10008, r10006, r10007, MPFR_RNDN);
        mpfr_mul(r10009, r10005, r10008, MPFR_RNDN);
        mpfr_sub(r10010, r9997, r10009, MPFR_RNDN);
        mpfr_sqrt(r10011, r10010, MPFR_RNDN);
        mpfr_mul(r10012, r9996, r10011, MPFR_RNDN);
        return mpfr_get_d(r10012, MPFR_RNDN);
}

static mpfr_t r10013, r10014, r10015, r10016, r10017, r10018, r10019, r10020, r10021, r10022, r10023, r10024, r10025, r10026, r10027, r10028, r10029, r10030, r10031, r10032, r10033, r10034;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r10013);
        mpfr_init(r10014);
        mpfr_init(r10015);
        mpfr_init_set_str(r10016, "2", 10, MPFR_RNDN);
        mpfr_init(r10017);
        mpfr_init(r10018);
        mpfr_init(r10019);
        mpfr_init(r10020);
        mpfr_init(r10021);
        mpfr_init(r10022);
        mpfr_init(r10023);
        mpfr_init(r10024);
        mpfr_init_set_str(r10025, "-6.503081529298164e-10", 10, MPFR_RNDN);
        mpfr_init(r10026);
        mpfr_init(r10027);
        mpfr_init_set_str(r10028, "1", 10, MPFR_RNDN);
        mpfr_init(r10029);
        mpfr_init(r10030);
        mpfr_init(r10031);
        mpfr_init(r10032);
        mpfr_init(r10033);
        mpfr_init(r10034);
}

double f_fm(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r10013, M, MPFR_RNDN);
        mpfr_set_d(r10014, D, MPFR_RNDN);
        mpfr_mul(r10015, r10013, r10014, MPFR_RNDN);
        ;
        mpfr_set_d(r10017, d, MPFR_RNDN);
        mpfr_mul(r10018, r10016, r10017, MPFR_RNDN);
        mpfr_div(r10019, r10015, r10018, MPFR_RNDN);
        mpfr_pow(r10020, r10019, r10016, MPFR_RNDN);
        mpfr_set_d(r10021, h, MPFR_RNDN);
        mpfr_set_d(r10022, l, MPFR_RNDN);
        mpfr_div(r10023, r10021, r10022, MPFR_RNDN);
        mpfr_mul(r10024, r10020, r10023, MPFR_RNDN);
        ;
        mpfr_set_si(r10026, mpfr_cmp(r10024, r10025) <= 0, MPFR_RNDN);
        mpfr_set_d(r10027, w0, MPFR_RNDN);
        ;
        mpfr_mul(r10029, r10019, r10023, MPFR_RNDN);
        mpfr_mul(r10030, r10019, r10029, MPFR_RNDN);
        mpfr_sub(r10031, r10028, r10030, MPFR_RNDN);
        mpfr_sqrt(r10032, r10031, MPFR_RNDN);
        mpfr_mul(r10033, r10027, r10032, MPFR_RNDN);
        if (mpfr_get_si(r10026, MPFR_RNDN)) { mpfr_set(r10034, r10033, MPFR_RNDN); } else { mpfr_set(r10034, r10027, MPFR_RNDN); };
        return mpfr_get_d(r10034, MPFR_RNDN);
}

static mpfr_t r10035, r10036, r10037, r10038, r10039, r10040, r10041, r10042, r10043, r10044, r10045, r10046, r10047, r10048, r10049, r10050, r10051, r10052, r10053, r10054, r10055, r10056;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r10035);
        mpfr_init(r10036);
        mpfr_init(r10037);
        mpfr_init_set_str(r10038, "2", 10, MPFR_RNDN);
        mpfr_init(r10039);
        mpfr_init(r10040);
        mpfr_init(r10041);
        mpfr_init(r10042);
        mpfr_init(r10043);
        mpfr_init(r10044);
        mpfr_init(r10045);
        mpfr_init(r10046);
        mpfr_init_set_str(r10047, "-6.503081529298164e-10", 10, MPFR_RNDN);
        mpfr_init(r10048);
        mpfr_init(r10049);
        mpfr_init_set_str(r10050, "1", 10, MPFR_RNDN);
        mpfr_init(r10051);
        mpfr_init(r10052);
        mpfr_init(r10053);
        mpfr_init(r10054);
        mpfr_init(r10055);
        mpfr_init(r10056);
}

double f_dm(double w0, double M, double D, double h, double l, double d) {
        mpfr_set_d(r10035, M, MPFR_RNDN);
        mpfr_set_d(r10036, D, MPFR_RNDN);
        mpfr_mul(r10037, r10035, r10036, MPFR_RNDN);
        ;
        mpfr_set_d(r10039, d, MPFR_RNDN);
        mpfr_mul(r10040, r10038, r10039, MPFR_RNDN);
        mpfr_div(r10041, r10037, r10040, MPFR_RNDN);
        mpfr_pow(r10042, r10041, r10038, MPFR_RNDN);
        mpfr_set_d(r10043, h, MPFR_RNDN);
        mpfr_set_d(r10044, l, MPFR_RNDN);
        mpfr_div(r10045, r10043, r10044, MPFR_RNDN);
        mpfr_mul(r10046, r10042, r10045, MPFR_RNDN);
        ;
        mpfr_set_si(r10048, mpfr_cmp(r10046, r10047) <= 0, MPFR_RNDN);
        mpfr_set_d(r10049, w0, MPFR_RNDN);
        ;
        mpfr_mul(r10051, r10041, r10045, MPFR_RNDN);
        mpfr_mul(r10052, r10041, r10051, MPFR_RNDN);
        mpfr_sub(r10053, r10050, r10052, MPFR_RNDN);
        mpfr_sqrt(r10054, r10053, MPFR_RNDN);
        mpfr_mul(r10055, r10049, r10054, MPFR_RNDN);
        if (mpfr_get_si(r10048, MPFR_RNDN)) { mpfr_set(r10056, r10055, MPFR_RNDN); } else { mpfr_set(r10056, r10049, MPFR_RNDN); };
        return mpfr_get_d(r10056, MPFR_RNDN);
}

