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

char *name = "quad2m (problem 3.2.1, negative)";

double f_if(float a, float b_2F2, float c) {
        float r5180142 = b_2F2;
        float r5180143 = -r5180142;
        float r5180144 = r5180142 * r5180142;
        float r5180145 = a;
        float r5180146 = c;
        float r5180147 = r5180145 * r5180146;
        float r5180148 = r5180144 - r5180147;
        float r5180149 = sqrt(r5180148);
        float r5180150 = r5180143 - r5180149;
        float r5180151 = r5180150 / r5180145;
        return r5180151;
}

double f_id(double a, double b_2F2, double c) {
        double r5180152 = b_2F2;
        double r5180153 = -r5180152;
        double r5180154 = r5180152 * r5180152;
        double r5180155 = a;
        double r5180156 = c;
        double r5180157 = r5180155 * r5180156;
        double r5180158 = r5180154 - r5180157;
        double r5180159 = sqrt(r5180158);
        double r5180160 = r5180153 - r5180159;
        double r5180161 = r5180160 / r5180155;
        return r5180161;
}


double f_of(float a, float b_2F2, float c) {
        float r5180162 = b_2F2;
        float r5180163 = -2.562534304360214e+50f;
        bool r5180164 = r5180162 <= r5180163;
        float r5180165 = c;
        float r5180166 = 0.5f;
        float r5180167 = r5180165 * r5180166;
        float r5180168 = a;
        float r5180169 = r5180162 / r5180168;
        float r5180170 = r5180167 / r5180169;
        float r5180171 = -r5180162;
        float r5180172 = r5180162 - r5180171;
        float r5180173 = r5180170 - r5180172;
        float r5180174 = r5180165 / r5180173;
        float r5180175 = 3.5868674500127266e-299f;
        bool r5180176 = r5180162 <= r5180175;
        float r5180177 = 1.0f;
        float r5180178 = r5180168 / r5180177;
        float r5180179 = r5180162 * r5180162;
        float r5180180 = r5180168 * r5180165;
        float r5180181 = r5180179 - r5180180;
        float r5180182 = sqrt(r5180181);
        float r5180183 = r5180171 + r5180182;
        float r5180184 = r5180165 / r5180183;
        float r5180185 = r5180178 * r5180184;
        float r5180186 = r5180185 / r5180168;
        float r5180187 = 1.5428617303718363e+108f;
        bool r5180188 = r5180162 <= r5180187;
        float r5180189 = r5180171 - r5180182;
        float r5180190 = r5180168 / r5180189;
        float r5180191 = r5180177 / r5180190;
        float r5180192 = -2.0f;
        float r5180193 = r5180192 * r5180169;
        float r5180194 = r5180188 ? r5180191 : r5180193;
        float r5180195 = r5180176 ? r5180186 : r5180194;
        float r5180196 = r5180164 ? r5180174 : r5180195;
        return r5180196;
}

