#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 r27010 = 1;
        float r27011 = 2;
        float r27012 = a;
        float r27013 = r27011 * r27012;
        float r27014 = r27010 / r27013;
        float r27015 = g;
        float r27016 = -r27015;
        float r27017 = r27015 * r27015;
        float r27018 = h;
        float r27019 = r27018 * r27018;
        float r27020 = r27017 - r27019;
        float r27021 = sqrt(r27020);
        float r27022 = r27016 + r27021;
        float r27023 = r27014 * r27022;
        float r27024 = cbrt(r27023);
        float r27025 = r27016 - r27021;
        float r27026 = r27014 * r27025;
        float r27027 = cbrt(r27026);
        float r27028 = r27024 + r27027;
        return r27028;
}

double f_id(double g, double h, double a) {
        double r27029 = 1;
        double r27030 = 2;
        double r27031 = a;
        double r27032 = r27030 * r27031;
        double r27033 = r27029 / r27032;
        double r27034 = g;
        double r27035 = -r27034;
        double r27036 = r27034 * r27034;
        double r27037 = h;
        double r27038 = r27037 * r27037;
        double r27039 = r27036 - r27038;
        double r27040 = sqrt(r27039);
        double r27041 = r27035 + r27040;
        double r27042 = r27033 * r27041;
        double r27043 = cbrt(r27042);
        double r27044 = r27035 - r27040;
        double r27045 = r27033 * r27044;
        double r27046 = cbrt(r27045);
        double r27047 = r27043 + r27046;
        return r27047;
}


double f_of(float g, float h, float a) {
        float r27048 = g;
        float r27049 = -1.5768475797878415e-162;
        bool r27050 = r27048 <= r27049;
        float r27051 = 1;
        float r27052 = 2;
        float r27053 = a;
        float r27054 = r27052 * r27053;
        float r27055 = r27051 / r27054;
        float r27056 = -r27048;
        float r27057 = r27048 * r27048;
        float r27058 = h;
        float r27059 = r27058 * r27058;
        float r27060 = r27057 - r27059;
        float r27061 = sqrt(r27060);
        float r27062 = r27056 + r27061;
        float r27063 = r27055 * r27062;
        float r27064 = cbrt(r27063);
        float r27065 = r27061 - r27048;
        float r27066 = r27059 / r27065;
        float r27067 = r27055 * r27066;
        float r27068 = cbrt(r27067);
        float r27069 = r27064 + r27068;
        float r27070 = r27056 - r27061;
        float r27071 = r27059 / r27070;
        float r27072 = r27055 * r27071;
        float r27073 = cbrt(r27072);
        float r27074 = r27055 * r27070;
        float r27075 = cbrt(r27074);
        float r27076 = r27073 + r27075;
        float r27077 = r27050 ? r27069 : r27076;
        return r27077;
}

double f_od(double g, double h, double a) {
        double r27078 = g;
        double r27079 = -1.5768475797878415e-162;
        bool r27080 = r27078 <= r27079;
        double r27081 = 1;
        double r27082 = 2;
        double r27083 = a;
        double r27084 = r27082 * r27083;
        double r27085 = r27081 / r27084;
        double r27086 = -r27078;
        double r27087 = r27078 * r27078;
        double r27088 = h;
        double r27089 = r27088 * r27088;
        double r27090 = r27087 - r27089;
        double r27091 = sqrt(r27090);
        double r27092 = r27086 + r27091;
        double r27093 = r27085 * r27092;
        double r27094 = cbrt(r27093);
        double r27095 = r27091 - r27078;
        double r27096 = r27089 / r27095;
        double r27097 = r27085 * r27096;
        double r27098 = cbrt(r27097);
        double r27099 = r27094 + r27098;
        double r27100 = r27086 - r27091;
        double r27101 = r27089 / r27100;
        double r27102 = r27085 * r27101;
        double r27103 = cbrt(r27102);
        double r27104 = r27085 * r27100;
        double r27105 = cbrt(r27104);
        double r27106 = r27103 + r27105;
        double r27107 = r27080 ? r27099 : r27106;
        return r27107;
}

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 r27108, r27109, r27110, r27111, r27112, r27113, r27114, r27115, r27116, r27117, r27118, r27119, r27120, r27121, r27122, r27123, r27124, r27125, r27126;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r27108, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27109, "2", 10, MPFR_RNDN);
        mpfr_init(r27110);
        mpfr_init(r27111);
        mpfr_init(r27112);
        mpfr_init(r27113);
        mpfr_init(r27114);
        mpfr_init(r27115);
        mpfr_init(r27116);
        mpfr_init(r27117);
        mpfr_init(r27118);
        mpfr_init(r27119);
        mpfr_init(r27120);
        mpfr_init(r27121);
        mpfr_init(r27122);
        mpfr_init(r27123);
        mpfr_init(r27124);
        mpfr_init(r27125);
        mpfr_init(r27126);
}

