#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 r4874260 = b_2F2;
        float r4874261 = -r4874260;
        float r4874262 = r4874260 * r4874260;
        float r4874263 = a;
        float r4874264 = c;
        float r4874265 = r4874263 * r4874264;
        float r4874266 = r4874262 - r4874265;
        float r4874267 = sqrt(r4874266);
        float r4874268 = r4874261 - r4874267;
        float r4874269 = r4874268 / r4874263;
        return r4874269;
}

double f_id(double a, double b_2F2, double c) {
        double r4874270 = b_2F2;
        double r4874271 = -r4874270;
        double r4874272 = r4874270 * r4874270;
        double r4874273 = a;
        double r4874274 = c;
        double r4874275 = r4874273 * r4874274;
        double r4874276 = r4874272 - r4874275;
        double r4874277 = sqrt(r4874276);
        double r4874278 = r4874271 - r4874277;
        double r4874279 = r4874278 / r4874273;
        return r4874279;
}


double f_of(float a, float b_2F2, float c) {
        float r4874280 = b_2F2;
        float r4874281 = -1.9038547349802057e-44f;
        bool r4874282 = r4874280 <= r4874281;
        float r4874283 = c;
        float r4874284 = 0.5f;
        float r4874285 = r4874284 * r4874283;
        float r4874286 = a;
        float r4874287 = r4874286 / r4874280;
        float r4874288 = r4874285 * r4874287;
        float r4874289 = -r4874280;
        float r4874290 = r4874280 - r4874289;
        float r4874291 = r4874288 - r4874290;
        float r4874292 = r4874283 / r4874291;
        float r4874293 = 4.585114762073355e+93f;
        bool r4874294 = r4874280 <= r4874293;
        float r4874295 = r4874280 * r4874280;
        float r4874296 = r4874286 * r4874283;
        float r4874297 = r4874295 - r4874296;
        float r4874298 = sqrt(r4874297);
        float r4874299 = r4874289 - r4874298;
        float r4874300 = 1.0f;
        float r4874301 = r4874300 / r4874286;
        float r4874302 = r4874299 * r4874301;
        float r4874303 = -2.0f;
        float r4874304 = r4874280 / r4874286;
        float r4874305 = r4874303 * r4874304;
        float r4874306 = r4874294 ? r4874302 : r4874305;
        float r4874307 = r4874282 ? r4874292 : r4874306;
        return r4874307;
}

double f_od(double a, double b_2F2, double c) {
        double r4874308 = b_2F2;
        double r4874309 = -1.9038547349802057e-44;
        bool r4874310 = r4874308 <= r4874309;
        double r4874311 = c;
        double r4874312 = 0.5;
        double r4874313 = r4874312 * r4874311;
        double r4874314 = a;
        double r4874315 = r4874314 / r4874308;
        double r4874316 = r4874313 * r4874315;
        double r4874317 = -r4874308;
        double r4874318 = r4874308 - r4874317;
        double r4874319 = r4874316 - r4874318;
        double r4874320 = r4874311 / r4874319;
        double r4874321 = 4.585114762073355e+93;
        bool r4874322 = r4874308 <= r4874321;
        double r4874323 = r4874308 * r4874308;
        double r4874324 = r4874314 * r4874311;
        double r4874325 = r4874323 - r4874324;
        double r4874326 = sqrt(r4874325);
        double r4874327 = r4874317 - r4874326;
        double r4874328 = 1.0;
        double r4874329 = r4874328 / r4874314;
        double r4874330 = r4874327 * r4874329;
        double r4874331 = -2.0;
        double r4874332 = r4874308 / r4874314;
        double r4874333 = r4874331 * r4874332;
        double r4874334 = r4874322 ? r4874330 : r4874333;
        double r4874335 = r4874310 ? r4874320 : r4874334;
        return r4874335;
}

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 r4874336, r4874337, r4874338, r4874339, r4874340, r4874341, r4874342, r4874343, r4874344, r4874345;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3216);
        mpfr_init(r4874336);
        mpfr_init(r4874337);
        mpfr_init(r4874338);
        mpfr_init(r4874339);
        mpfr_init(r4874340);
        mpfr_init(r4874341);
        mpfr_init(r4874342);
        mpfr_init(r4874343);
        mpfr_init(r4874344);
        mpfr_init(r4874345);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r4874336, b_2F2, MPFR_RNDN);
        mpfr_neg(r4874337, r4874336, MPFR_RNDN);
        mpfr_mul(r4874338, r4874336, r4874336, MPFR_RNDN);
        mpfr_set_d(r4874339, a, MPFR_RNDN);
        mpfr_set_d(r4874340, c, MPFR_RNDN);
        mpfr_mul(r4874341, r4874339, r4874340, MPFR_RNDN);
        mpfr_sub(r4874342, r4874338, r4874341, MPFR_RNDN);
        mpfr_sqrt(r4874343, r4874342, MPFR_RNDN);
        mpfr_sub(r4874344, r4874337, r4874343, MPFR_RNDN);
        mpfr_div(r4874345, r4874344, r4874339, MPFR_RNDN);
        return mpfr_get_d(r4874345, MPFR_RNDN);
}