double f_od(double a, double b_2F2, double c) {
        double r5180197 = b_2F2;
        double r5180198 = -2.562534304360214e+50;
        bool r5180199 = r5180197 <= r5180198;
        double r5180200 = c;
        double r5180201 = 0.5;
        double r5180202 = r5180200 * r5180201;
        double r5180203 = a;
        double r5180204 = r5180197 / r5180203;
        double r5180205 = r5180202 / r5180204;
        double r5180206 = -r5180197;
        double r5180207 = r5180197 - r5180206;
        double r5180208 = r5180205 - r5180207;
        double r5180209 = r5180200 / r5180208;
        double r5180210 = 3.5868674500127266e-299;
        bool r5180211 = r5180197 <= r5180210;
        double r5180212 = 1.0;
        double r5180213 = r5180203 / r5180212;
        double r5180214 = r5180197 * r5180197;
        double r5180215 = r5180203 * r5180200;
        double r5180216 = r5180214 - r5180215;
        double r5180217 = sqrt(r5180216);
        double r5180218 = r5180206 + r5180217;
        double r5180219 = r5180200 / r5180218;
        double r5180220 = r5180213 * r5180219;
        double r5180221 = r5180220 / r5180203;
        double r5180222 = 1.5428617303718363e+108;
        bool r5180223 = r5180197 <= r5180222;
        double r5180224 = r5180206 - r5180217;
        double r5180225 = r5180203 / r5180224;
        double r5180226 = r5180212 / r5180225;
        double r5180227 = -2.0;
        double r5180228 = r5180227 * r5180204;
        double r5180229 = r5180223 ? r5180226 : r5180228;
        double r5180230 = r5180211 ? r5180221 : r5180229;
        double r5180231 = r5180199 ? r5180209 : r5180230;
        return r5180231;
}

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 r5180232, r5180233, r5180234, r5180235, r5180236, r5180237, r5180238, r5180239, r5180240, r5180241;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2960);
        mpfr_init(r5180232);
        mpfr_init(r5180233);
        mpfr_init(r5180234);
        mpfr_init(r5180235);
        mpfr_init(r5180236);
        mpfr_init(r5180237);
        mpfr_init(r5180238);
        mpfr_init(r5180239);
        mpfr_init(r5180240);
        mpfr_init(r5180241);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r5180232, b_2F2, MPFR_RNDN);
        mpfr_neg(r5180233, r5180232, MPFR_RNDN);
        mpfr_sqr(r5180234, r5180232, MPFR_RNDN);
        mpfr_set_d(r5180235, a, MPFR_RNDN);
        mpfr_set_d(r5180236, c, MPFR_RNDN);
        mpfr_mul(r5180237, r5180235, r5180236, MPFR_RNDN);
        mpfr_sub(r5180238, r5180234, r5180237, MPFR_RNDN);
        mpfr_sqrt(r5180239, r5180238, MPFR_RNDN);
        mpfr_sub(r5180240, r5180233, r5180239, MPFR_RNDN);
        mpfr_div(r5180241, r5180240, r5180235, MPFR_RNDN);
        return mpfr_get_d(r5180241, MPFR_RNDN);
}

