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

char *name = "NMSE problem 3.2.1, positive";

double f_if(float a, float b_2F2, float c) {
        float r5040024 = b_2F2;
        float r5040025 = -r5040024;
        float r5040026 = r5040024 * r5040024;
        float r5040027 = a;
        float r5040028 = c;
        float r5040029 = r5040027 * r5040028;
        float r5040030 = r5040026 - r5040029;
        float r5040031 = sqrt(r5040030);
        float r5040032 = r5040025 + r5040031;
        float r5040033 = r5040032 / r5040027;
        return r5040033;
}

double f_id(double a, double b_2F2, double c) {
        double r5040034 = b_2F2;
        double r5040035 = -r5040034;
        double r5040036 = r5040034 * r5040034;
        double r5040037 = a;
        double r5040038 = c;
        double r5040039 = r5040037 * r5040038;
        double r5040040 = r5040036 - r5040039;
        double r5040041 = sqrt(r5040040);
        double r5040042 = r5040035 + r5040041;
        double r5040043 = r5040042 / r5040037;
        return r5040043;
}


double f_of(float a, float b_2F2, float c) {
        float r5040044 = b_2F2;
        float r5040045 = -3.2138303248745144e+50f;
        bool r5040046 = r5040044 <= r5040045;
        float r5040047 = 0.5f;
        float r5040048 = r5040047 / r5040044;
        float r5040049 = c;
        float r5040050 = r5040048 * r5040049;
        float r5040051 = 2.0f;
        float r5040052 = a;
        float r5040053 = r5040044 / r5040052;
        float r5040054 = r5040051 * r5040053;
        float r5040055 = r5040050 - r5040054;
        float r5040056 = -3.147839144939969e-238f;
        bool r5040057 = r5040044 <= r5040056;
        float r5040058 = -r5040044;
        float r5040059 = r5040044 * r5040044;
        float r5040060 = r5040052 * r5040049;
        float r5040061 = r5040059 - r5040060;
        float r5040062 = sqrt(r5040061);
        float r5040063 = r5040058 + r5040062;
        float r5040064 = r5040063 / r5040052;
        float r5040065 = 1.5588782102575123e+76f;
        bool r5040066 = r5040044 <= r5040065;
        float r5040067 = 1.0f;
        float r5040068 = r5040052 / r5040067;
        float r5040069 = r5040058 - r5040062;
        float r5040070 = r5040049 / r5040069;
        float r5040071 = r5040068 * r5040070;
        float r5040072 = r5040071 / r5040052;
        float r5040073 = r5040058 - r5040044;
        float r5040074 = r5040049 * r5040047;
        float r5040075 = r5040074 / r5040053;
        float r5040076 = r5040073 + r5040075;
        float r5040077 = r5040049 / r5040076;
        float r5040078 = r5040066 ? r5040072 : r5040077;
        float r5040079 = r5040057 ? r5040064 : r5040078;
        float r5040080 = r5040046 ? r5040055 : r5040079;
        return r5040080;
}

