#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 r10674 = 1;
        float r10675 = 2;
        float r10676 = a;
        float r10677 = r10675 * r10676;
        float r10678 = r10674 / r10677;
        float r10679 = g;
        float r10680 = -r10679;
        float r10681 = r10679 * r10679;
        float r10682 = h;
        float r10683 = r10682 * r10682;
        float r10684 = r10681 - r10683;
        float r10685 = sqrt(r10684);
        float r10686 = r10680 + r10685;
        float r10687 = r10678 * r10686;
        float r10688 = cbrt(r10687);
        float r10689 = r10680 - r10685;
        float r10690 = r10678 * r10689;
        float r10691 = cbrt(r10690);
        float r10692 = r10688 + r10691;
        return r10692;
}

double f_id(double g, double h, double a) {
        double r10693 = 1;
        double r10694 = 2;
        double r10695 = a;
        double r10696 = r10694 * r10695;
        double r10697 = r10693 / r10696;
        double r10698 = g;
        double r10699 = -r10698;
        double r10700 = r10698 * r10698;
        double r10701 = h;
        double r10702 = r10701 * r10701;
        double r10703 = r10700 - r10702;
        double r10704 = sqrt(r10703);
        double r10705 = r10699 + r10704;
        double r10706 = r10697 * r10705;
        double r10707 = cbrt(r10706);
        double r10708 = r10699 - r10704;
        double r10709 = r10697 * r10708;
        double r10710 = cbrt(r10709);
        double r10711 = r10707 + r10710;
        return r10711;
}


double f_of(float g, float h, float a) {
        float r10712 = g;
        float r10713 = h;
        float r10714 = r10712 - r10713;
        float r10715 = r10713 + r10712;
        float r10716 = r10714 * r10715;
        float r10717 = sqrt(r10716);
        float r10718 = r10717 - r10712;
        float r10719 = a;
        float r10720 = 2;
        float r10721 = r10719 * r10720;
        float r10722 = r10718 / r10721;
        float r10723 = cbrt(r10722);
        float r10724 = -r10712;
        float r10725 = r10724 - r10717;
        float r10726 = r10725 / r10721;
        float r10727 = 1/3;
        float r10728 = pow(r10726, r10727);
        float r10729 = r10723 + r10728;
        float r10730 = 9.881653958554104e-107;
        bool r10731 = r10729 <= r10730;
        float r10732 = 1;
        float r10733 = r10732 / r10719;
        float r10734 = cbrt(r10733);
        float r10735 = r10713 - r10712;
        float r10736 = r10735 - r10712;
        float r10737 = r10736 / r10720;
        float r10738 = cbrt(r10737);
        float r10739 = r10734 * r10738;
        float r10740 = cbrt(r10726);
        float r10741 = r10739 + r10740;
        float r10742 = r10725 / r10720;
        float r10743 = cbrt(r10742);
        float r10744 = r10734 * r10743;
        float r10745 = r10723 + r10744;
        float r10746 = r10731 ? r10741 : r10745;
        return r10746;
}

