#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 r10808 = 1;
        float r10809 = 2;
        float r10810 = a;
        float r10811 = r10809 * r10810;
        float r10812 = r10808 / r10811;
        float r10813 = g;
        float r10814 = -r10813;
        float r10815 = r10813 * r10813;
        float r10816 = h;
        float r10817 = r10816 * r10816;
        float r10818 = r10815 - r10817;
        float r10819 = sqrt(r10818);
        float r10820 = r10814 + r10819;
        float r10821 = r10812 * r10820;
        float r10822 = cbrt(r10821);
        float r10823 = r10814 - r10819;
        float r10824 = r10812 * r10823;
        float r10825 = cbrt(r10824);
        float r10826 = r10822 + r10825;
        return r10826;
}

double f_id(double g, double h, double a) {
        double r10827 = 1;
        double r10828 = 2;
        double r10829 = a;
        double r10830 = r10828 * r10829;
        double r10831 = r10827 / r10830;
        double r10832 = g;
        double r10833 = -r10832;
        double r10834 = r10832 * r10832;
        double r10835 = h;
        double r10836 = r10835 * r10835;
        double r10837 = r10834 - r10836;
        double r10838 = sqrt(r10837);
        double r10839 = r10833 + r10838;
        double r10840 = r10831 * r10839;
        double r10841 = cbrt(r10840);
        double r10842 = r10833 - r10838;
        double r10843 = r10831 * r10842;
        double r10844 = cbrt(r10843);
        double r10845 = r10841 + r10844;
        return r10845;
}


double f_of(float g, float h, float a) {
        float r10846 = g;
        float r10847 = h;
        float r10848 = r10846 - r10847;
        float r10849 = r10846 + r10847;
        float r10850 = r10848 * r10849;
        float r10851 = sqrt(r10850);
        float r10852 = r10851 - r10846;
        float r10853 = 3.7052507863824e-240;
        bool r10854 = r10852 <= r10853;
        float r10855 = 1;
        float r10856 = 2;
        float r10857 = a;
        float r10858 = r10856 * r10857;
        float r10859 = r10855 / r10858;
        float r10860 = -r10846;
        float r10861 = r10846 * r10846;
        float r10862 = r10847 * r10847;
        float r10863 = r10861 - r10862;
        float r10864 = sqrt(r10863);
        float r10865 = r10860 + r10864;
        float r10866 = r10859 * r10865;
        float r10867 = cbrt(r10866);
        float r10868 = cbrt(r10859);
        float r10869 = r10860 - r10864;
        float r10870 = cbrt(r10869);
        float r10871 = r10868 * r10870;
        float r10872 = r10867 + r10871;
        float r10873 = r10846 + r10846;
        float r10874 = -r10873;
        float r10875 = cbrt(r10874);
        float r10876 = cbrt(r10858);
        float r10877 = r10875 / r10876;
        float r10878 = r10849 * r10848;
        float r10879 = sqrt(r10878);
        float r10880 = r10860 - r10879;
        float r10881 = r10880 / r10858;
        float r10882 = cbrt(r10881);
        float r10883 = r10877 + r10882;
        float r10884 = r10854 ? r10872 : r10883;
        return r10884;
}