double f_od(double a, double b_2F2, double c) {
        double r5040081 = b_2F2;
        double r5040082 = -3.2138303248745144e+50;
        bool r5040083 = r5040081 <= r5040082;
        double r5040084 = 0.5;
        double r5040085 = r5040084 / r5040081;
        double r5040086 = c;
        double r5040087 = r5040085 * r5040086;
        double r5040088 = 2.0;
        double r5040089 = a;
        double r5040090 = r5040081 / r5040089;
        double r5040091 = r5040088 * r5040090;
        double r5040092 = r5040087 - r5040091;
        double r5040093 = -3.147839144939969e-238;
        bool r5040094 = r5040081 <= r5040093;
        double r5040095 = -r5040081;
        double r5040096 = r5040081 * r5040081;
        double r5040097 = r5040089 * r5040086;
        double r5040098 = r5040096 - r5040097;
        double r5040099 = sqrt(r5040098);
        double r5040100 = r5040095 + r5040099;
        double r5040101 = r5040100 / r5040089;
        double r5040102 = 1.5588782102575123e+76;
        bool r5040103 = r5040081 <= r5040102;
        double r5040104 = 1.0;
        double r5040105 = r5040089 / r5040104;
        double r5040106 = r5040095 - r5040099;
        double r5040107 = r5040086 / r5040106;
        double r5040108 = r5040105 * r5040107;
        double r5040109 = r5040108 / r5040089;
        double r5040110 = r5040095 - r5040081;
        double r5040111 = r5040086 * r5040084;
        double r5040112 = r5040111 / r5040090;
        double r5040113 = r5040110 + r5040112;
        double r5040114 = r5040086 / r5040113;
        double r5040115 = r5040103 ? r5040109 : r5040114;
        double r5040116 = r5040094 ? r5040101 : r5040115;
        double r5040117 = r5040083 ? r5040092 : r5040116;
        return r5040117;
}

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 r5040118, r5040119, r5040120, r5040121, r5040122, r5040123, r5040124, r5040125, r5040126, r5040127;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5040118);
        mpfr_init(r5040119);
        mpfr_init(r5040120);
        mpfr_init(r5040121);
        mpfr_init(r5040122);
        mpfr_init(r5040123);
        mpfr_init(r5040124);
        mpfr_init(r5040125);
        mpfr_init(r5040126);
        mpfr_init(r5040127);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r5040118, b_2F2, MPFR_RNDN);
        mpfr_neg(r5040119, r5040118, MPFR_RNDN);
        mpfr_sqr(r5040120, r5040118, MPFR_RNDN);
        mpfr_set_d(r5040121, a, MPFR_RNDN);
        mpfr_set_d(r5040122, c, MPFR_RNDN);
        mpfr_mul(r5040123, r5040121, r5040122, MPFR_RNDN);
        mpfr_sub(r5040124, r5040120, r5040123, MPFR_RNDN);
        mpfr_sqrt(r5040125, r5040124, MPFR_RNDN);
        mpfr_add(r5040126, r5040119, r5040125, MPFR_RNDN);
        mpfr_div(r5040127, r5040126, r5040121, MPFR_RNDN);
        return mpfr_get_d(r5040127, MPFR_RNDN);
}

