#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 r11870223 = b_2F2;
        float r11870224 = -r11870223;
        float r11870225 = r11870223 * r11870223;
        float r11870226 = a;
        float r11870227 = c;
        float r11870228 = r11870226 * r11870227;
        float r11870229 = r11870225 - r11870228;
        float r11870230 = sqrt(r11870229);
        float r11870231 = r11870224 - r11870230;
        float r11870232 = r11870231 / r11870226;
        return r11870232;
}

double f_id(double a, double b_2F2, double c) {
        double r11870233 = b_2F2;
        double r11870234 = -r11870233;
        double r11870235 = r11870233 * r11870233;
        double r11870236 = a;
        double r11870237 = c;
        double r11870238 = r11870236 * r11870237;
        double r11870239 = r11870235 - r11870238;
        double r11870240 = sqrt(r11870239);
        double r11870241 = r11870234 - r11870240;
        double r11870242 = r11870241 / r11870236;
        return r11870242;
}


double f_of(float a, float b_2F2, float c) {
        float r11870243 = b_2F2;
        float r11870244 = -4.6941600597114376e-46;
        bool r11870245 = r11870243 <= r11870244;
        float r11870246 = c;
        float r11870247 = 1/2;
        float r11870248 = r11870247 * r11870246;
        float r11870249 = a;
        float r11870250 = r11870249 / r11870243;
        float r11870251 = r11870248 * r11870250;
        float r11870252 = -r11870243;
        float r11870253 = r11870243 - r11870252;
        float r11870254 = r11870251 - r11870253;
        float r11870255 = r11870246 / r11870254;
        float r11870256 = -1.471421186450741e-229;
        bool r11870257 = r11870243 <= r11870256;
        float r11870258 = r11870246 * r11870249;
        float r11870259 = r11870243 * r11870243;
        float r11870260 = r11870249 * r11870246;
        float r11870261 = r11870259 - r11870260;
        float r11870262 = sqrt(r11870261);
        float r11870263 = r11870252 + r11870262;
        float r11870264 = r11870258 / r11870263;
        float r11870265 = r11870264 / r11870249;
        float r11870266 = 9.143709936025211e+73;
        bool r11870267 = r11870243 <= r11870266;
        float r11870268 = r11870252 - r11870262;
        float r11870269 = 1;
        float r11870270 = r11870269 / r11870249;
        float r11870271 = r11870268 * r11870270;
        float r11870272 = -2;
        float r11870273 = r11870243 / r11870249;
        float r11870274 = r11870272 * r11870273;
        float r11870275 = r11870267 ? r11870271 : r11870274;
        float r11870276 = r11870257 ? r11870265 : r11870275;
        float r11870277 = r11870245 ? r11870255 : r11870276;
        return r11870277;
}