double f_od(double g, double h, double a) {
        double r10885 = g;
        double r10886 = h;
        double r10887 = r10885 - r10886;
        double r10888 = r10885 + r10886;
        double r10889 = r10887 * r10888;
        double r10890 = sqrt(r10889);
        double r10891 = r10890 - r10885;
        double r10892 = 3.7052507863824e-240;
        bool r10893 = r10891 <= r10892;
        double r10894 = 1;
        double r10895 = 2;
        double r10896 = a;
        double r10897 = r10895 * r10896;
        double r10898 = r10894 / r10897;
        double r10899 = -r10885;
        double r10900 = r10885 * r10885;
        double r10901 = r10886 * r10886;
        double r10902 = r10900 - r10901;
        double r10903 = sqrt(r10902);
        double r10904 = r10899 + r10903;
        double r10905 = r10898 * r10904;
        double r10906 = cbrt(r10905);
        double r10907 = cbrt(r10898);
        double r10908 = r10899 - r10903;
        double r10909 = cbrt(r10908);
        double r10910 = r10907 * r10909;
        double r10911 = r10906 + r10910;
        double r10912 = r10885 + r10885;
        double r10913 = -r10912;
        double r10914 = cbrt(r10913);
        double r10915 = cbrt(r10897);
        double r10916 = r10914 / r10915;
        double r10917 = r10888 * r10887;
        double r10918 = sqrt(r10917);
        double r10919 = r10899 - r10918;
        double r10920 = r10919 / r10897;
        double r10921 = cbrt(r10920);
        double r10922 = r10916 + r10921;
        double r10923 = r10893 ? r10911 : r10922;
        return r10923;
}

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 r10924, r10925, r10926, r10927, r10928, r10929, r10930, r10931, r10932, r10933, r10934, r10935, r10936, r10937, r10938, r10939, r10940, r10941, r10942;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r10924, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10925, "2", 10, MPFR_RNDN);
        mpfr_init(r10926);
        mpfr_init(r10927);
        mpfr_init(r10928);
        mpfr_init(r10929);
        mpfr_init(r10930);
        mpfr_init(r10931);
        mpfr_init(r10932);
        mpfr_init(r10933);
        mpfr_init(r10934);
        mpfr_init(r10935);
        mpfr_init(r10936);
        mpfr_init(r10937);
        mpfr_init(r10938);
        mpfr_init(r10939);
        mpfr_init(r10940);
        mpfr_init(r10941);
        mpfr_init(r10942);
}

double f_im(double g, double h, double a) {
        ;
        ;
        mpfr_set_d(r10926, a, MPFR_RNDN);
        mpfr_mul(r10927, r10925, r10926, MPFR_RNDN);
        mpfr_div(r10928, r10924, r10927, MPFR_RNDN);
        mpfr_set_d(r10929, g, MPFR_RNDN);
        mpfr_neg(r10930, r10929, MPFR_RNDN);
        mpfr_mul(r10931, r10929, r10929, MPFR_RNDN);
        mpfr_set_d(r10932, h, MPFR_RNDN);
        mpfr_mul(r10933, r10932, r10932, MPFR_RNDN);
        mpfr_sub(r10934, r10931, r10933, MPFR_RNDN);
        mpfr_sqrt(r10935, r10934, MPFR_RNDN);
        mpfr_add(r10936, r10930, r10935, MPFR_RNDN);
        mpfr_mul(r10937, r10928, r10936, MPFR_RNDN);
        mpfr_cbrt(r10938, r10937, MPFR_RNDN);
        mpfr_sub(r10939, r10930, r10935, MPFR_RNDN);
        mpfr_mul(r10940, r10928, r10939, MPFR_RNDN);
        mpfr_cbrt(r10941, r10940, MPFR_RNDN);
        mpfr_add(r10942, r10938, r10941, MPFR_RNDN);
        return mpfr_get_d(r10942, MPFR_RNDN);
}

static mpfr_t r10943, r10944, r10945, r10946, r10947, r10948, r10949, r10950, r10951, r10952, r10953, r10954, r10955, r10956, r10957, r10958, r10959, r10960, r10961, r10962, r10963, r10964, r10965, r10966, r10967, r10968, r10969, r10970, r10971, r10972, r10973, r10974, r10975, r10976, r10977, r10978, r10979, r10980, r10981;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10943);
        mpfr_init(r10944);
        mpfr_init(r10945);
        mpfr_init(r10946);
        mpfr_init(r10947);
        mpfr_init(r10948);
        mpfr_init(r10949);
        mpfr_init_set_str(r10950, "3.7052507863824e-240", 10, MPFR_RNDN);
        mpfr_init(r10951);
        mpfr_init_set_str(r10952, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10953, "2", 10, MPFR_RNDN);
        mpfr_init(r10954);
        mpfr_init(r10955);
        mpfr_init(r10956);
        mpfr_init(r10957);
        mpfr_init(r10958);
        mpfr_init(r10959);
        mpfr_init(r10960);
        mpfr_init(r10961);
        mpfr_init(r10962);
        mpfr_init(r10963);
        mpfr_init(r10964);
        mpfr_init(r10965);
        mpfr_init(r10966);
        mpfr_init(r10967);
        mpfr_init(r10968);
        mpfr_init(r10969);
        mpfr_init(r10970);
        mpfr_init(r10971);
        mpfr_init(r10972);
        mpfr_init(r10973);
        mpfr_init(r10974);
        mpfr_init(r10975);
        mpfr_init(r10976);
        mpfr_init(r10977);
        mpfr_init(r10978);
        mpfr_init(r10979);
        mpfr_init(r10980);
        mpfr_init(r10981);
}

