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

char *name = "2-ancestry mixing, positive discriminant";

double f_if(float g, float h, float a) {
        float r27250 = 1;
        float r27251 = 2;
        float r27252 = a;
        float r27253 = r27251 * r27252;
        float r27254 = r27250 / r27253;
        float r27255 = g;
        float r27256 = -r27255;
        float r27257 = r27255 * r27255;
        float r27258 = h;
        float r27259 = r27258 * r27258;
        float r27260 = r27257 - r27259;
        float r27261 = sqrt(r27260);
        float r27262 = r27256 + r27261;
        float r27263 = r27254 * r27262;
        float r27264 = cbrt(r27263);
        float r27265 = r27256 - r27261;
        float r27266 = r27254 * r27265;
        float r27267 = cbrt(r27266);
        float r27268 = r27264 + r27267;
        return r27268;
}

double f_id(double g, double h, double a) {
        double r27269 = 1;
        double r27270 = 2;
        double r27271 = a;
        double r27272 = r27270 * r27271;
        double r27273 = r27269 / r27272;
        double r27274 = g;
        double r27275 = -r27274;
        double r27276 = r27274 * r27274;
        double r27277 = h;
        double r27278 = r27277 * r27277;
        double r27279 = r27276 - r27278;
        double r27280 = sqrt(r27279);
        double r27281 = r27275 + r27280;
        double r27282 = r27273 * r27281;
        double r27283 = cbrt(r27282);
        double r27284 = r27275 - r27280;
        double r27285 = r27273 * r27284;
        double r27286 = cbrt(r27285);
        double r27287 = r27283 + r27286;
        return r27287;
}


double f_of(float g, float h, float a) {
        float r27288 = g;
        float r27289 = -2.4565349121758458e-222;
        bool r27290 = r27288 <= r27289;
        float r27291 = 1;
        float r27292 = 2;
        float r27293 = a;
        float r27294 = r27292 * r27293;
        float r27295 = r27291 / r27294;
        float r27296 = -r27288;
        float r27297 = r27288 * r27288;
        float r27298 = h;
        float r27299 = r27298 * r27298;
        float r27300 = r27297 - r27299;
        float r27301 = sqrt(r27300);
        float r27302 = r27296 + r27301;
        float r27303 = r27295 * r27302;
        float r27304 = cbrt(r27303);
        float r27305 = r27301 - r27288;
        float r27306 = r27299 / r27305;
        float r27307 = r27295 * r27306;
        float r27308 = cbrt(r27307);
        float r27309 = r27304 + r27308;
        float r27310 = r27296 - r27301;
        float r27311 = r27299 / r27310;
        float r27312 = r27295 * r27311;
        float r27313 = cbrt(r27312);
        float r27314 = r27295 * r27310;
        float r27315 = cbrt(r27314);
        float r27316 = r27313 + r27315;
        float r27317 = r27290 ? r27309 : r27316;
        return r27317;
}

double f_od(double g, double h, double a) {
        double r27318 = g;
        double r27319 = -2.4565349121758458e-222;
        bool r27320 = r27318 <= r27319;
        double r27321 = 1;
        double r27322 = 2;
        double r27323 = a;
        double r27324 = r27322 * r27323;
        double r27325 = r27321 / r27324;
        double r27326 = -r27318;
        double r27327 = r27318 * r27318;
        double r27328 = h;
        double r27329 = r27328 * r27328;
        double r27330 = r27327 - r27329;
        double r27331 = sqrt(r27330);
        double r27332 = r27326 + r27331;
        double r27333 = r27325 * r27332;
        double r27334 = cbrt(r27333);
        double r27335 = r27331 - r27318;
        double r27336 = r27329 / r27335;
        double r27337 = r27325 * r27336;
        double r27338 = cbrt(r27337);
        double r27339 = r27334 + r27338;
        double r27340 = r27326 - r27331;
        double r27341 = r27329 / r27340;
        double r27342 = r27325 * r27341;
        double r27343 = cbrt(r27342);
        double r27344 = r27325 * r27340;
        double r27345 = cbrt(r27344);
        double r27346 = r27343 + r27345;
        double r27347 = r27320 ? r27339 : r27346;
        return r27347;
}

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 r27348, r27349, r27350, r27351, r27352, r27353, r27354, r27355, r27356, r27357, r27358, r27359, r27360, r27361, r27362, r27363, r27364, r27365, r27366;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r27348, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27349, "2", 10, MPFR_RNDN);
        mpfr_init(r27350);
        mpfr_init(r27351);
        mpfr_init(r27352);
        mpfr_init(r27353);
        mpfr_init(r27354);
        mpfr_init(r27355);
        mpfr_init(r27356);
        mpfr_init(r27357);
        mpfr_init(r27358);
        mpfr_init(r27359);
        mpfr_init(r27360);
        mpfr_init(r27361);
        mpfr_init(r27362);
        mpfr_init(r27363);
        mpfr_init(r27364);
        mpfr_init(r27365);
        mpfr_init(r27366);
}