double f_im(double g, double h, double a) {
        ;
        ;
        mpfr_set_d(r27110, a, MPFR_RNDN);
        mpfr_mul(r27111, r27109, r27110, MPFR_RNDN);
        mpfr_div(r27112, r27108, r27111, MPFR_RNDN);
        mpfr_set_d(r27113, g, MPFR_RNDN);
        mpfr_neg(r27114, r27113, MPFR_RNDN);
        mpfr_mul(r27115, r27113, r27113, MPFR_RNDN);
        mpfr_set_d(r27116, h, MPFR_RNDN);
        mpfr_mul(r27117, r27116, r27116, MPFR_RNDN);
        mpfr_sub(r27118, r27115, r27117, MPFR_RNDN);
        mpfr_sqrt(r27119, r27118, MPFR_RNDN);
        mpfr_add(r27120, r27114, r27119, MPFR_RNDN);
        mpfr_mul(r27121, r27112, r27120, MPFR_RNDN);
        mpfr_cbrt(r27122, r27121, MPFR_RNDN);
        mpfr_sub(r27123, r27114, r27119, MPFR_RNDN);
        mpfr_mul(r27124, r27112, r27123, MPFR_RNDN);
        mpfr_cbrt(r27125, r27124, MPFR_RNDN);
        mpfr_add(r27126, r27122, r27125, MPFR_RNDN);
        return mpfr_get_d(r27126, MPFR_RNDN);
}

static mpfr_t r27127, r27128, r27129, r27130, r27131, r27132, r27133, r27134, r27135, r27136, r27137, r27138, r27139, r27140, r27141, r27142, r27143, r27144, r27145, r27146, r27147, r27148, r27149, r27150, r27151, r27152, r27153, r27154, r27155, r27156;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27127);
        mpfr_init_set_str(r27128, "-1.5768475797878415e-162", 10, MPFR_RNDN);
        mpfr_init(r27129);
        mpfr_init_set_str(r27130, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27131, "2", 10, MPFR_RNDN);
        mpfr_init(r27132);
        mpfr_init(r27133);
        mpfr_init(r27134);
        mpfr_init(r27135);
        mpfr_init(r27136);
        mpfr_init(r27137);
        mpfr_init(r27138);
        mpfr_init(r27139);
        mpfr_init(r27140);
        mpfr_init(r27141);
        mpfr_init(r27142);
        mpfr_init(r27143);
        mpfr_init(r27144);
        mpfr_init(r27145);
        mpfr_init(r27146);
        mpfr_init(r27147);
        mpfr_init(r27148);
        mpfr_init(r27149);
        mpfr_init(r27150);
        mpfr_init(r27151);
        mpfr_init(r27152);
        mpfr_init(r27153);
        mpfr_init(r27154);
        mpfr_init(r27155);
        mpfr_init(r27156);
}

double f_fm(double g, double h, double a) {
        mpfr_set_d(r27127, g, MPFR_RNDN);
        ;
        mpfr_set_si(r27129, mpfr_cmp(r27127, r27128) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27132, a, MPFR_RNDN);
        mpfr_mul(r27133, r27131, r27132, MPFR_RNDN);
        mpfr_div(r27134, r27130, r27133, MPFR_RNDN);
        mpfr_neg(r27135, r27127, MPFR_RNDN);
        mpfr_mul(r27136, r27127, r27127, MPFR_RNDN);
        mpfr_set_d(r27137, h, MPFR_RNDN);
        mpfr_mul(r27138, r27137, r27137, MPFR_RNDN);
        mpfr_sub(r27139, r27136, r27138, MPFR_RNDN);
        mpfr_sqrt(r27140, r27139, MPFR_RNDN);
        mpfr_add(r27141, r27135, r27140, MPFR_RNDN);
        mpfr_mul(r27142, r27134, r27141, MPFR_RNDN);
        mpfr_cbrt(r27143, r27142, MPFR_RNDN);
        mpfr_sub(r27144, r27140, r27127, MPFR_RNDN);
        mpfr_div(r27145, r27138, r27144, MPFR_RNDN);
        mpfr_mul(r27146, r27134, r27145, MPFR_RNDN);
        mpfr_cbrt(r27147, r27146, MPFR_RNDN);
        mpfr_add(r27148, r27143, r27147, MPFR_RNDN);
        mpfr_sub(r27149, r27135, r27140, MPFR_RNDN);
        mpfr_div(r27150, r27138, r27149, MPFR_RNDN);
        mpfr_mul(r27151, r27134, r27150, MPFR_RNDN);
        mpfr_cbrt(r27152, r27151, MPFR_RNDN);
        mpfr_mul(r27153, r27134, r27149, MPFR_RNDN);
        mpfr_cbrt(r27154, r27153, MPFR_RNDN);
        mpfr_add(r27155, r27152, r27154, MPFR_RNDN);
        if (mpfr_get_si(r27129, MPFR_RNDN)) { mpfr_set(r27156, r27148, MPFR_RNDN); } else { mpfr_set(r27156, r27155, MPFR_RNDN); };
        return mpfr_get_d(r27156, MPFR_RNDN);
}