double f_od(double a, double b_2F2, double c) {
        double r11870278 = b_2F2;
        double r11870279 = -4.6941600597114376e-46;
        bool r11870280 = r11870278 <= r11870279;
        double r11870281 = c;
        double r11870282 = 1/2;
        double r11870283 = r11870282 * r11870281;
        double r11870284 = a;
        double r11870285 = r11870284 / r11870278;
        double r11870286 = r11870283 * r11870285;
        double r11870287 = -r11870278;
        double r11870288 = r11870278 - r11870287;
        double r11870289 = r11870286 - r11870288;
        double r11870290 = r11870281 / r11870289;
        double r11870291 = -1.471421186450741e-229;
        bool r11870292 = r11870278 <= r11870291;
        double r11870293 = r11870281 * r11870284;
        double r11870294 = r11870278 * r11870278;
        double r11870295 = r11870284 * r11870281;
        double r11870296 = r11870294 - r11870295;
        double r11870297 = sqrt(r11870296);
        double r11870298 = r11870287 + r11870297;
        double r11870299 = r11870293 / r11870298;
        double r11870300 = r11870299 / r11870284;
        double r11870301 = 9.143709936025211e+73;
        bool r11870302 = r11870278 <= r11870301;
        double r11870303 = r11870287 - r11870297;
        double r11870304 = 1;
        double r11870305 = r11870304 / r11870284;
        double r11870306 = r11870303 * r11870305;
        double r11870307 = -2;
        double r11870308 = r11870278 / r11870284;
        double r11870309 = r11870307 * r11870308;
        double r11870310 = r11870302 ? r11870306 : r11870309;
        double r11870311 = r11870292 ? r11870300 : r11870310;
        double r11870312 = r11870280 ? r11870290 : r11870311;
        return r11870312;
}

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 r11870313, r11870314, r11870315, r11870316, r11870317, r11870318, r11870319, r11870320, r11870321, r11870322;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3472);
        mpfr_init(r11870313);
        mpfr_init(r11870314);
        mpfr_init(r11870315);
        mpfr_init(r11870316);
        mpfr_init(r11870317);
        mpfr_init(r11870318);
        mpfr_init(r11870319);
        mpfr_init(r11870320);
        mpfr_init(r11870321);
        mpfr_init(r11870322);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r11870313, b_2F2, MPFR_RNDN);
        mpfr_neg(r11870314, r11870313, MPFR_RNDN);
        mpfr_mul(r11870315, r11870313, r11870313, MPFR_RNDN);
        mpfr_set_d(r11870316, a, MPFR_RNDN);
        mpfr_set_d(r11870317, c, MPFR_RNDN);
        mpfr_mul(r11870318, r11870316, r11870317, MPFR_RNDN);
        mpfr_sub(r11870319, r11870315, r11870318, MPFR_RNDN);
        mpfr_sqrt(r11870320, r11870319, MPFR_RNDN);
        mpfr_sub(r11870321, r11870314, r11870320, MPFR_RNDN);
        mpfr_div(r11870322, r11870321, r11870316, MPFR_RNDN);
        return mpfr_get_d(r11870322, MPFR_RNDN);
}