double f_im(double g, double h, double a) {
        ;
        ;
        mpfr_set_d(r27350, a, MPFR_RNDN);
        mpfr_mul(r27351, r27349, r27350, MPFR_RNDN);
        mpfr_div(r27352, r27348, r27351, MPFR_RNDN);
        mpfr_set_d(r27353, g, MPFR_RNDN);
        mpfr_neg(r27354, r27353, MPFR_RNDN);
        mpfr_mul(r27355, r27353, r27353, MPFR_RNDN);
        mpfr_set_d(r27356, h, MPFR_RNDN);
        mpfr_mul(r27357, r27356, r27356, MPFR_RNDN);
        mpfr_sub(r27358, r27355, r27357, MPFR_RNDN);
        mpfr_sqrt(r27359, r27358, MPFR_RNDN);
        mpfr_add(r27360, r27354, r27359, MPFR_RNDN);
        mpfr_mul(r27361, r27352, r27360, MPFR_RNDN);
        mpfr_cbrt(r27362, r27361, MPFR_RNDN);
        mpfr_sub(r27363, r27354, r27359, MPFR_RNDN);
        mpfr_mul(r27364, r27352, r27363, MPFR_RNDN);
        mpfr_cbrt(r27365, r27364, MPFR_RNDN);
        mpfr_add(r27366, r27362, r27365, MPFR_RNDN);
        return mpfr_get_d(r27366, MPFR_RNDN);
}

static mpfr_t r27367, r27368, r27369, r27370, r27371, r27372, r27373, r27374, r27375, r27376, r27377, r27378, r27379, r27380, r27381, r27382, r27383, r27384, r27385, r27386, r27387, r27388, r27389, r27390, r27391, r27392, r27393, r27394, r27395, r27396;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27367);
        mpfr_init_set_str(r27368, "-2.4565349121758458e-222", 10, MPFR_RNDN);
        mpfr_init(r27369);
        mpfr_init_set_str(r27370, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27371, "2", 10, MPFR_RNDN);
        mpfr_init(r27372);
        mpfr_init(r27373);
        mpfr_init(r27374);
        mpfr_init(r27375);
        mpfr_init(r27376);
        mpfr_init(r27377);
        mpfr_init(r27378);
        mpfr_init(r27379);
        mpfr_init(r27380);
        mpfr_init(r27381);
        mpfr_init(r27382);
        mpfr_init(r27383);
        mpfr_init(r27384);
        mpfr_init(r27385);
        mpfr_init(r27386);
        mpfr_init(r27387);
        mpfr_init(r27388);
        mpfr_init(r27389);
        mpfr_init(r27390);
        mpfr_init(r27391);
        mpfr_init(r27392);
        mpfr_init(r27393);
        mpfr_init(r27394);
        mpfr_init(r27395);
        mpfr_init(r27396);
}

double f_fm(double g, double h, double a) {
        mpfr_set_d(r27367, g, MPFR_RNDN);
        ;
        mpfr_set_si(r27369, mpfr_cmp(r27367, r27368) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27372, a, MPFR_RNDN);
        mpfr_mul(r27373, r27371, r27372, MPFR_RNDN);
        mpfr_div(r27374, r27370, r27373, MPFR_RNDN);
        mpfr_neg(r27375, r27367, MPFR_RNDN);
        mpfr_mul(r27376, r27367, r27367, MPFR_RNDN);
        mpfr_set_d(r27377, h, MPFR_RNDN);
        mpfr_mul(r27378, r27377, r27377, MPFR_RNDN);
        mpfr_sub(r27379, r27376, r27378, MPFR_RNDN);
        mpfr_sqrt(r27380, r27379, MPFR_RNDN);
        mpfr_add(r27381, r27375, r27380, MPFR_RNDN);
        mpfr_mul(r27382, r27374, r27381, MPFR_RNDN);
        mpfr_cbrt(r27383, r27382, MPFR_RNDN);
        mpfr_sub(r27384, r27380, r27367, MPFR_RNDN);
        mpfr_div(r27385, r27378, r27384, MPFR_RNDN);
        mpfr_mul(r27386, r27374, r27385, MPFR_RNDN);
        mpfr_cbrt(r27387, r27386, MPFR_RNDN);
        mpfr_add(r27388, r27383, r27387, MPFR_RNDN);
        mpfr_sub(r27389, r27375, r27380, MPFR_RNDN);
        mpfr_div(r27390, r27378, r27389, MPFR_RNDN);
        mpfr_mul(r27391, r27374, r27390, MPFR_RNDN);
        mpfr_cbrt(r27392, r27391, MPFR_RNDN);
        mpfr_mul(r27393, r27374, r27389, MPFR_RNDN);
        mpfr_cbrt(r27394, r27393, MPFR_RNDN);
        mpfr_add(r27395, r27392, r27394, MPFR_RNDN);
        if (mpfr_get_si(r27369, MPFR_RNDN)) { mpfr_set(r27396, r27388, MPFR_RNDN); } else { mpfr_set(r27396, r27395, MPFR_RNDN); };
        return mpfr_get_d(r27396, MPFR_RNDN);
}

