#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 r10771 = 1;
        float r10772 = 2;
        float r10773 = a;
        float r10774 = r10772 * r10773;
        float r10775 = r10771 / r10774;
        float r10776 = g;
        float r10777 = -r10776;
        float r10778 = r10776 * r10776;
        float r10779 = h;
        float r10780 = r10779 * r10779;
        float r10781 = r10778 - r10780;
        float r10782 = sqrt(r10781);
        float r10783 = r10777 + r10782;
        float r10784 = r10775 * r10783;
        float r10785 = cbrt(r10784);
        float r10786 = r10777 - r10782;
        float r10787 = r10775 * r10786;
        float r10788 = cbrt(r10787);
        float r10789 = r10785 + r10788;
        return r10789;
}

double f_id(double g, double h, double a) {
        double r10790 = 1;
        double r10791 = 2;
        double r10792 = a;
        double r10793 = r10791 * r10792;
        double r10794 = r10790 / r10793;
        double r10795 = g;
        double r10796 = -r10795;
        double r10797 = r10795 * r10795;
        double r10798 = h;
        double r10799 = r10798 * r10798;
        double r10800 = r10797 - r10799;
        double r10801 = sqrt(r10800);
        double r10802 = r10796 + r10801;
        double r10803 = r10794 * r10802;
        double r10804 = cbrt(r10803);
        double r10805 = r10796 - r10801;
        double r10806 = r10794 * r10805;
        double r10807 = cbrt(r10806);
        double r10808 = r10804 + r10807;
        return r10808;
}


double f_of(float g, float h, float a) {
        float r10809 = g;
        float r10810 = -8.99690550093112e-156;
        bool r10811 = r10809 <= r10810;
        float r10812 = 1;
        float r10813 = 2;
        float r10814 = a;
        float r10815 = r10813 * r10814;
        float r10816 = r10812 / r10815;
        float r10817 = -r10809;
        float r10818 = r10809 * r10809;
        float r10819 = h;
        float r10820 = r10819 * r10819;
        float r10821 = r10818 - r10820;
        float r10822 = sqrt(r10821);
        float r10823 = r10817 + r10822;
        float r10824 = r10816 * r10823;
        float r10825 = cbrt(r10824);
        float r10826 = r10822 - r10809;
        float r10827 = r10820 / r10826;
        float r10828 = r10816 * r10827;
        float r10829 = cbrt(r10828);
        float r10830 = r10825 + r10829;
        float r10831 = r10817 - r10822;
        float r10832 = r10820 / r10831;
        float r10833 = r10816 * r10832;
        float r10834 = cbrt(r10833);
        float r10835 = r10816 * r10831;
        float r10836 = cbrt(r10835);
        float r10837 = r10834 + r10836;
        float r10838 = r10811 ? r10830 : r10837;
        return r10838;
}

double f_od(double g, double h, double a) {
        double r10839 = g;
        double r10840 = -8.99690550093112e-156;
        bool r10841 = r10839 <= r10840;
        double r10842 = 1;
        double r10843 = 2;
        double r10844 = a;
        double r10845 = r10843 * r10844;
        double r10846 = r10842 / r10845;
        double r10847 = -r10839;
        double r10848 = r10839 * r10839;
        double r10849 = h;
        double r10850 = r10849 * r10849;
        double r10851 = r10848 - r10850;
        double r10852 = sqrt(r10851);
        double r10853 = r10847 + r10852;
        double r10854 = r10846 * r10853;
        double r10855 = cbrt(r10854);
        double r10856 = r10852 - r10839;
        double r10857 = r10850 / r10856;
        double r10858 = r10846 * r10857;
        double r10859 = cbrt(r10858);
        double r10860 = r10855 + r10859;
        double r10861 = r10847 - r10852;
        double r10862 = r10850 / r10861;
        double r10863 = r10846 * r10862;
        double r10864 = cbrt(r10863);
        double r10865 = r10846 * r10861;
        double r10866 = cbrt(r10865);
        double r10867 = r10864 + r10866;
        double r10868 = r10841 ? r10860 : r10867;
        return r10868;
}

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 r10869, r10870, r10871, r10872, r10873, r10874, r10875, r10876, r10877, r10878, r10879, r10880, r10881, r10882, r10883, r10884, r10885, r10886, r10887;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r10869, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10870, "2", 10, MPFR_RNDN);
        mpfr_init(r10871);
        mpfr_init(r10872);
        mpfr_init(r10873);
        mpfr_init(r10874);
        mpfr_init(r10875);
        mpfr_init(r10876);
        mpfr_init(r10877);
        mpfr_init(r10878);
        mpfr_init(r10879);
        mpfr_init(r10880);
        mpfr_init(r10881);
        mpfr_init(r10882);
        mpfr_init(r10883);
        mpfr_init(r10884);
        mpfr_init(r10885);
        mpfr_init(r10886);
        mpfr_init(r10887);
}