double f_od(double g, double h, double a) {
        double r10747 = g;
        double r10748 = h;
        double r10749 = r10747 - r10748;
        double r10750 = r10748 + r10747;
        double r10751 = r10749 * r10750;
        double r10752 = sqrt(r10751);
        double r10753 = r10752 - r10747;
        double r10754 = a;
        double r10755 = 2;
        double r10756 = r10754 * r10755;
        double r10757 = r10753 / r10756;
        double r10758 = cbrt(r10757);
        double r10759 = -r10747;
        double r10760 = r10759 - r10752;
        double r10761 = r10760 / r10756;
        double r10762 = 1/3;
        double r10763 = pow(r10761, r10762);
        double r10764 = r10758 + r10763;
        double r10765 = 9.881653958554104e-107;
        bool r10766 = r10764 <= r10765;
        double r10767 = 1;
        double r10768 = r10767 / r10754;
        double r10769 = cbrt(r10768);
        double r10770 = r10748 - r10747;
        double r10771 = r10770 - r10747;
        double r10772 = r10771 / r10755;
        double r10773 = cbrt(r10772);
        double r10774 = r10769 * r10773;
        double r10775 = cbrt(r10761);
        double r10776 = r10774 + r10775;
        double r10777 = r10760 / r10755;
        double r10778 = cbrt(r10777);
        double r10779 = r10769 * r10778;
        double r10780 = r10758 + r10779;
        double r10781 = r10766 ? r10776 : r10780;
        return r10781;
}

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 r10782, r10783, r10784, r10785, r10786, r10787, r10788, r10789, r10790, r10791, r10792, r10793, r10794, r10795, r10796, r10797, r10798, r10799, r10800;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r10782, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10783, "2", 10, MPFR_RNDN);
        mpfr_init(r10784);
        mpfr_init(r10785);
        mpfr_init(r10786);
        mpfr_init(r10787);
        mpfr_init(r10788);
        mpfr_init(r10789);
        mpfr_init(r10790);
        mpfr_init(r10791);
        mpfr_init(r10792);
        mpfr_init(r10793);
        mpfr_init(r10794);
        mpfr_init(r10795);
        mpfr_init(r10796);
        mpfr_init(r10797);
        mpfr_init(r10798);
        mpfr_init(r10799);
        mpfr_init(r10800);
}

double f_im(double g, double h, double a) {
        ;
        ;
        mpfr_set_d(r10784, a, MPFR_RNDN);
        mpfr_mul(r10785, r10783, r10784, MPFR_RNDN);
        mpfr_div(r10786, r10782, r10785, MPFR_RNDN);
        mpfr_set_d(r10787, g, MPFR_RNDN);
        mpfr_neg(r10788, r10787, MPFR_RNDN);
        mpfr_mul(r10789, r10787, r10787, MPFR_RNDN);
        mpfr_set_d(r10790, h, MPFR_RNDN);
        mpfr_mul(r10791, r10790, r10790, MPFR_RNDN);
        mpfr_sub(r10792, r10789, r10791, MPFR_RNDN);
        mpfr_sqrt(r10793, r10792, MPFR_RNDN);
        mpfr_add(r10794, r10788, r10793, MPFR_RNDN);
        mpfr_mul(r10795, r10786, r10794, MPFR_RNDN);
        mpfr_cbrt(r10796, r10795, MPFR_RNDN);
        mpfr_sub(r10797, r10788, r10793, MPFR_RNDN);
        mpfr_mul(r10798, r10786, r10797, MPFR_RNDN);
        mpfr_cbrt(r10799, r10798, MPFR_RNDN);
        mpfr_add(r10800, r10796, r10799, MPFR_RNDN);
        return mpfr_get_d(r10800, MPFR_RNDN);
}

static mpfr_t r10801, r10802, r10803, r10804, r10805, r10806, r10807, r10808, r10809, r10810, r10811, r10812, r10813, r10814, r10815, r10816, r10817, r10818, r10819, r10820, r10821, r10822, r10823, r10824, r10825, r10826, r10827, r10828, r10829, r10830, r10831, r10832, r10833, r10834, r10835;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10801);
        mpfr_init(r10802);
        mpfr_init(r10803);
        mpfr_init(r10804);
        mpfr_init(r10805);
        mpfr_init(r10806);
        mpfr_init(r10807);
        mpfr_init(r10808);
        mpfr_init_set_str(r10809, "2", 10, MPFR_RNDN);
        mpfr_init(r10810);
        mpfr_init(r10811);
        mpfr_init(r10812);
        mpfr_init(r10813);
        mpfr_init(r10814);
        mpfr_init(r10815);
        mpfr_init_set_str(r10816, "1/3", 10, MPFR_RNDN);
        mpfr_init(r10817);
        mpfr_init(r10818);
        mpfr_init_set_str(r10819, "9.881653958554104e-107", 10, MPFR_RNDN);
        mpfr_init(r10820);
        mpfr_init_set_str(r10821, "1", 10, MPFR_RNDN);
        mpfr_init(r10822);
        mpfr_init(r10823);
        mpfr_init(r10824);
        mpfr_init(r10825);
        mpfr_init(r10826);
        mpfr_init(r10827);
        mpfr_init(r10828);
        mpfr_init(r10829);
        mpfr_init(r10830);
        mpfr_init(r10831);
        mpfr_init(r10832);
        mpfr_init(r10833);
        mpfr_init(r10834);
        mpfr_init(r10835);
}