static mpfr_t r27397, r27398, r27399, r27400, r27401, r27402, r27403, r27404, r27405, r27406, r27407, r27408, r27409, r27410, r27411, r27412, r27413, r27414, r27415, r27416, r27417, r27418, r27419, r27420, r27421, r27422, r27423, r27424, r27425, r27426;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27397);
        mpfr_init_set_str(r27398, "-2.4565349121758458e-222", 10, MPFR_RNDN);
        mpfr_init(r27399);
        mpfr_init_set_str(r27400, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27401, "2", 10, MPFR_RNDN);
        mpfr_init(r27402);
        mpfr_init(r27403);
        mpfr_init(r27404);
        mpfr_init(r27405);
        mpfr_init(r27406);
        mpfr_init(r27407);
        mpfr_init(r27408);
        mpfr_init(r27409);
        mpfr_init(r27410);
        mpfr_init(r27411);
        mpfr_init(r27412);
        mpfr_init(r27413);
        mpfr_init(r27414);
        mpfr_init(r27415);
        mpfr_init(r27416);
        mpfr_init(r27417);
        mpfr_init(r27418);
        mpfr_init(r27419);
        mpfr_init(r27420);
        mpfr_init(r27421);
        mpfr_init(r27422);
        mpfr_init(r27423);
        mpfr_init(r27424);
        mpfr_init(r27425);
        mpfr_init(r27426);
}

double f_dm(double g, double h, double a) {
        mpfr_set_d(r27397, g, MPFR_RNDN);
        ;
        mpfr_set_si(r27399, mpfr_cmp(r27397, r27398) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27402, a, MPFR_RNDN);
        mpfr_mul(r27403, r27401, r27402, MPFR_RNDN);
        mpfr_div(r27404, r27400, r27403, MPFR_RNDN);
        mpfr_neg(r27405, r27397, MPFR_RNDN);
        mpfr_mul(r27406, r27397, r27397, MPFR_RNDN);
        mpfr_set_d(r27407, h, MPFR_RNDN);
        mpfr_mul(r27408, r27407, r27407, MPFR_RNDN);
        mpfr_sub(r27409, r27406, r27408, MPFR_RNDN);
        mpfr_sqrt(r27410, r27409, MPFR_RNDN);
        mpfr_add(r27411, r27405, r27410, MPFR_RNDN);
        mpfr_mul(r27412, r27404, r27411, MPFR_RNDN);
        mpfr_cbrt(r27413, r27412, MPFR_RNDN);
        mpfr_sub(r27414, r27410, r27397, MPFR_RNDN);
        mpfr_div(r27415, r27408, r27414, MPFR_RNDN);
        mpfr_mul(r27416, r27404, r27415, MPFR_RNDN);
        mpfr_cbrt(r27417, r27416, MPFR_RNDN);
        mpfr_add(r27418, r27413, r27417, MPFR_RNDN);
        mpfr_sub(r27419, r27405, r27410, MPFR_RNDN);
        mpfr_div(r27420, r27408, r27419, MPFR_RNDN);
        mpfr_mul(r27421, r27404, r27420, MPFR_RNDN);
        mpfr_cbrt(r27422, r27421, MPFR_RNDN);
        mpfr_mul(r27423, r27404, r27419, MPFR_RNDN);
        mpfr_cbrt(r27424, r27423, MPFR_RNDN);
        mpfr_add(r27425, r27422, r27424, MPFR_RNDN);
        if (mpfr_get_si(r27399, MPFR_RNDN)) { mpfr_set(r27426, r27418, MPFR_RNDN); } else { mpfr_set(r27426, r27425, MPFR_RNDN); };
        return mpfr_get_d(r27426, MPFR_RNDN);
}