double f_im(double g, double h, double a) {
        ;
        ;
        mpfr_set_d(r10871, a, MPFR_RNDN);
        mpfr_mul(r10872, r10870, r10871, MPFR_RNDN);
        mpfr_div(r10873, r10869, r10872, MPFR_RNDN);
        mpfr_set_d(r10874, g, MPFR_RNDN);
        mpfr_neg(r10875, r10874, MPFR_RNDN);
        mpfr_mul(r10876, r10874, r10874, MPFR_RNDN);
        mpfr_set_d(r10877, h, MPFR_RNDN);
        mpfr_mul(r10878, r10877, r10877, MPFR_RNDN);
        mpfr_sub(r10879, r10876, r10878, MPFR_RNDN);
        mpfr_sqrt(r10880, r10879, MPFR_RNDN);
        mpfr_add(r10881, r10875, r10880, MPFR_RNDN);
        mpfr_mul(r10882, r10873, r10881, MPFR_RNDN);
        mpfr_cbrt(r10883, r10882, MPFR_RNDN);
        mpfr_sub(r10884, r10875, r10880, MPFR_RNDN);
        mpfr_mul(r10885, r10873, r10884, MPFR_RNDN);
        mpfr_cbrt(r10886, r10885, MPFR_RNDN);
        mpfr_add(r10887, r10883, r10886, MPFR_RNDN);
        return mpfr_get_d(r10887, MPFR_RNDN);
}

static mpfr_t r10888, r10889, r10890, r10891, r10892, r10893, r10894, r10895, r10896, r10897, r10898, r10899, r10900, r10901, r10902, r10903, r10904, r10905, r10906, r10907, r10908, r10909, r10910, r10911, r10912, r10913, r10914, r10915, r10916, r10917;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10888);
        mpfr_init_set_str(r10889, "-8.99690550093112e-156", 10, MPFR_RNDN);
        mpfr_init(r10890);
        mpfr_init_set_str(r10891, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10892, "2", 10, MPFR_RNDN);
        mpfr_init(r10893);
        mpfr_init(r10894);
        mpfr_init(r10895);
        mpfr_init(r10896);
        mpfr_init(r10897);
        mpfr_init(r10898);
        mpfr_init(r10899);
        mpfr_init(r10900);
        mpfr_init(r10901);
        mpfr_init(r10902);
        mpfr_init(r10903);
        mpfr_init(r10904);
        mpfr_init(r10905);
        mpfr_init(r10906);
        mpfr_init(r10907);
        mpfr_init(r10908);
        mpfr_init(r10909);
        mpfr_init(r10910);
        mpfr_init(r10911);
        mpfr_init(r10912);
        mpfr_init(r10913);
        mpfr_init(r10914);
        mpfr_init(r10915);
        mpfr_init(r10916);
        mpfr_init(r10917);
}