double f_fm(double g, double h, double a) {
        mpfr_set_d(r10801, g, MPFR_RNDN);
        mpfr_set_d(r10802, h, MPFR_RNDN);
        mpfr_sub(r10803, r10801, r10802, MPFR_RNDN);
        mpfr_add(r10804, r10802, r10801, MPFR_RNDN);
        mpfr_mul(r10805, r10803, r10804, MPFR_RNDN);
        mpfr_sqrt(r10806, r10805, MPFR_RNDN);
        mpfr_sub(r10807, r10806, r10801, MPFR_RNDN);
        mpfr_set_d(r10808, a, MPFR_RNDN);
        ;
        mpfr_mul(r10810, r10808, r10809, MPFR_RNDN);
        mpfr_div(r10811, r10807, r10810, MPFR_RNDN);
        mpfr_cbrt(r10812, r10811, MPFR_RNDN);
        mpfr_neg(r10813, r10801, MPFR_RNDN);
        mpfr_sub(r10814, r10813, r10806, MPFR_RNDN);
        mpfr_div(r10815, r10814, r10810, MPFR_RNDN);
        ;
        mpfr_pow(r10817, r10815, r10816, MPFR_RNDN);
        mpfr_add(r10818, r10812, r10817, MPFR_RNDN);
        ;
        mpfr_set_si(r10820, mpfr_cmp(r10818, r10819) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r10822, r10821, r10808, MPFR_RNDN);
        mpfr_cbrt(r10823, r10822, MPFR_RNDN);
        mpfr_sub(r10824, r10802, r10801, MPFR_RNDN);
        mpfr_sub(r10825, r10824, r10801, MPFR_RNDN);
        mpfr_div(r10826, r10825, r10809, MPFR_RNDN);
        mpfr_cbrt(r10827, r10826, MPFR_RNDN);
        mpfr_mul(r10828, r10823, r10827, MPFR_RNDN);
        mpfr_cbrt(r10829, r10815, MPFR_RNDN);
        mpfr_add(r10830, r10828, r10829, MPFR_RNDN);
        mpfr_div(r10831, r10814, r10809, MPFR_RNDN);
        mpfr_cbrt(r10832, r10831, MPFR_RNDN);
        mpfr_mul(r10833, r10823, r10832, MPFR_RNDN);
        mpfr_add(r10834, r10812, r10833, MPFR_RNDN);
        if (mpfr_get_si(r10820, MPFR_RNDN)) { mpfr_set(r10835, r10830, MPFR_RNDN); } else { mpfr_set(r10835, r10834, MPFR_RNDN); };
        return mpfr_get_d(r10835, MPFR_RNDN);
}