static mpfr_t r5040128, r5040129, r5040130, r5040131, r5040132, r5040133, r5040134, r5040135, r5040136, r5040137, r5040138, r5040139, r5040140, r5040141, r5040142, r5040143, r5040144, r5040145, r5040146, r5040147, r5040148, r5040149, r5040150, r5040151, r5040152, r5040153, r5040154, r5040155, r5040156, r5040157, r5040158, r5040159, r5040160, r5040161, r5040162, r5040163, r5040164;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5040128);
        mpfr_init_set_str(r5040129, "-3.2138303248745144e+50", 10, MPFR_RNDN);
        mpfr_init(r5040130);
        mpfr_init_set_str(r5040131, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5040132);
        mpfr_init(r5040133);
        mpfr_init(r5040134);
        mpfr_init_set_str(r5040135, "2", 10, MPFR_RNDN);
        mpfr_init(r5040136);
        mpfr_init(r5040137);
        mpfr_init(r5040138);
        mpfr_init(r5040139);
        mpfr_init_set_str(r5040140, "-3.147839144939969e-238", 10, MPFR_RNDN);
        mpfr_init(r5040141);
        mpfr_init(r5040142);
        mpfr_init(r5040143);
        mpfr_init(r5040144);
        mpfr_init(r5040145);
        mpfr_init(r5040146);
        mpfr_init(r5040147);
        mpfr_init(r5040148);
        mpfr_init_set_str(r5040149, "1.5588782102575123e+76", 10, MPFR_RNDN);
        mpfr_init(r5040150);
        mpfr_init_set_str(r5040151, "1", 10, MPFR_RNDN);
        mpfr_init(r5040152);
        mpfr_init(r5040153);
        mpfr_init(r5040154);
        mpfr_init(r5040155);
        mpfr_init(r5040156);
        mpfr_init(r5040157);
        mpfr_init(r5040158);
        mpfr_init(r5040159);
        mpfr_init(r5040160);
        mpfr_init(r5040161);
        mpfr_init(r5040162);
        mpfr_init(r5040163);
        mpfr_init(r5040164);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r5040128, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r5040130, mpfr_cmp(r5040128, r5040129) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r5040132, r5040131, r5040128, MPFR_RNDN);
        mpfr_set_d(r5040133, c, MPFR_RNDN);
        mpfr_mul(r5040134, r5040132, r5040133, MPFR_RNDN);
        ;
        mpfr_set_d(r5040136, a, MPFR_RNDN);
        mpfr_div(r5040137, r5040128, r5040136, MPFR_RNDN);
        mpfr_mul(r5040138, r5040135, r5040137, MPFR_RNDN);
        mpfr_sub(r5040139, r5040134, r5040138, MPFR_RNDN);
        ;
        mpfr_set_si(r5040141, mpfr_cmp(r5040128, r5040140) <= 0, MPFR_RNDN);
        mpfr_neg(r5040142, r5040128, MPFR_RNDN);
        mpfr_sqr(r5040143, r5040128, MPFR_RNDN);
        mpfr_mul(r5040144, r5040136, r5040133, MPFR_RNDN);
        mpfr_sub(r5040145, r5040143, r5040144, MPFR_RNDN);
        mpfr_sqrt(r5040146, r5040145, MPFR_RNDN);
        mpfr_add(r5040147, r5040142, r5040146, MPFR_RNDN);
        mpfr_div(r5040148, r5040147, r5040136, MPFR_RNDN);
        ;
        mpfr_set_si(r5040150, mpfr_cmp(r5040128, r5040149) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r5040152, r5040136, r5040151, MPFR_RNDN);
        mpfr_sub(r5040153, r5040142, r5040146, MPFR_RNDN);
        mpfr_div(r5040154, r5040133, r5040153, MPFR_RNDN);
        mpfr_mul(r5040155, r5040152, r5040154, MPFR_RNDN);
        mpfr_div(r5040156, r5040155, r5040136, MPFR_RNDN);
        mpfr_sub(r5040157, r5040142, r5040128, MPFR_RNDN);
        mpfr_mul(r5040158, r5040133, r5040131, MPFR_RNDN);
        mpfr_div(r5040159, r5040158, r5040137, MPFR_RNDN);
        mpfr_add(r5040160, r5040157, r5040159, MPFR_RNDN);
        mpfr_div(r5040161, r5040133, r5040160, MPFR_RNDN);
        if (mpfr_get_si(r5040150, MPFR_RNDN)) { mpfr_set(r5040162, r5040156, MPFR_RNDN); } else { mpfr_set(r5040162, r5040161, MPFR_RNDN); };
        if (mpfr_get_si(r5040141, MPFR_RNDN)) { mpfr_set(r5040163, r5040148, MPFR_RNDN); } else { mpfr_set(r5040163, r5040162, MPFR_RNDN); };
        if (mpfr_get_si(r5040130, MPFR_RNDN)) { mpfr_set(r5040164, r5040139, MPFR_RNDN); } else { mpfr_set(r5040164, r5040163, MPFR_RNDN); };
        return mpfr_get_d(r5040164, MPFR_RNDN);
}

