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

char *name = "NMSE problem 3.2.1";

double f_if(float a, float b_2F2, float c) {
        float r28092 = b_2F2;
        float r28093 = -r28092;
        float r28094 = r28092 * r28092;
        float r28095 = a;
        float r28096 = c;
        float r28097 = r28095 * r28096;
        float r28098 = r28094 - r28097;
        float r28099 = sqrt(r28098);
        float r28100 = r28093 - r28099;
        float r28101 = r28100 / r28095;
        return r28101;
}

double f_id(double a, double b_2F2, double c) {
        double r28102 = b_2F2;
        double r28103 = -r28102;
        double r28104 = r28102 * r28102;
        double r28105 = a;
        double r28106 = c;
        double r28107 = r28105 * r28106;
        double r28108 = r28104 - r28107;
        double r28109 = sqrt(r28108);
        double r28110 = r28103 - r28109;
        double r28111 = r28110 / r28105;
        return r28111;
}


double f_of(float a, float b_2F2, float c) {
        float r28112 = b_2F2;
        float r28113 = -5.018034098196628e+28;
        bool r28114 = r28112 <= r28113;
        float r28115 = c;
        float r28116 = r28115 / r28112;
        float r28117 = -1/2;
        float r28118 = r28116 * r28117;
        float r28119 = -1.992853954034314e-66;
        bool r28120 = r28112 <= r28119;
        float r28121 = a;
        float r28122 = r28115 * r28121;
        float r28123 = -r28112;
        float r28124 = r28112 * r28112;
        float r28125 = r28121 * r28115;
        float r28126 = r28124 - r28125;
        float r28127 = sqrt(r28126);
        float r28128 = r28123 + r28127;
        float r28129 = r28122 / r28128;
        float r28130 = r28129 / r28121;
        float r28131 = -5.3589749776329416e-108;
        bool r28132 = r28112 <= r28131;
        float r28133 = 1.7007616628281973e+81;
        bool r28134 = r28112 <= r28133;
        float r28135 = r28123 - r28127;
        float r28136 = r28135 / r28121;
        float r28137 = -2;
        float r28138 = r28112 / r28121;
        float r28139 = r28137 * r28138;
        float r28140 = r28134 ? r28136 : r28139;
        float r28141 = r28132 ? r28118 : r28140;
        float r28142 = r28120 ? r28130 : r28141;
        float r28143 = r28114 ? r28118 : r28142;
        return r28143;
}

double f_od(double a, double b_2F2, double c) {
        double r28144 = b_2F2;
        double r28145 = -5.018034098196628e+28;
        bool r28146 = r28144 <= r28145;
        double r28147 = c;
        double r28148 = r28147 / r28144;
        double r28149 = -1/2;
        double r28150 = r28148 * r28149;
        double r28151 = -1.992853954034314e-66;
        bool r28152 = r28144 <= r28151;
        double r28153 = a;
        double r28154 = r28147 * r28153;
        double r28155 = -r28144;
        double r28156 = r28144 * r28144;
        double r28157 = r28153 * r28147;
        double r28158 = r28156 - r28157;
        double r28159 = sqrt(r28158);
        double r28160 = r28155 + r28159;
        double r28161 = r28154 / r28160;
        double r28162 = r28161 / r28153;
        double r28163 = -5.3589749776329416e-108;
        bool r28164 = r28144 <= r28163;
        double r28165 = 1.7007616628281973e+81;
        bool r28166 = r28144 <= r28165;
        double r28167 = r28155 - r28159;
        double r28168 = r28167 / r28153;
        double r28169 = -2;
        double r28170 = r28144 / r28153;
        double r28171 = r28169 * r28170;
        double r28172 = r28166 ? r28168 : r28171;
        double r28173 = r28164 ? r28150 : r28172;
        double r28174 = r28152 ? r28162 : r28173;
        double r28175 = r28146 ? r28150 : r28174;
        return r28175;
}

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 r28176, r28177, r28178, r28179, r28180, r28181, r28182, r28183, r28184, r28185;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2704);
        mpfr_init(r28176);
        mpfr_init(r28177);
        mpfr_init(r28178);
        mpfr_init(r28179);
        mpfr_init(r28180);
        mpfr_init(r28181);
        mpfr_init(r28182);
        mpfr_init(r28183);
        mpfr_init(r28184);
        mpfr_init(r28185);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r28176, b_2F2, MPFR_RNDN);
        mpfr_neg(r28177, r28176, MPFR_RNDN);
        mpfr_mul(r28178, r28176, r28176, MPFR_RNDN);
        mpfr_set_d(r28179, a, MPFR_RNDN);
        mpfr_set_d(r28180, c, MPFR_RNDN);
        mpfr_mul(r28181, r28179, r28180, MPFR_RNDN);
        mpfr_sub(r28182, r28178, r28181, MPFR_RNDN);
        mpfr_sqrt(r28183, r28182, MPFR_RNDN);
        mpfr_sub(r28184, r28177, r28183, MPFR_RNDN);
        mpfr_div(r28185, r28184, r28179, MPFR_RNDN);
        return mpfr_get_d(r28185, MPFR_RNDN);
}