static mpfr_t r10836, r10837, r10838, r10839, r10840, r10841, r10842, r10843, r10844, r10845, r10846, r10847, r10848, r10849, r10850, r10851, r10852, r10853, r10854, r10855, r10856, r10857, r10858, r10859, r10860, r10861, r10862, r10863, r10864, r10865, r10866, r10867, r10868, r10869, r10870;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10836);
        mpfr_init(r10837);
        mpfr_init(r10838);
        mpfr_init(r10839);
        mpfr_init(r10840);
        mpfr_init(r10841);
        mpfr_init(r10842);
        mpfr_init(r10843);
        mpfr_init_set_str(r10844, "2", 10, MPFR_RNDN);
        mpfr_init(r10845);
        mpfr_init(r10846);
        mpfr_init(r10847);
        mpfr_init(r10848);
        mpfr_init(r10849);
        mpfr_init(r10850);
        mpfr_init_set_str(r10851, "1/3", 10, MPFR_RNDN);
        mpfr_init(r10852);
        mpfr_init(r10853);
        mpfr_init_set_str(r10854, "9.881653958554104e-107", 10, MPFR_RNDN);
        mpfr_init(r10855);
        mpfr_init_set_str(r10856, "1", 10, MPFR_RNDN);
        mpfr_init(r10857);
        mpfr_init(r10858);
        mpfr_init(r10859);
        mpfr_init(r10860);
        mpfr_init(r10861);
        mpfr_init(r10862);
        mpfr_init(r10863);
        mpfr_init(r10864);
        mpfr_init(r10865);
        mpfr_init(r10866);
        mpfr_init(r10867);
        mpfr_init(r10868);
        mpfr_init(r10869);
        mpfr_init(r10870);
}

double f_dm(double g, double h, double a) {
        mpfr_set_d(r10836, g, MPFR_RNDN);
        mpfr_set_d(r10837, h, MPFR_RNDN);
        mpfr_sub(r10838, r10836, r10837, MPFR_RNDN);
        mpfr_add(r10839, r10837, r10836, MPFR_RNDN);
        mpfr_mul(r10840, r10838, r10839, MPFR_RNDN);
        mpfr_sqrt(r10841, r10840, MPFR_RNDN);
        mpfr_sub(r10842, r10841, r10836, MPFR_RNDN);
        mpfr_set_d(r10843, a, MPFR_RNDN);
        ;
        mpfr_mul(r10845, r10843, r10844, MPFR_RNDN);
        mpfr_div(r10846, r10842, r10845, MPFR_RNDN);
        mpfr_cbrt(r10847, r10846, MPFR_RNDN);
        mpfr_neg(r10848, r10836, MPFR_RNDN);
        mpfr_sub(r10849, r10848, r10841, MPFR_RNDN);
        mpfr_div(r10850, r10849, r10845, MPFR_RNDN);
        ;
        mpfr_pow(r10852, r10850, r10851, MPFR_RNDN);
        mpfr_add(r10853, r10847, r10852, MPFR_RNDN);
        ;
        mpfr_set_si(r10855, mpfr_cmp(r10853, r10854) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r10857, r10856, r10843, MPFR_RNDN);
        mpfr_cbrt(r10858, r10857, MPFR_RNDN);
        mpfr_sub(r10859, r10837, r10836, MPFR_RNDN);
        mpfr_sub(r10860, r10859, r10836, MPFR_RNDN);
        mpfr_div(r10861, r10860, r10844, MPFR_RNDN);
        mpfr_cbrt(r10862, r10861, MPFR_RNDN);
        mpfr_mul(r10863, r10858, r10862, MPFR_RNDN);
        mpfr_cbrt(r10864, r10850, MPFR_RNDN);
        mpfr_add(r10865, r10863, r10864, MPFR_RNDN);
        mpfr_div(r10866, r10849, r10844, MPFR_RNDN);
        mpfr_cbrt(r10867, r10866, MPFR_RNDN);
        mpfr_mul(r10868, r10858, r10867, MPFR_RNDN);
        mpfr_add(r10869, r10847, r10868, MPFR_RNDN);
        if (mpfr_get_si(r10855, MPFR_RNDN)) { mpfr_set(r10870, r10865, MPFR_RNDN); } else { mpfr_set(r10870, r10869, MPFR_RNDN); };
        return mpfr_get_d(r10870, MPFR_RNDN);
}