static mpfr_t r11870323, r11870324, r11870325, r11870326, r11870327, r11870328, r11870329, r11870330, r11870331, r11870332, r11870333, r11870334, r11870335, r11870336, r11870337, r11870338, r11870339, r11870340, r11870341, r11870342, r11870343, r11870344, r11870345, r11870346, r11870347, r11870348, r11870349, r11870350, r11870351, r11870352, r11870353, r11870354, r11870355, r11870356, r11870357;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3472);
        mpfr_init(r11870323);
        mpfr_init_set_str(r11870324, "-4.6941600597114376e-46", 10, MPFR_RNDN);
        mpfr_init(r11870325);
        mpfr_init(r11870326);
        mpfr_init_set_str(r11870327, "1/2", 10, MPFR_RNDN);
        mpfr_init(r11870328);
        mpfr_init(r11870329);
        mpfr_init(r11870330);
        mpfr_init(r11870331);
        mpfr_init(r11870332);
        mpfr_init(r11870333);
        mpfr_init(r11870334);
        mpfr_init(r11870335);
        mpfr_init_set_str(r11870336, "-1.471421186450741e-229", 10, MPFR_RNDN);
        mpfr_init(r11870337);
        mpfr_init(r11870338);
        mpfr_init(r11870339);
        mpfr_init(r11870340);
        mpfr_init(r11870341);
        mpfr_init(r11870342);
        mpfr_init(r11870343);
        mpfr_init(r11870344);
        mpfr_init(r11870345);
        mpfr_init_set_str(r11870346, "9.143709936025211e+73", 10, MPFR_RNDN);
        mpfr_init(r11870347);
        mpfr_init(r11870348);
        mpfr_init_set_str(r11870349, "1", 10, MPFR_RNDN);
        mpfr_init(r11870350);
        mpfr_init(r11870351);
        mpfr_init_set_str(r11870352, "-2", 10, MPFR_RNDN);
        mpfr_init(r11870353);
        mpfr_init(r11870354);
        mpfr_init(r11870355);
        mpfr_init(r11870356);
        mpfr_init(r11870357);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r11870323, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r11870325, mpfr_cmp(r11870323, r11870324) <= 0, MPFR_RNDN);
        mpfr_set_d(r11870326, c, MPFR_RNDN);
        ;
        mpfr_mul(r11870328, r11870327, r11870326, MPFR_RNDN);
        mpfr_set_d(r11870329, a, MPFR_RNDN);
        mpfr_div(r11870330, r11870329, r11870323, MPFR_RNDN);
        mpfr_mul(r11870331, r11870328, r11870330, MPFR_RNDN);
        mpfr_neg(r11870332, r11870323, MPFR_RNDN);
        mpfr_sub(r11870333, r11870323, r11870332, MPFR_RNDN);
        mpfr_sub(r11870334, r11870331, r11870333, MPFR_RNDN);
        mpfr_div(r11870335, r11870326, r11870334, MPFR_RNDN);
        ;
        mpfr_set_si(r11870337, mpfr_cmp(r11870323, r11870336) <= 0, MPFR_RNDN);
        mpfr_mul(r11870338, r11870326, r11870329, MPFR_RNDN);
        mpfr_mul(r11870339, r11870323, r11870323, MPFR_RNDN);
        mpfr_mul(r11870340, r11870329, r11870326, MPFR_RNDN);
        mpfr_sub(r11870341, r11870339, r11870340, MPFR_RNDN);
        mpfr_sqrt(r11870342, r11870341, MPFR_RNDN);
        mpfr_add(r11870343, r11870332, r11870342, MPFR_RNDN);
        mpfr_div(r11870344, r11870338, r11870343, MPFR_RNDN);
        mpfr_div(r11870345, r11870344, r11870329, MPFR_RNDN);
        ;
        mpfr_set_si(r11870347, mpfr_cmp(r11870323, r11870346) <= 0, MPFR_RNDN);
        mpfr_sub(r11870348, r11870332, r11870342, MPFR_RNDN);
        ;
        mpfr_div(r11870350, r11870349, r11870329, MPFR_RNDN);
        mpfr_mul(r11870351, r11870348, r11870350, MPFR_RNDN);
        ;
        mpfr_div(r11870353, r11870323, r11870329, MPFR_RNDN);
        mpfr_mul(r11870354, r11870352, r11870353, MPFR_RNDN);
        if (mpfr_get_si(r11870347, MPFR_RNDN)) { mpfr_set(r11870355, r11870351, MPFR_RNDN); } else { mpfr_set(r11870355, r11870354, MPFR_RNDN); };
        if (mpfr_get_si(r11870337, MPFR_RNDN)) { mpfr_set(r11870356, r11870345, MPFR_RNDN); } else { mpfr_set(r11870356, r11870355, MPFR_RNDN); };
        if (mpfr_get_si(r11870325, MPFR_RNDN)) { mpfr_set(r11870357, r11870335, MPFR_RNDN); } else { mpfr_set(r11870357, r11870356, MPFR_RNDN); };
        return mpfr_get_d(r11870357, MPFR_RNDN);
}