static mpfr_t r5180242, r5180243, r5180244, r5180245, r5180246, r5180247, r5180248, r5180249, r5180250, r5180251, r5180252, r5180253, r5180254, r5180255, r5180256, r5180257, r5180258, r5180259, r5180260, r5180261, r5180262, r5180263, r5180264, r5180265, r5180266, r5180267, r5180268, r5180269, r5180270, r5180271, r5180272, r5180273, r5180274, r5180275, r5180276;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2960);
        mpfr_init(r5180242);
        mpfr_init_set_str(r5180243, "-2.562534304360214e+50", 10, MPFR_RNDN);
        mpfr_init(r5180244);
        mpfr_init(r5180245);
        mpfr_init_set_str(r5180246, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5180247);
        mpfr_init(r5180248);
        mpfr_init(r5180249);
        mpfr_init(r5180250);
        mpfr_init(r5180251);
        mpfr_init(r5180252);
        mpfr_init(r5180253);
        mpfr_init(r5180254);
        mpfr_init_set_str(r5180255, "3.5868674500127266e-299", 10, MPFR_RNDN);
        mpfr_init(r5180256);
        mpfr_init_set_str(r5180257, "1", 10, MPFR_RNDN);
        mpfr_init(r5180258);
        mpfr_init(r5180259);
        mpfr_init(r5180260);
        mpfr_init(r5180261);
        mpfr_init(r5180262);
        mpfr_init(r5180263);
        mpfr_init(r5180264);
        mpfr_init(r5180265);
        mpfr_init(r5180266);
        mpfr_init_set_str(r5180267, "1.5428617303718363e+108", 10, MPFR_RNDN);
        mpfr_init(r5180268);
        mpfr_init(r5180269);
        mpfr_init(r5180270);
        mpfr_init(r5180271);
        mpfr_init_set_str(r5180272, "-2", 10, MPFR_RNDN);
        mpfr_init(r5180273);
        mpfr_init(r5180274);
        mpfr_init(r5180275);
        mpfr_init(r5180276);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r5180242, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r5180244, mpfr_cmp(r5180242, r5180243) <= 0, MPFR_RNDN);
        mpfr_set_d(r5180245, c, MPFR_RNDN);
        ;
        mpfr_mul(r5180247, r5180245, r5180246, MPFR_RNDN);
        mpfr_set_d(r5180248, a, MPFR_RNDN);
        mpfr_div(r5180249, r5180242, r5180248, MPFR_RNDN);
        mpfr_div(r5180250, r5180247, r5180249, MPFR_RNDN);
        mpfr_neg(r5180251, r5180242, MPFR_RNDN);
        mpfr_sub(r5180252, r5180242, r5180251, MPFR_RNDN);
        mpfr_sub(r5180253, r5180250, r5180252, MPFR_RNDN);
        mpfr_div(r5180254, r5180245, r5180253, MPFR_RNDN);
        ;
        mpfr_set_si(r5180256, mpfr_cmp(r5180242, r5180255) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r5180258, r5180248, r5180257, MPFR_RNDN);
        mpfr_sqr(r5180259, r5180242, MPFR_RNDN);
        mpfr_mul(r5180260, r5180248, r5180245, MPFR_RNDN);
        mpfr_sub(r5180261, r5180259, r5180260, MPFR_RNDN);
        mpfr_sqrt(r5180262, r5180261, MPFR_RNDN);
        mpfr_add(r5180263, r5180251, r5180262, MPFR_RNDN);
        mpfr_div(r5180264, r5180245, r5180263, MPFR_RNDN);
        mpfr_mul(r5180265, r5180258, r5180264, MPFR_RNDN);
        mpfr_div(r5180266, r5180265, r5180248, MPFR_RNDN);
        ;
        mpfr_set_si(r5180268, mpfr_cmp(r5180242, r5180267) <= 0, MPFR_RNDN);
        mpfr_sub(r5180269, r5180251, r5180262, MPFR_RNDN);
        mpfr_div(r5180270, r5180248, r5180269, MPFR_RNDN);
        mpfr_div(r5180271, r5180257, r5180270, MPFR_RNDN);
        ;
        mpfr_mul(r5180273, r5180272, r5180249, MPFR_RNDN);
        if (mpfr_get_si(r5180268, MPFR_RNDN)) { mpfr_set(r5180274, r5180271, MPFR_RNDN); } else { mpfr_set(r5180274, r5180273, MPFR_RNDN); };
        if (mpfr_get_si(r5180256, MPFR_RNDN)) { mpfr_set(r5180275, r5180266, MPFR_RNDN); } else { mpfr_set(r5180275, r5180274, MPFR_RNDN); };
        if (mpfr_get_si(r5180244, MPFR_RNDN)) { mpfr_set(r5180276, r5180254, MPFR_RNDN); } else { mpfr_set(r5180276, r5180275, MPFR_RNDN); };
        return mpfr_get_d(r5180276, MPFR_RNDN);
}