static mpfr_t r27157, r27158, r27159, r27160, r27161, r27162, r27163, r27164, r27165, r27166, r27167, r27168, r27169, r27170, r27171, r27172, r27173, r27174, r27175, r27176, r27177, r27178, r27179, r27180, r27181, r27182, r27183, r27184, r27185, r27186;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27157);
        mpfr_init_set_str(r27158, "-1.5768475797878415e-162", 10, MPFR_RNDN);
        mpfr_init(r27159);
        mpfr_init_set_str(r27160, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27161, "2", 10, MPFR_RNDN);
        mpfr_init(r27162);
        mpfr_init(r27163);
        mpfr_init(r27164);
        mpfr_init(r27165);
        mpfr_init(r27166);
        mpfr_init(r27167);
        mpfr_init(r27168);
        mpfr_init(r27169);
        mpfr_init(r27170);
        mpfr_init(r27171);
        mpfr_init(r27172);
        mpfr_init(r27173);
        mpfr_init(r27174);
        mpfr_init(r27175);
        mpfr_init(r27176);
        mpfr_init(r27177);
        mpfr_init(r27178);
        mpfr_init(r27179);
        mpfr_init(r27180);
        mpfr_init(r27181);
        mpfr_init(r27182);
        mpfr_init(r27183);
        mpfr_init(r27184);
        mpfr_init(r27185);
        mpfr_init(r27186);
}

double f_dm(double g, double h, double a) {
        mpfr_set_d(r27157, g, MPFR_RNDN);
        ;
        mpfr_set_si(r27159, mpfr_cmp(r27157, r27158) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27162, a, MPFR_RNDN);
        mpfr_mul(r27163, r27161, r27162, MPFR_RNDN);
        mpfr_div(r27164, r27160, r27163, MPFR_RNDN);
        mpfr_neg(r27165, r27157, MPFR_RNDN);
        mpfr_mul(r27166, r27157, r27157, MPFR_RNDN);
        mpfr_set_d(r27167, h, MPFR_RNDN);
        mpfr_mul(r27168, r27167, r27167, MPFR_RNDN);
        mpfr_sub(r27169, r27166, r27168, MPFR_RNDN);
        mpfr_sqrt(r27170, r27169, MPFR_RNDN);
        mpfr_add(r27171, r27165, r27170, MPFR_RNDN);
        mpfr_mul(r27172, r27164, r27171, MPFR_RNDN);
        mpfr_cbrt(r27173, r27172, MPFR_RNDN);
        mpfr_sub(r27174, r27170, r27157, MPFR_RNDN);
        mpfr_div(r27175, r27168, r27174, MPFR_RNDN);
        mpfr_mul(r27176, r27164, r27175, MPFR_RNDN);
        mpfr_cbrt(r27177, r27176, MPFR_RNDN);
        mpfr_add(r27178, r27173, r27177, MPFR_RNDN);
        mpfr_sub(r27179, r27165, r27170, MPFR_RNDN);
        mpfr_div(r27180, r27168, r27179, MPFR_RNDN);
        mpfr_mul(r27181, r27164, r27180, MPFR_RNDN);
        mpfr_cbrt(r27182, r27181, MPFR_RNDN);
        mpfr_mul(r27183, r27164, r27179, MPFR_RNDN);
        mpfr_cbrt(r27184, r27183, MPFR_RNDN);
        mpfr_add(r27185, r27182, r27184, MPFR_RNDN);
        if (mpfr_get_si(r27159, MPFR_RNDN)) { mpfr_set(r27186, r27178, MPFR_RNDN); } else { mpfr_set(r27186, r27185, MPFR_RNDN); };
        return mpfr_get_d(r27186, MPFR_RNDN);
}