static mpfr_t r11870358, r11870359, r11870360, r11870361, r11870362, r11870363, r11870364, r11870365, r11870366, r11870367, r11870368, r11870369, r11870370, r11870371, r11870372, r11870373, r11870374, r11870375, r11870376, r11870377, r11870378, r11870379, r11870380, r11870381, r11870382, r11870383, r11870384, r11870385, r11870386, r11870387, r11870388, r11870389, r11870390, r11870391, r11870392;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3472);
        mpfr_init(r11870358);
        mpfr_init_set_str(r11870359, "-4.6941600597114376e-46", 10, MPFR_RNDN);
        mpfr_init(r11870360);
        mpfr_init(r11870361);
        mpfr_init_set_str(r11870362, "1/2", 10, MPFR_RNDN);
        mpfr_init(r11870363);
        mpfr_init(r11870364);
        mpfr_init(r11870365);
        mpfr_init(r11870366);
        mpfr_init(r11870367);
        mpfr_init(r11870368);
        mpfr_init(r11870369);
        mpfr_init(r11870370);
        mpfr_init_set_str(r11870371, "-1.471421186450741e-229", 10, MPFR_RNDN);
        mpfr_init(r11870372);
        mpfr_init(r11870373);
        mpfr_init(r11870374);
        mpfr_init(r11870375);
        mpfr_init(r11870376);
        mpfr_init(r11870377);
        mpfr_init(r11870378);
        mpfr_init(r11870379);
        mpfr_init(r11870380);
        mpfr_init_set_str(r11870381, "9.143709936025211e+73", 10, MPFR_RNDN);
        mpfr_init(r11870382);
        mpfr_init(r11870383);
        mpfr_init_set_str(r11870384, "1", 10, MPFR_RNDN);
        mpfr_init(r11870385);
        mpfr_init(r11870386);
        mpfr_init_set_str(r11870387, "-2", 10, MPFR_RNDN);
        mpfr_init(r11870388);
        mpfr_init(r11870389);
        mpfr_init(r11870390);
        mpfr_init(r11870391);
        mpfr_init(r11870392);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r11870358, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r11870360, mpfr_cmp(r11870358, r11870359) <= 0, MPFR_RNDN);
        mpfr_set_d(r11870361, c, MPFR_RNDN);
        ;
        mpfr_mul(r11870363, r11870362, r11870361, MPFR_RNDN);
        mpfr_set_d(r11870364, a, MPFR_RNDN);
        mpfr_div(r11870365, r11870364, r11870358, MPFR_RNDN);
        mpfr_mul(r11870366, r11870363, r11870365, MPFR_RNDN);
        mpfr_neg(r11870367, r11870358, MPFR_RNDN);
        mpfr_sub(r11870368, r11870358, r11870367, MPFR_RNDN);
        mpfr_sub(r11870369, r11870366, r11870368, MPFR_RNDN);
        mpfr_div(r11870370, r11870361, r11870369, MPFR_RNDN);
        ;
        mpfr_set_si(r11870372, mpfr_cmp(r11870358, r11870371) <= 0, MPFR_RNDN);
        mpfr_mul(r11870373, r11870361, r11870364, MPFR_RNDN);
        mpfr_mul(r11870374, r11870358, r11870358, MPFR_RNDN);
        mpfr_mul(r11870375, r11870364, r11870361, MPFR_RNDN);
        mpfr_sub(r11870376, r11870374, r11870375, MPFR_RNDN);
        mpfr_sqrt(r11870377, r11870376, MPFR_RNDN);
        mpfr_add(r11870378, r11870367, r11870377, MPFR_RNDN);
        mpfr_div(r11870379, r11870373, r11870378, MPFR_RNDN);
        mpfr_div(r11870380, r11870379, r11870364, MPFR_RNDN);
        ;
        mpfr_set_si(r11870382, mpfr_cmp(r11870358, r11870381) <= 0, MPFR_RNDN);
        mpfr_sub(r11870383, r11870367, r11870377, MPFR_RNDN);
        ;
        mpfr_div(r11870385, r11870384, r11870364, MPFR_RNDN);
        mpfr_mul(r11870386, r11870383, r11870385, MPFR_RNDN);
        ;
        mpfr_div(r11870388, r11870358, r11870364, MPFR_RNDN);
        mpfr_mul(r11870389, r11870387, r11870388, MPFR_RNDN);
        if (mpfr_get_si(r11870382, MPFR_RNDN)) { mpfr_set(r11870390, r11870386, MPFR_RNDN); } else { mpfr_set(r11870390, r11870389, MPFR_RNDN); };
        if (mpfr_get_si(r11870372, MPFR_RNDN)) { mpfr_set(r11870391, r11870380, MPFR_RNDN); } else { mpfr_set(r11870391, r11870390, MPFR_RNDN); };
        if (mpfr_get_si(r11870360, MPFR_RNDN)) { mpfr_set(r11870392, r11870370, MPFR_RNDN); } else { mpfr_set(r11870392, r11870391, MPFR_RNDN); };
        return mpfr_get_d(r11870392, MPFR_RNDN);
}