double f_fm(double g, double h, double a) {
        mpfr_set_d(r10943, g, MPFR_RNDN);
        mpfr_set_d(r10944, h, MPFR_RNDN);
        mpfr_sub(r10945, r10943, r10944, MPFR_RNDN);
        mpfr_add(r10946, r10943, r10944, MPFR_RNDN);
        mpfr_mul(r10947, r10945, r10946, MPFR_RNDN);
        mpfr_sqrt(r10948, r10947, MPFR_RNDN);
        mpfr_sub(r10949, r10948, r10943, MPFR_RNDN);
        ;
        mpfr_set_si(r10951, mpfr_cmp(r10949, r10950) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r10954, a, MPFR_RNDN);
        mpfr_mul(r10955, r10953, r10954, MPFR_RNDN);
        mpfr_div(r10956, r10952, r10955, MPFR_RNDN);
        mpfr_neg(r10957, r10943, MPFR_RNDN);
        mpfr_mul(r10958, r10943, r10943, MPFR_RNDN);
        mpfr_mul(r10959, r10944, r10944, MPFR_RNDN);
        mpfr_sub(r10960, r10958, r10959, MPFR_RNDN);
        mpfr_sqrt(r10961, r10960, MPFR_RNDN);
        mpfr_add(r10962, r10957, r10961, MPFR_RNDN);
        mpfr_mul(r10963, r10956, r10962, MPFR_RNDN);
        mpfr_cbrt(r10964, r10963, MPFR_RNDN);
        mpfr_cbrt(r10965, r10956, MPFR_RNDN);
        mpfr_sub(r10966, r10957, r10961, MPFR_RNDN);
        mpfr_cbrt(r10967, r10966, MPFR_RNDN);
        mpfr_mul(r10968, r10965, r10967, MPFR_RNDN);
        mpfr_add(r10969, r10964, r10968, MPFR_RNDN);
        mpfr_add(r10970, r10943, r10943, MPFR_RNDN);
        mpfr_neg(r10971, r10970, MPFR_RNDN);
        mpfr_cbrt(r10972, r10971, MPFR_RNDN);
        mpfr_cbrt(r10973, r10955, MPFR_RNDN);
        mpfr_div(r10974, r10972, r10973, MPFR_RNDN);
        mpfr_mul(r10975, r10946, r10945, MPFR_RNDN);
        mpfr_sqrt(r10976, r10975, MPFR_RNDN);
        mpfr_sub(r10977, r10957, r10976, MPFR_RNDN);
        mpfr_div(r10978, r10977, r10955, MPFR_RNDN);
        mpfr_cbrt(r10979, r10978, MPFR_RNDN);
        mpfr_add(r10980, r10974, r10979, MPFR_RNDN);
        if (mpfr_get_si(r10951, MPFR_RNDN)) { mpfr_set(r10981, r10969, MPFR_RNDN); } else { mpfr_set(r10981, r10980, MPFR_RNDN); };
        return mpfr_get_d(r10981, MPFR_RNDN);
}

