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

char *name = "quad2p (problem 3.2.1, positive)";

double f_if(float a, float b_2F2, float c) {
        float r4939207 = b_2F2;
        float r4939208 = -r4939207;
        float r4939209 = r4939207 * r4939207;
        float r4939210 = a;
        float r4939211 = c;
        float r4939212 = r4939210 * r4939211;
        float r4939213 = r4939209 - r4939212;
        float r4939214 = sqrt(r4939213);
        float r4939215 = r4939208 + r4939214;
        float r4939216 = r4939215 / r4939210;
        return r4939216;
}

double f_id(double a, double b_2F2, double c) {
        double r4939217 = b_2F2;
        double r4939218 = -r4939217;
        double r4939219 = r4939217 * r4939217;
        double r4939220 = a;
        double r4939221 = c;
        double r4939222 = r4939220 * r4939221;
        double r4939223 = r4939219 - r4939222;
        double r4939224 = sqrt(r4939223);
        double r4939225 = r4939218 + r4939224;
        double r4939226 = r4939225 / r4939220;
        return r4939226;
}


double f_of(float a, float b_2F2, float c) {
        float r4939227 = b_2F2;
        float r4939228 = -1.6024324632435378e+106f;
        bool r4939229 = r4939227 <= r4939228;
        float r4939230 = -2.0f;
        float r4939231 = a;
        float r4939232 = r4939227 / r4939231;
        float r4939233 = r4939230 * r4939232;
        float r4939234 = 1.0008229413212864e-23f;
        bool r4939235 = r4939227 <= r4939234;
        float r4939236 = -r4939227;
        float r4939237 = r4939227 * r4939227;
        float r4939238 = c;
        float r4939239 = r4939231 * r4939238;
        float r4939240 = r4939237 - r4939239;
        float r4939241 = sqrt(r4939240);
        float r4939242 = r4939236 + r4939241;
        float r4939243 = r4939242 / r4939231;
        float r4939244 = r4939236 - r4939227;
        float r4939245 = 0.5f;
        float r4939246 = r4939238 * r4939245;
        float r4939247 = r4939246 / r4939232;
        float r4939248 = r4939244 + r4939247;
        float r4939249 = r4939238 / r4939248;
        float r4939250 = r4939235 ? r4939243 : r4939249;
        float r4939251 = r4939229 ? r4939233 : r4939250;
        return r4939251;
}

double f_od(double a, double b_2F2, double c) {
        double r4939252 = b_2F2;
        double r4939253 = -1.6024324632435378e+106;
        bool r4939254 = r4939252 <= r4939253;
        double r4939255 = -2.0;
        double r4939256 = a;
        double r4939257 = r4939252 / r4939256;
        double r4939258 = r4939255 * r4939257;
        double r4939259 = 1.0008229413212864e-23;
        bool r4939260 = r4939252 <= r4939259;
        double r4939261 = -r4939252;
        double r4939262 = r4939252 * r4939252;
        double r4939263 = c;
        double r4939264 = r4939256 * r4939263;
        double r4939265 = r4939262 - r4939264;
        double r4939266 = sqrt(r4939265);
        double r4939267 = r4939261 + r4939266;
        double r4939268 = r4939267 / r4939256;
        double r4939269 = r4939261 - r4939252;
        double r4939270 = 0.5;
        double r4939271 = r4939263 * r4939270;
        double r4939272 = r4939271 / r4939257;
        double r4939273 = r4939269 + r4939272;
        double r4939274 = r4939263 / r4939273;
        double r4939275 = r4939260 ? r4939268 : r4939274;
        double r4939276 = r4939254 ? r4939258 : r4939275;
        return r4939276;
}

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 r4939277, r4939278, r4939279, r4939280, r4939281, r4939282, r4939283, r4939284, r4939285, r4939286;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2960);
        mpfr_init(r4939277);
        mpfr_init(r4939278);
        mpfr_init(r4939279);
        mpfr_init(r4939280);
        mpfr_init(r4939281);
        mpfr_init(r4939282);
        mpfr_init(r4939283);
        mpfr_init(r4939284);
        mpfr_init(r4939285);
        mpfr_init(r4939286);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r4939277, b_2F2, MPFR_RNDN);
        mpfr_neg(r4939278, r4939277, MPFR_RNDN);
        mpfr_sqr(r4939279, r4939277, MPFR_RNDN);
        mpfr_set_d(r4939280, a, MPFR_RNDN);
        mpfr_set_d(r4939281, c, MPFR_RNDN);
        mpfr_mul(r4939282, r4939280, r4939281, MPFR_RNDN);
        mpfr_sub(r4939283, r4939279, r4939282, MPFR_RNDN);
        mpfr_sqrt(r4939284, r4939283, MPFR_RNDN);
        mpfr_add(r4939285, r4939278, r4939284, MPFR_RNDN);
        mpfr_div(r4939286, r4939285, r4939280, MPFR_RNDN);
        return mpfr_get_d(r4939286, MPFR_RNDN);
}