static mpfr_t r5040165, r5040166, r5040167, r5040168, r5040169, r5040170, r5040171, r5040172, r5040173, r5040174, r5040175, r5040176, r5040177, r5040178, r5040179, r5040180, r5040181, r5040182, r5040183, r5040184, r5040185, r5040186, r5040187, r5040188, r5040189, r5040190, r5040191, r5040192, r5040193, r5040194, r5040195, r5040196, r5040197, r5040198, r5040199, r5040200, r5040201;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5040165);
        mpfr_init_set_str(r5040166, "-3.2138303248745144e+50", 10, MPFR_RNDN);
        mpfr_init(r5040167);
        mpfr_init_set_str(r5040168, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5040169);
        mpfr_init(r5040170);
        mpfr_init(r5040171);
        mpfr_init_set_str(r5040172, "2", 10, MPFR_RNDN);
        mpfr_init(r5040173);
        mpfr_init(r5040174);
        mpfr_init(r5040175);
        mpfr_init(r5040176);
        mpfr_init_set_str(r5040177, "-3.147839144939969e-238", 10, MPFR_RNDN);
        mpfr_init(r5040178);
        mpfr_init(r5040179);
        mpfr_init(r5040180);
        mpfr_init(r5040181);
        mpfr_init(r5040182);
        mpfr_init(r5040183);
        mpfr_init(r5040184);
        mpfr_init(r5040185);
        mpfr_init_set_str(r5040186, "1.5588782102575123e+76", 10, MPFR_RNDN);
        mpfr_init(r5040187);
        mpfr_init_set_str(r5040188, "1", 10, MPFR_RNDN);
        mpfr_init(r5040189);
        mpfr_init(r5040190);
        mpfr_init(r5040191);
        mpfr_init(r5040192);
        mpfr_init(r5040193);
        mpfr_init(r5040194);
        mpfr_init(r5040195);
        mpfr_init(r5040196);
        mpfr_init(r5040197);
        mpfr_init(r5040198);
        mpfr_init(r5040199);
        mpfr_init(r5040200);
        mpfr_init(r5040201);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r5040165, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r5040167, mpfr_cmp(r5040165, r5040166) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r5040169, r5040168, r5040165, MPFR_RNDN);
        mpfr_set_d(r5040170, c, MPFR_RNDN);
        mpfr_mul(r5040171, r5040169, r5040170, MPFR_RNDN);
        ;
        mpfr_set_d(r5040173, a, MPFR_RNDN);
        mpfr_div(r5040174, r5040165, r5040173, MPFR_RNDN);
        mpfr_mul(r5040175, r5040172, r5040174, MPFR_RNDN);
        mpfr_sub(r5040176, r5040171, r5040175, MPFR_RNDN);
        ;
        mpfr_set_si(r5040178, mpfr_cmp(r5040165, r5040177) <= 0, MPFR_RNDN);
        mpfr_neg(r5040179, r5040165, MPFR_RNDN);
        mpfr_sqr(r5040180, r5040165, MPFR_RNDN);
        mpfr_mul(r5040181, r5040173, r5040170, MPFR_RNDN);
        mpfr_sub(r5040182, r5040180, r5040181, MPFR_RNDN);
        mpfr_sqrt(r5040183, r5040182, MPFR_RNDN);
        mpfr_add(r5040184, r5040179, r5040183, MPFR_RNDN);
        mpfr_div(r5040185, r5040184, r5040173, MPFR_RNDN);
        ;
        mpfr_set_si(r5040187, mpfr_cmp(r5040165, r5040186) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r5040189, r5040173, r5040188, MPFR_RNDN);
        mpfr_sub(r5040190, r5040179, r5040183, MPFR_RNDN);
        mpfr_div(r5040191, r5040170, r5040190, MPFR_RNDN);
        mpfr_mul(r5040192, r5040189, r5040191, MPFR_RNDN);
        mpfr_div(r5040193, r5040192, r5040173, MPFR_RNDN);
        mpfr_sub(r5040194, r5040179, r5040165, MPFR_RNDN);
        mpfr_mul(r5040195, r5040170, r5040168, MPFR_RNDN);
        mpfr_div(r5040196, r5040195, r5040174, MPFR_RNDN);
        mpfr_add(r5040197, r5040194, r5040196, MPFR_RNDN);
        mpfr_div(r5040198, r5040170, r5040197, MPFR_RNDN);
        if (mpfr_get_si(r5040187, MPFR_RNDN)) { mpfr_set(r5040199, r5040193, MPFR_RNDN); } else { mpfr_set(r5040199, r5040198, MPFR_RNDN); };
        if (mpfr_get_si(r5040178, MPFR_RNDN)) { mpfr_set(r5040200, r5040185, MPFR_RNDN); } else { mpfr_set(r5040200, r5040199, MPFR_RNDN); };
        if (mpfr_get_si(r5040167, MPFR_RNDN)) { mpfr_set(r5040201, r5040176, MPFR_RNDN); } else { mpfr_set(r5040201, r5040200, MPFR_RNDN); };
        return mpfr_get_d(r5040201, MPFR_RNDN);
}