static mpfr_t r5180277, r5180278, r5180279, r5180280, r5180281, r5180282, r5180283, r5180284, r5180285, r5180286, r5180287, r5180288, r5180289, r5180290, r5180291, r5180292, r5180293, r5180294, r5180295, r5180296, r5180297, r5180298, r5180299, r5180300, r5180301, r5180302, r5180303, r5180304, r5180305, r5180306, r5180307, r5180308, r5180309, r5180310, r5180311;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2960);
        mpfr_init(r5180277);
        mpfr_init_set_str(r5180278, "-2.562534304360214e+50", 10, MPFR_RNDN);
        mpfr_init(r5180279);
        mpfr_init(r5180280);
        mpfr_init_set_str(r5180281, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5180282);
        mpfr_init(r5180283);
        mpfr_init(r5180284);
        mpfr_init(r5180285);
        mpfr_init(r5180286);
        mpfr_init(r5180287);
        mpfr_init(r5180288);
        mpfr_init(r5180289);
        mpfr_init_set_str(r5180290, "3.5868674500127266e-299", 10, MPFR_RNDN);
        mpfr_init(r5180291);
        mpfr_init_set_str(r5180292, "1", 10, MPFR_RNDN);
        mpfr_init(r5180293);
        mpfr_init(r5180294);
        mpfr_init(r5180295);
        mpfr_init(r5180296);
        mpfr_init(r5180297);
        mpfr_init(r5180298);
        mpfr_init(r5180299);
        mpfr_init(r5180300);
        mpfr_init(r5180301);
        mpfr_init_set_str(r5180302, "1.5428617303718363e+108", 10, MPFR_RNDN);
        mpfr_init(r5180303);
        mpfr_init(r5180304);
        mpfr_init(r5180305);
        mpfr_init(r5180306);
        mpfr_init_set_str(r5180307, "-2", 10, MPFR_RNDN);
        mpfr_init(r5180308);
        mpfr_init(r5180309);
        mpfr_init(r5180310);
        mpfr_init(r5180311);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r5180277, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r5180279, mpfr_cmp(r5180277, r5180278) <= 0, MPFR_RNDN);
        mpfr_set_d(r5180280, c, MPFR_RNDN);
        ;
        mpfr_mul(r5180282, r5180280, r5180281, MPFR_RNDN);
        mpfr_set_d(r5180283, a, MPFR_RNDN);
        mpfr_div(r5180284, r5180277, r5180283, MPFR_RNDN);
        mpfr_div(r5180285, r5180282, r5180284, MPFR_RNDN);
        mpfr_neg(r5180286, r5180277, MPFR_RNDN);
        mpfr_sub(r5180287, r5180277, r5180286, MPFR_RNDN);
        mpfr_sub(r5180288, r5180285, r5180287, MPFR_RNDN);
        mpfr_div(r5180289, r5180280, r5180288, MPFR_RNDN);
        ;
        mpfr_set_si(r5180291, mpfr_cmp(r5180277, r5180290) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r5180293, r5180283, r5180292, MPFR_RNDN);
        mpfr_sqr(r5180294, r5180277, MPFR_RNDN);
        mpfr_mul(r5180295, r5180283, r5180280, MPFR_RNDN);
        mpfr_sub(r5180296, r5180294, r5180295, MPFR_RNDN);
        mpfr_sqrt(r5180297, r5180296, MPFR_RNDN);
        mpfr_add(r5180298, r5180286, r5180297, MPFR_RNDN);
        mpfr_div(r5180299, r5180280, r5180298, MPFR_RNDN);
        mpfr_mul(r5180300, r5180293, r5180299, MPFR_RNDN);
        mpfr_div(r5180301, r5180300, r5180283, MPFR_RNDN);
        ;
        mpfr_set_si(r5180303, mpfr_cmp(r5180277, r5180302) <= 0, MPFR_RNDN);
        mpfr_sub(r5180304, r5180286, r5180297, MPFR_RNDN);
        mpfr_div(r5180305, r5180283, r5180304, MPFR_RNDN);
        mpfr_div(r5180306, r5180292, r5180305, MPFR_RNDN);
        ;
        mpfr_mul(r5180308, r5180307, r5180284, MPFR_RNDN);
        if (mpfr_get_si(r5180303, MPFR_RNDN)) { mpfr_set(r5180309, r5180306, MPFR_RNDN); } else { mpfr_set(r5180309, r5180308, MPFR_RNDN); };
        if (mpfr_get_si(r5180291, MPFR_RNDN)) { mpfr_set(r5180310, r5180301, MPFR_RNDN); } else { mpfr_set(r5180310, r5180309, MPFR_RNDN); };
        if (mpfr_get_si(r5180279, MPFR_RNDN)) { mpfr_set(r5180311, r5180289, MPFR_RNDN); } else { mpfr_set(r5180311, r5180310, MPFR_RNDN); };
        return mpfr_get_d(r5180311, MPFR_RNDN);
}