static mpfr_t r4939287, r4939288, r4939289, r4939290, r4939291, r4939292, r4939293, r4939294, r4939295, r4939296, r4939297, r4939298, r4939299, r4939300, r4939301, r4939302, r4939303, r4939304, r4939305, r4939306, r4939307, r4939308, r4939309, r4939310, r4939311;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2960);
        mpfr_init(r4939287);
        mpfr_init_set_str(r4939288, "-1.6024324632435378e+106", 10, MPFR_RNDN);
        mpfr_init(r4939289);
        mpfr_init_set_str(r4939290, "-2", 10, MPFR_RNDN);
        mpfr_init(r4939291);
        mpfr_init(r4939292);
        mpfr_init(r4939293);
        mpfr_init_set_str(r4939294, "1.0008229413212864e-23", 10, MPFR_RNDN);
        mpfr_init(r4939295);
        mpfr_init(r4939296);
        mpfr_init(r4939297);
        mpfr_init(r4939298);
        mpfr_init(r4939299);
        mpfr_init(r4939300);
        mpfr_init(r4939301);
        mpfr_init(r4939302);
        mpfr_init(r4939303);
        mpfr_init(r4939304);
        mpfr_init_set_str(r4939305, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4939306);
        mpfr_init(r4939307);
        mpfr_init(r4939308);
        mpfr_init(r4939309);
        mpfr_init(r4939310);
        mpfr_init(r4939311);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r4939287, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r4939289, mpfr_cmp(r4939287, r4939288) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r4939291, a, MPFR_RNDN);
        mpfr_div(r4939292, r4939287, r4939291, MPFR_RNDN);
        mpfr_mul(r4939293, r4939290, r4939292, MPFR_RNDN);
        ;
        mpfr_set_si(r4939295, mpfr_cmp(r4939287, r4939294) <= 0, MPFR_RNDN);
        mpfr_neg(r4939296, r4939287, MPFR_RNDN);
        mpfr_sqr(r4939297, r4939287, MPFR_RNDN);
        mpfr_set_d(r4939298, c, MPFR_RNDN);
        mpfr_mul(r4939299, r4939291, r4939298, MPFR_RNDN);
        mpfr_sub(r4939300, r4939297, r4939299, MPFR_RNDN);
        mpfr_sqrt(r4939301, r4939300, MPFR_RNDN);
        mpfr_add(r4939302, r4939296, r4939301, MPFR_RNDN);
        mpfr_div(r4939303, r4939302, r4939291, MPFR_RNDN);
        mpfr_sub(r4939304, r4939296, r4939287, MPFR_RNDN);
        ;
        mpfr_mul(r4939306, r4939298, r4939305, MPFR_RNDN);
        mpfr_div(r4939307, r4939306, r4939292, MPFR_RNDN);
        mpfr_add(r4939308, r4939304, r4939307, MPFR_RNDN);
        mpfr_div(r4939309, r4939298, r4939308, MPFR_RNDN);
        if (mpfr_get_si(r4939295, MPFR_RNDN)) { mpfr_set(r4939310, r4939303, MPFR_RNDN); } else { mpfr_set(r4939310, r4939309, MPFR_RNDN); };
        if (mpfr_get_si(r4939289, MPFR_RNDN)) { mpfr_set(r4939311, r4939293, MPFR_RNDN); } else { mpfr_set(r4939311, r4939310, MPFR_RNDN); };
        return mpfr_get_d(r4939311, MPFR_RNDN);
}