static mpfr_t r28186, r28187, r28188, r28189, r28190, r28191, r28192, r28193, r28194, r28195, r28196, r28197, r28198, r28199, r28200, r28201, r28202, r28203, r28204, r28205, r28206, r28207, r28208, r28209, r28210, r28211, r28212, r28213, r28214, r28215, r28216, r28217;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2704);
        mpfr_init(r28186);
        mpfr_init_set_str(r28187, "-5.018034098196628e+28", 10, MPFR_RNDN);
        mpfr_init(r28188);
        mpfr_init(r28189);
        mpfr_init(r28190);
        mpfr_init_set_str(r28191, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r28192);
        mpfr_init_set_str(r28193, "-1.992853954034314e-66", 10, MPFR_RNDN);
        mpfr_init(r28194);
        mpfr_init(r28195);
        mpfr_init(r28196);
        mpfr_init(r28197);
        mpfr_init(r28198);
        mpfr_init(r28199);
        mpfr_init(r28200);
        mpfr_init(r28201);
        mpfr_init(r28202);
        mpfr_init(r28203);
        mpfr_init(r28204);
        mpfr_init_set_str(r28205, "-5.3589749776329416e-108", 10, MPFR_RNDN);
        mpfr_init(r28206);
        mpfr_init_set_str(r28207, "1.7007616628281973e+81", 10, MPFR_RNDN);
        mpfr_init(r28208);
        mpfr_init(r28209);
        mpfr_init(r28210);
        mpfr_init_set_str(r28211, "-2", 10, MPFR_RNDN);
        mpfr_init(r28212);
        mpfr_init(r28213);
        mpfr_init(r28214);
        mpfr_init(r28215);
        mpfr_init(r28216);
        mpfr_init(r28217);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r28186, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r28188, mpfr_cmp(r28186, r28187) <= 0, MPFR_RNDN);
        mpfr_set_d(r28189, c, MPFR_RNDN);
        mpfr_div(r28190, r28189, r28186, MPFR_RNDN);
        ;
        mpfr_mul(r28192, r28190, r28191, MPFR_RNDN);
        ;
        mpfr_set_si(r28194, mpfr_cmp(r28186, r28193) <= 0, MPFR_RNDN);
        mpfr_set_d(r28195, a, MPFR_RNDN);
        mpfr_mul(r28196, r28189, r28195, MPFR_RNDN);
        mpfr_neg(r28197, r28186, MPFR_RNDN);
        mpfr_mul(r28198, r28186, r28186, MPFR_RNDN);
        mpfr_mul(r28199, r28195, r28189, MPFR_RNDN);
        mpfr_sub(r28200, r28198, r28199, MPFR_RNDN);
        mpfr_sqrt(r28201, r28200, MPFR_RNDN);
        mpfr_add(r28202, r28197, r28201, MPFR_RNDN);
        mpfr_div(r28203, r28196, r28202, MPFR_RNDN);
        mpfr_div(r28204, r28203, r28195, MPFR_RNDN);
        ;
        mpfr_set_si(r28206, mpfr_cmp(r28186, r28205) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r28208, mpfr_cmp(r28186, r28207) <= 0, MPFR_RNDN);
        mpfr_sub(r28209, r28197, r28201, MPFR_RNDN);
        mpfr_div(r28210, r28209, r28195, MPFR_RNDN);
        ;
        mpfr_div(r28212, r28186, r28195, MPFR_RNDN);
        mpfr_mul(r28213, r28211, r28212, MPFR_RNDN);
        if (mpfr_get_si(r28208, MPFR_RNDN)) { mpfr_set(r28214, r28210, MPFR_RNDN); } else { mpfr_set(r28214, r28213, MPFR_RNDN); };
        if (mpfr_get_si(r28206, MPFR_RNDN)) { mpfr_set(r28215, r28192, MPFR_RNDN); } else { mpfr_set(r28215, r28214, MPFR_RNDN); };
        if (mpfr_get_si(r28194, MPFR_RNDN)) { mpfr_set(r28216, r28204, MPFR_RNDN); } else { mpfr_set(r28216, r28215, MPFR_RNDN); };
        if (mpfr_get_si(r28188, MPFR_RNDN)) { mpfr_set(r28217, r28192, MPFR_RNDN); } else { mpfr_set(r28217, r28216, MPFR_RNDN); };
        return mpfr_get_d(r28217, MPFR_RNDN);
}