static mpfr_t r10982, r10983, r10984, r10985, r10986, r10987, r10988, r10989, r10990, r10991, r10992, r10993, r10994, r10995, r10996, r10997, r10998, r10999, r11000, r11001, r11002, r11003, r11004, r11005, r11006, r11007, r11008, r11009, r11010, r11011, r11012, r11013, r11014, r11015, r11016, r11017, r11018, r11019, r11020;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10982);
        mpfr_init(r10983);
        mpfr_init(r10984);
        mpfr_init(r10985);
        mpfr_init(r10986);
        mpfr_init(r10987);
        mpfr_init(r10988);
        mpfr_init_set_str(r10989, "3.7052507863824e-240", 10, MPFR_RNDN);
        mpfr_init(r10990);
        mpfr_init_set_str(r10991, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10992, "2", 10, MPFR_RNDN);
        mpfr_init(r10993);
        mpfr_init(r10994);
        mpfr_init(r10995);
        mpfr_init(r10996);
        mpfr_init(r10997);
        mpfr_init(r10998);
        mpfr_init(r10999);
        mpfr_init(r11000);
        mpfr_init(r11001);
        mpfr_init(r11002);
        mpfr_init(r11003);
        mpfr_init(r11004);
        mpfr_init(r11005);
        mpfr_init(r11006);
        mpfr_init(r11007);
        mpfr_init(r11008);
        mpfr_init(r11009);
        mpfr_init(r11010);
        mpfr_init(r11011);
        mpfr_init(r11012);
        mpfr_init(r11013);
        mpfr_init(r11014);
        mpfr_init(r11015);
        mpfr_init(r11016);
        mpfr_init(r11017);
        mpfr_init(r11018);
        mpfr_init(r11019);
        mpfr_init(r11020);
}

double f_dm(double g, double h, double a) {
        mpfr_set_d(r10982, g, MPFR_RNDN);
        mpfr_set_d(r10983, h, MPFR_RNDN);
        mpfr_sub(r10984, r10982, r10983, MPFR_RNDN);
        mpfr_add(r10985, r10982, r10983, MPFR_RNDN);
        mpfr_mul(r10986, r10984, r10985, MPFR_RNDN);
        mpfr_sqrt(r10987, r10986, MPFR_RNDN);
        mpfr_sub(r10988, r10987, r10982, MPFR_RNDN);
        ;
        mpfr_set_si(r10990, mpfr_cmp(r10988, r10989) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r10993, a, MPFR_RNDN);
        mpfr_mul(r10994, r10992, r10993, MPFR_RNDN);
        mpfr_div(r10995, r10991, r10994, MPFR_RNDN);
        mpfr_neg(r10996, r10982, MPFR_RNDN);
        mpfr_mul(r10997, r10982, r10982, MPFR_RNDN);
        mpfr_mul(r10998, r10983, r10983, MPFR_RNDN);
        mpfr_sub(r10999, r10997, r10998, MPFR_RNDN);
        mpfr_sqrt(r11000, r10999, MPFR_RNDN);
        mpfr_add(r11001, r10996, r11000, MPFR_RNDN);
        mpfr_mul(r11002, r10995, r11001, MPFR_RNDN);
        mpfr_cbrt(r11003, r11002, MPFR_RNDN);
        mpfr_cbrt(r11004, r10995, MPFR_RNDN);
        mpfr_sub(r11005, r10996, r11000, MPFR_RNDN);
        mpfr_cbrt(r11006, r11005, MPFR_RNDN);
        mpfr_mul(r11007, r11004, r11006, MPFR_RNDN);
        mpfr_add(r11008, r11003, r11007, MPFR_RNDN);
        mpfr_add(r11009, r10982, r10982, MPFR_RNDN);
        mpfr_neg(r11010, r11009, MPFR_RNDN);
        mpfr_cbrt(r11011, r11010, MPFR_RNDN);
        mpfr_cbrt(r11012, r10994, MPFR_RNDN);
        mpfr_div(r11013, r11011, r11012, MPFR_RNDN);
        mpfr_mul(r11014, r10985, r10984, MPFR_RNDN);
        mpfr_sqrt(r11015, r11014, MPFR_RNDN);
        mpfr_sub(r11016, r10996, r11015, MPFR_RNDN);
        mpfr_div(r11017, r11016, r10994, MPFR_RNDN);
        mpfr_cbrt(r11018, r11017, MPFR_RNDN);
        mpfr_add(r11019, r11013, r11018, MPFR_RNDN);
        if (mpfr_get_si(r10990, MPFR_RNDN)) { mpfr_set(r11020, r11008, MPFR_RNDN); } else { mpfr_set(r11020, r11019, MPFR_RNDN); };
        return mpfr_get_d(r11020, MPFR_RNDN);
}