static mpfr_t r4939312, r4939313, r4939314, r4939315, r4939316, r4939317, r4939318, r4939319, r4939320, r4939321, r4939322, r4939323, r4939324, r4939325, r4939326, r4939327, r4939328, r4939329, r4939330, r4939331, r4939332, r4939333, r4939334, r4939335, r4939336;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2960);
        mpfr_init(r4939312);
        mpfr_init_set_str(r4939313, "-1.6024324632435378e+106", 10, MPFR_RNDN);
        mpfr_init(r4939314);
        mpfr_init_set_str(r4939315, "-2", 10, MPFR_RNDN);
        mpfr_init(r4939316);
        mpfr_init(r4939317);
        mpfr_init(r4939318);
        mpfr_init_set_str(r4939319, "1.0008229413212864e-23", 10, MPFR_RNDN);
        mpfr_init(r4939320);
        mpfr_init(r4939321);
        mpfr_init(r4939322);
        mpfr_init(r4939323);
        mpfr_init(r4939324);
        mpfr_init(r4939325);
        mpfr_init(r4939326);
        mpfr_init(r4939327);
        mpfr_init(r4939328);
        mpfr_init(r4939329);
        mpfr_init_set_str(r4939330, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4939331);
        mpfr_init(r4939332);
        mpfr_init(r4939333);
        mpfr_init(r4939334);
        mpfr_init(r4939335);
        mpfr_init(r4939336);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r4939312, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r4939314, mpfr_cmp(r4939312, r4939313) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r4939316, a, MPFR_RNDN);
        mpfr_div(r4939317, r4939312, r4939316, MPFR_RNDN);
        mpfr_mul(r4939318, r4939315, r4939317, MPFR_RNDN);
        ;
        mpfr_set_si(r4939320, mpfr_cmp(r4939312, r4939319) <= 0, MPFR_RNDN);
        mpfr_neg(r4939321, r4939312, MPFR_RNDN);
        mpfr_sqr(r4939322, r4939312, MPFR_RNDN);
        mpfr_set_d(r4939323, c, MPFR_RNDN);
        mpfr_mul(r4939324, r4939316, r4939323, MPFR_RNDN);
        mpfr_sub(r4939325, r4939322, r4939324, MPFR_RNDN);
        mpfr_sqrt(r4939326, r4939325, MPFR_RNDN);
        mpfr_add(r4939327, r4939321, r4939326, MPFR_RNDN);
        mpfr_div(r4939328, r4939327, r4939316, MPFR_RNDN);
        mpfr_sub(r4939329, r4939321, r4939312, MPFR_RNDN);
        ;
        mpfr_mul(r4939331, r4939323, r4939330, MPFR_RNDN);
        mpfr_div(r4939332, r4939331, r4939317, MPFR_RNDN);
        mpfr_add(r4939333, r4939329, r4939332, MPFR_RNDN);
        mpfr_div(r4939334, r4939323, r4939333, MPFR_RNDN);
        if (mpfr_get_si(r4939320, MPFR_RNDN)) { mpfr_set(r4939335, r4939328, MPFR_RNDN); } else { mpfr_set(r4939335, r4939334, MPFR_RNDN); };
        if (mpfr_get_si(r4939314, MPFR_RNDN)) { mpfr_set(r4939336, r4939318, MPFR_RNDN); } else { mpfr_set(r4939336, r4939335, MPFR_RNDN); };
        return mpfr_get_d(r4939336, MPFR_RNDN);
}