static mpfr_t r28218, r28219, r28220, r28221, r28222, r28223, r28224, r28225, r28226, r28227, r28228, r28229, r28230, r28231, r28232, r28233, r28234, r28235, r28236, r28237, r28238, r28239, r28240, r28241, r28242, r28243, r28244, r28245, r28246, r28247, r28248, r28249;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2704);
        mpfr_init(r28218);
        mpfr_init_set_str(r28219, "-5.018034098196628e+28", 10, MPFR_RNDN);
        mpfr_init(r28220);
        mpfr_init(r28221);
        mpfr_init(r28222);
        mpfr_init_set_str(r28223, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r28224);
        mpfr_init_set_str(r28225, "-1.992853954034314e-66", 10, MPFR_RNDN);
        mpfr_init(r28226);
        mpfr_init(r28227);
        mpfr_init(r28228);
        mpfr_init(r28229);
        mpfr_init(r28230);
        mpfr_init(r28231);
        mpfr_init(r28232);
        mpfr_init(r28233);
        mpfr_init(r28234);
        mpfr_init(r28235);
        mpfr_init(r28236);
        mpfr_init_set_str(r28237, "-5.3589749776329416e-108", 10, MPFR_RNDN);
        mpfr_init(r28238);
        mpfr_init_set_str(r28239, "1.7007616628281973e+81", 10, MPFR_RNDN);
        mpfr_init(r28240);
        mpfr_init(r28241);
        mpfr_init(r28242);
        mpfr_init_set_str(r28243, "-2", 10, MPFR_RNDN);
        mpfr_init(r28244);
        mpfr_init(r28245);
        mpfr_init(r28246);
        mpfr_init(r28247);
        mpfr_init(r28248);
        mpfr_init(r28249);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r28218, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r28220, mpfr_cmp(r28218, r28219) <= 0, MPFR_RNDN);
        mpfr_set_d(r28221, c, MPFR_RNDN);
        mpfr_div(r28222, r28221, r28218, MPFR_RNDN);
        ;
        mpfr_mul(r28224, r28222, r28223, MPFR_RNDN);
        ;
        mpfr_set_si(r28226, mpfr_cmp(r28218, r28225) <= 0, MPFR_RNDN);
        mpfr_set_d(r28227, a, MPFR_RNDN);
        mpfr_mul(r28228, r28221, r28227, MPFR_RNDN);
        mpfr_neg(r28229, r28218, MPFR_RNDN);
        mpfr_mul(r28230, r28218, r28218, MPFR_RNDN);
        mpfr_mul(r28231, r28227, r28221, MPFR_RNDN);
        mpfr_sub(r28232, r28230, r28231, MPFR_RNDN);
        mpfr_sqrt(r28233, r28232, MPFR_RNDN);
        mpfr_add(r28234, r28229, r28233, MPFR_RNDN);
        mpfr_div(r28235, r28228, r28234, MPFR_RNDN);
        mpfr_div(r28236, r28235, r28227, MPFR_RNDN);
        ;
        mpfr_set_si(r28238, mpfr_cmp(r28218, r28237) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r28240, mpfr_cmp(r28218, r28239) <= 0, MPFR_RNDN);
        mpfr_sub(r28241, r28229, r28233, MPFR_RNDN);
        mpfr_div(r28242, r28241, r28227, MPFR_RNDN);
        ;
        mpfr_div(r28244, r28218, r28227, MPFR_RNDN);
        mpfr_mul(r28245, r28243, r28244, MPFR_RNDN);
        if (mpfr_get_si(r28240, MPFR_RNDN)) { mpfr_set(r28246, r28242, MPFR_RNDN); } else { mpfr_set(r28246, r28245, MPFR_RNDN); };
        if (mpfr_get_si(r28238, MPFR_RNDN)) { mpfr_set(r28247, r28224, MPFR_RNDN); } else { mpfr_set(r28247, r28246, MPFR_RNDN); };
        if (mpfr_get_si(r28226, MPFR_RNDN)) { mpfr_set(r28248, r28236, MPFR_RNDN); } else { mpfr_set(r28248, r28247, MPFR_RNDN); };
        if (mpfr_get_si(r28220, MPFR_RNDN)) { mpfr_set(r28249, r28224, MPFR_RNDN); } else { mpfr_set(r28249, r28248, MPFR_RNDN); };
        return mpfr_get_d(r28249, MPFR_RNDN);
}