double f_fm(double g, double h, double a) {
        mpfr_set_d(r10888, g, MPFR_RNDN);
        ;
        mpfr_set_si(r10890, mpfr_cmp(r10888, r10889) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r10893, a, MPFR_RNDN);
        mpfr_mul(r10894, r10892, r10893, MPFR_RNDN);
        mpfr_div(r10895, r10891, r10894, MPFR_RNDN);
        mpfr_neg(r10896, r10888, MPFR_RNDN);
        mpfr_mul(r10897, r10888, r10888, MPFR_RNDN);
        mpfr_set_d(r10898, h, MPFR_RNDN);
        mpfr_mul(r10899, r10898, r10898, MPFR_RNDN);
        mpfr_sub(r10900, r10897, r10899, MPFR_RNDN);
        mpfr_sqrt(r10901, r10900, MPFR_RNDN);
        mpfr_add(r10902, r10896, r10901, MPFR_RNDN);
        mpfr_mul(r10903, r10895, r10902, MPFR_RNDN);
        mpfr_cbrt(r10904, r10903, MPFR_RNDN);
        mpfr_sub(r10905, r10901, r10888, MPFR_RNDN);
        mpfr_div(r10906, r10899, r10905, MPFR_RNDN);
        mpfr_mul(r10907, r10895, r10906, MPFR_RNDN);
        mpfr_cbrt(r10908, r10907, MPFR_RNDN);
        mpfr_add(r10909, r10904, r10908, MPFR_RNDN);
        mpfr_sub(r10910, r10896, r10901, MPFR_RNDN);
        mpfr_div(r10911, r10899, r10910, MPFR_RNDN);
        mpfr_mul(r10912, r10895, r10911, MPFR_RNDN);
        mpfr_cbrt(r10913, r10912, MPFR_RNDN);
        mpfr_mul(r10914, r10895, r10910, MPFR_RNDN);
        mpfr_cbrt(r10915, r10914, MPFR_RNDN);
        mpfr_add(r10916, r10913, r10915, MPFR_RNDN);
        if (mpfr_get_si(r10890, MPFR_RNDN)) { mpfr_set(r10917, r10909, MPFR_RNDN); } else { mpfr_set(r10917, r10916, MPFR_RNDN); };
        return mpfr_get_d(r10917, MPFR_RNDN);
}

static mpfr_t r10918, r10919, r10920, r10921, r10922, r10923, r10924, r10925, r10926, r10927, r10928, r10929, r10930, r10931, r10932, r10933, r10934, r10935, r10936, r10937, r10938, r10939, r10940, r10941, r10942, r10943, r10944, r10945, r10946, r10947;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10918);
        mpfr_init_set_str(r10919, "-8.99690550093112e-156", 10, MPFR_RNDN);
        mpfr_init(r10920);
        mpfr_init_set_str(r10921, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10922, "2", 10, MPFR_RNDN);
        mpfr_init(r10923);
        mpfr_init(r10924);
        mpfr_init(r10925);
        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);
        mpfr_init(r10943);
        mpfr_init(r10944);
        mpfr_init(r10945);
        mpfr_init(r10946);
        mpfr_init(r10947);
}

double f_dm(double g, double h, double a) {
        mpfr_set_d(r10918, g, MPFR_RNDN);
        ;
        mpfr_set_si(r10920, mpfr_cmp(r10918, r10919) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r10923, a, MPFR_RNDN);
        mpfr_mul(r10924, r10922, r10923, MPFR_RNDN);
        mpfr_div(r10925, r10921, r10924, MPFR_RNDN);
        mpfr_neg(r10926, r10918, MPFR_RNDN);
        mpfr_mul(r10927, r10918, r10918, MPFR_RNDN);
        mpfr_set_d(r10928, h, MPFR_RNDN);
        mpfr_mul(r10929, r10928, r10928, MPFR_RNDN);
        mpfr_sub(r10930, r10927, r10929, MPFR_RNDN);
        mpfr_sqrt(r10931, r10930, MPFR_RNDN);
        mpfr_add(r10932, r10926, r10931, MPFR_RNDN);
        mpfr_mul(r10933, r10925, r10932, MPFR_RNDN);
        mpfr_cbrt(r10934, r10933, MPFR_RNDN);
        mpfr_sub(r10935, r10931, r10918, MPFR_RNDN);
        mpfr_div(r10936, r10929, r10935, MPFR_RNDN);
        mpfr_mul(r10937, r10925, r10936, MPFR_RNDN);
        mpfr_cbrt(r10938, r10937, MPFR_RNDN);
        mpfr_add(r10939, r10934, r10938, MPFR_RNDN);
        mpfr_sub(r10940, r10926, r10931, MPFR_RNDN);
        mpfr_div(r10941, r10929, r10940, MPFR_RNDN);
        mpfr_mul(r10942, r10925, r10941, MPFR_RNDN);
        mpfr_cbrt(r10943, r10942, MPFR_RNDN);
        mpfr_mul(r10944, r10925, r10940, MPFR_RNDN);
        mpfr_cbrt(r10945, r10944, MPFR_RNDN);
        mpfr_add(r10946, r10943, r10945, MPFR_RNDN);
        if (mpfr_get_si(r10920, MPFR_RNDN)) { mpfr_set(r10947, r10939, MPFR_RNDN); } else { mpfr_set(r10947, r10946, MPFR_RNDN); };
        return mpfr_get_d(r10947, MPFR_RNDN);
}