static mpfr_t r4874346, r4874347, r4874348, r4874349, r4874350, r4874351, r4874352, r4874353, r4874354, r4874355, r4874356, r4874357, r4874358, r4874359, r4874360, r4874361, r4874362, r4874363, r4874364, r4874365, r4874366, r4874367, r4874368, r4874369, r4874370, r4874371, r4874372, r4874373;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3216);
        mpfr_init(r4874346);
        mpfr_init_set_str(r4874347, "-1.9038547349802057e-44", 10, MPFR_RNDN);
        mpfr_init(r4874348);
        mpfr_init(r4874349);
        mpfr_init_set_str(r4874350, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4874351);
        mpfr_init(r4874352);
        mpfr_init(r4874353);
        mpfr_init(r4874354);
        mpfr_init(r4874355);
        mpfr_init(r4874356);
        mpfr_init(r4874357);
        mpfr_init(r4874358);
        mpfr_init_set_str(r4874359, "4.585114762073355e+93", 10, MPFR_RNDN);
        mpfr_init(r4874360);
        mpfr_init(r4874361);
        mpfr_init(r4874362);
        mpfr_init(r4874363);
        mpfr_init(r4874364);
        mpfr_init(r4874365);
        mpfr_init_set_str(r4874366, "1", 10, MPFR_RNDN);
        mpfr_init(r4874367);
        mpfr_init(r4874368);
        mpfr_init_set_str(r4874369, "-2", 10, MPFR_RNDN);
        mpfr_init(r4874370);
        mpfr_init(r4874371);
        mpfr_init(r4874372);
        mpfr_init(r4874373);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r4874346, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r4874348, mpfr_cmp(r4874346, r4874347) <= 0, MPFR_RNDN);
        mpfr_set_d(r4874349, c, MPFR_RNDN);
        ;
        mpfr_mul(r4874351, r4874350, r4874349, MPFR_RNDN);
        mpfr_set_d(r4874352, a, MPFR_RNDN);
        mpfr_div(r4874353, r4874352, r4874346, MPFR_RNDN);
        mpfr_mul(r4874354, r4874351, r4874353, MPFR_RNDN);
        mpfr_neg(r4874355, r4874346, MPFR_RNDN);
        mpfr_sub(r4874356, r4874346, r4874355, MPFR_RNDN);
        mpfr_sub(r4874357, r4874354, r4874356, MPFR_RNDN);
        mpfr_div(r4874358, r4874349, r4874357, MPFR_RNDN);
        ;
        mpfr_set_si(r4874360, mpfr_cmp(r4874346, r4874359) <= 0, MPFR_RNDN);
        mpfr_mul(r4874361, r4874346, r4874346, MPFR_RNDN);
        mpfr_mul(r4874362, r4874352, r4874349, MPFR_RNDN);
        mpfr_sub(r4874363, r4874361, r4874362, MPFR_RNDN);
        mpfr_sqrt(r4874364, r4874363, MPFR_RNDN);
        mpfr_sub(r4874365, r4874355, r4874364, MPFR_RNDN);
        ;
        mpfr_div(r4874367, r4874366, r4874352, MPFR_RNDN);
        mpfr_mul(r4874368, r4874365, r4874367, MPFR_RNDN);
        ;
        mpfr_div(r4874370, r4874346, r4874352, MPFR_RNDN);
        mpfr_mul(r4874371, r4874369, r4874370, MPFR_RNDN);
        if (mpfr_get_si(r4874360, MPFR_RNDN)) { mpfr_set(r4874372, r4874368, MPFR_RNDN); } else { mpfr_set(r4874372, r4874371, MPFR_RNDN); };
        if (mpfr_get_si(r4874348, MPFR_RNDN)) { mpfr_set(r4874373, r4874358, MPFR_RNDN); } else { mpfr_set(r4874373, r4874372, MPFR_RNDN); };
        return mpfr_get_d(r4874373, MPFR_RNDN);
}

static mpfr_t r4874374, r4874375, r4874376, r4874377, r4874378, r4874379, r4874380, r4874381, r4874382, r4874383, r4874384, r4874385, r4874386, r4874387, r4874388, r4874389, r4874390, r4874391, r4874392, r4874393, r4874394, r4874395, r4874396, r4874397, r4874398, r4874399, r4874400, r4874401;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3216);
        mpfr_init(r4874374);
        mpfr_init_set_str(r4874375, "-1.9038547349802057e-44", 10, MPFR_RNDN);
        mpfr_init(r4874376);
        mpfr_init(r4874377);
        mpfr_init_set_str(r4874378, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4874379);
        mpfr_init(r4874380);
        mpfr_init(r4874381);
        mpfr_init(r4874382);
        mpfr_init(r4874383);
        mpfr_init(r4874384);
        mpfr_init(r4874385);
        mpfr_init(r4874386);
        mpfr_init_set_str(r4874387, "4.585114762073355e+93", 10, MPFR_RNDN);
        mpfr_init(r4874388);
        mpfr_init(r4874389);
        mpfr_init(r4874390);
        mpfr_init(r4874391);
        mpfr_init(r4874392);
        mpfr_init(r4874393);
        mpfr_init_set_str(r4874394, "1", 10, MPFR_RNDN);
        mpfr_init(r4874395);
        mpfr_init(r4874396);
        mpfr_init_set_str(r4874397, "-2", 10, MPFR_RNDN);
        mpfr_init(r4874398);
        mpfr_init(r4874399);
        mpfr_init(r4874400);
        mpfr_init(r4874401);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r4874374, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r4874376, mpfr_cmp(r4874374, r4874375) <= 0, MPFR_RNDN);
        mpfr_set_d(r4874377, c, MPFR_RNDN);
        ;
        mpfr_mul(r4874379, r4874378, r4874377, MPFR_RNDN);
        mpfr_set_d(r4874380, a, MPFR_RNDN);
        mpfr_div(r4874381, r4874380, r4874374, MPFR_RNDN);
        mpfr_mul(r4874382, r4874379, r4874381, MPFR_RNDN);
        mpfr_neg(r4874383, r4874374, MPFR_RNDN);
        mpfr_sub(r4874384, r4874374, r4874383, MPFR_RNDN);
        mpfr_sub(r4874385, r4874382, r4874384, MPFR_RNDN);
        mpfr_div(r4874386, r4874377, r4874385, MPFR_RNDN);
        ;
        mpfr_set_si(r4874388, mpfr_cmp(r4874374, r4874387) <= 0, MPFR_RNDN);
        mpfr_mul(r4874389, r4874374, r4874374, MPFR_RNDN);
        mpfr_mul(r4874390, r4874380, r4874377, MPFR_RNDN);
        mpfr_sub(r4874391, r4874389, r4874390, MPFR_RNDN);
        mpfr_sqrt(r4874392, r4874391, MPFR_RNDN);
        mpfr_sub(r4874393, r4874383, r4874392, MPFR_RNDN);
        ;
        mpfr_div(r4874395, r4874394, r4874380, MPFR_RNDN);
        mpfr_mul(r4874396, r4874393, r4874395, MPFR_RNDN);
        ;
        mpfr_div(r4874398, r4874374, r4874380, MPFR_RNDN);
        mpfr_mul(r4874399, r4874397, r4874398, MPFR_RNDN);
        if (mpfr_get_si(r4874388, MPFR_RNDN)) { mpfr_set(r4874400, r4874396, MPFR_RNDN); } else { mpfr_set(r4874400, r4874399, MPFR_RNDN); };
        if (mpfr_get_si(r4874376, MPFR_RNDN)) { mpfr_set(r4874401, r4874386, MPFR_RNDN); } else { mpfr_set(r4874401, r4874400, MPFR_RNDN); };
        return mpfr_get_d(r4874401, MPFR_RNDN);
}

