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

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

double f_if(float g, float h) {
        float r37633 = 2;
        float r37634 = atan2(1.0, 0.0);
        float r37635 = r37633 * r37634;
        float r37636 = 3;
        float r37637 = r37635 / r37636;
        float r37638 = g;
        float r37639 = -r37638;
        float r37640 = h;
        float r37641 = r37639 / r37640;
        float r37642 = acos(r37641);
        float r37643 = r37642 / r37636;
        float r37644 = r37637 + r37643;
        float r37645 = cos(r37644);
        float r37646 = r37633 * r37645;
        return r37646;
}

double f_id(double g, double h) {
        double r37647 = 2;
        double r37648 = atan2(1.0, 0.0);
        double r37649 = r37647 * r37648;
        double r37650 = 3;
        double r37651 = r37649 / r37650;
        double r37652 = g;
        double r37653 = -r37652;
        double r37654 = h;
        double r37655 = r37653 / r37654;
        double r37656 = acos(r37655);
        double r37657 = r37656 / r37650;
        double r37658 = r37651 + r37657;
        double r37659 = cos(r37658);
        double r37660 = r37647 * r37659;
        return r37660;
}


double f_of(float g, float h) {
        float r37661 = 2;
        float r37662 = g;
        float r37663 = h;
        float r37664 = r37662 / r37663;
        float r37665 = acos(r37664);
        float r37666 = 3;
        float r37667 = r37665 / r37666;
        float r37668 = cos(r37667);
        float r37669 = 1;
        float r37670 = r37661 + r37669;
        float r37671 = atan2(1.0, 0.0);
        float r37672 = r37671 / r37666;
        float r37673 = r37670 * r37672;
        float r37674 = cos(r37673);
        float r37675 = r37668 * r37674;
        float r37676 = sin(r37667);
        float r37677 = sin(r37673);
        float r37678 = r37676 * r37677;
        float r37679 = r37675 + r37678;
        float r37680 = r37661 * r37679;
        return r37680;
}

double f_od(double g, double h) {
        double r37681 = 2;
        double r37682 = g;
        double r37683 = h;
        double r37684 = r37682 / r37683;
        double r37685 = acos(r37684);
        double r37686 = 3;
        double r37687 = r37685 / r37686;
        double r37688 = cos(r37687);
        double r37689 = 1;
        double r37690 = r37681 + r37689;
        double r37691 = atan2(1.0, 0.0);
        double r37692 = r37691 / r37686;
        double r37693 = r37690 * r37692;
        double r37694 = cos(r37693);
        double r37695 = r37688 * r37694;
        double r37696 = sin(r37687);
        double r37697 = sin(r37693);
        double r37698 = r37696 * r37697;
        double r37699 = r37695 + r37698;
        double r37700 = r37681 * r37699;
        return r37700;
}

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 r37701, r37702, r37703, r37704, r37705, r37706, r37707, r37708, r37709, r37710, r37711, r37712, r37713, r37714;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37701, "2", 10, MPFR_RNDN);
        mpfr_init(r37702);
        mpfr_init(r37703);
        mpfr_init_set_str(r37704, "3", 10, MPFR_RNDN);
        mpfr_init(r37705);
        mpfr_init(r37706);
        mpfr_init(r37707);
        mpfr_init(r37708);
        mpfr_init(r37709);
        mpfr_init(r37710);
        mpfr_init(r37711);
        mpfr_init(r37712);
        mpfr_init(r37713);
        mpfr_init(r37714);
}

double f_im(double g, double h) {
        ;
        mpfr_const_pi(r37702, MPFR_RNDN);
        mpfr_mul(r37703, r37701, r37702, MPFR_RNDN);
        ;
        mpfr_div(r37705, r37703, r37704, MPFR_RNDN);
        mpfr_set_d(r37706, g, MPFR_RNDN);
        mpfr_neg(r37707, r37706, MPFR_RNDN);
        mpfr_set_d(r37708, h, MPFR_RNDN);
        mpfr_div(r37709, r37707, r37708, MPFR_RNDN);
        mpfr_acos(r37710, r37709, MPFR_RNDN);
        mpfr_div(r37711, r37710, r37704, MPFR_RNDN);
        mpfr_add(r37712, r37705, r37711, MPFR_RNDN);
        mpfr_cos(r37713, r37712, MPFR_RNDN);
        mpfr_mul(r37714, r37701, r37713, MPFR_RNDN);
        return mpfr_get_d(r37714, MPFR_RNDN);
}

static mpfr_t r37715, r37716, r37717, r37718, r37719, r37720, r37721, r37722, r37723, r37724, r37725, r37726, r37727, r37728, r37729, r37730, r37731, r37732, r37733, r37734;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37715, "2", 10, MPFR_RNDN);
        mpfr_init(r37716);
        mpfr_init(r37717);
        mpfr_init(r37718);
        mpfr_init(r37719);
        mpfr_init_set_str(r37720, "3", 10, MPFR_RNDN);
        mpfr_init(r37721);
        mpfr_init(r37722);
        mpfr_init_set_str(r37723, "1", 10, MPFR_RNDN);
        mpfr_init(r37724);
        mpfr_init(r37725);
        mpfr_init(r37726);
        mpfr_init(r37727);
        mpfr_init(r37728);
        mpfr_init(r37729);
        mpfr_init(r37730);
        mpfr_init(r37731);
        mpfr_init(r37732);
        mpfr_init(r37733);
        mpfr_init(r37734);
}

double f_fm(double g, double h) {
        ;
        mpfr_set_d(r37716, g, MPFR_RNDN);
        mpfr_set_d(r37717, h, MPFR_RNDN);
        mpfr_div(r37718, r37716, r37717, MPFR_RNDN);
        mpfr_acos(r37719, r37718, MPFR_RNDN);
        ;
        mpfr_div(r37721, r37719, r37720, MPFR_RNDN);
        mpfr_cos(r37722, r37721, MPFR_RNDN);
        ;
        mpfr_add(r37724, r37715, r37723, MPFR_RNDN);
        mpfr_const_pi(r37725, MPFR_RNDN);
        mpfr_div(r37726, r37725, r37720, MPFR_RNDN);
        mpfr_mul(r37727, r37724, r37726, MPFR_RNDN);
        mpfr_cos(r37728, r37727, MPFR_RNDN);
        mpfr_mul(r37729, r37722, r37728, MPFR_RNDN);
        mpfr_sin(r37730, r37721, MPFR_RNDN);
        mpfr_sin(r37731, r37727, MPFR_RNDN);
        mpfr_mul(r37732, r37730, r37731, MPFR_RNDN);
        mpfr_add(r37733, r37729, r37732, MPFR_RNDN);
        mpfr_mul(r37734, r37715, r37733, MPFR_RNDN);
        return mpfr_get_d(r37734, MPFR_RNDN);
}

static mpfr_t r37735, r37736, r37737, r37738, r37739, r37740, r37741, r37742, r37743, r37744, r37745, r37746, r37747, r37748, r37749, r37750, r37751, r37752, r37753, r37754;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37735, "2", 10, MPFR_RNDN);
        mpfr_init(r37736);
        mpfr_init(r37737);
        mpfr_init(r37738);
        mpfr_init(r37739);
        mpfr_init_set_str(r37740, "3", 10, MPFR_RNDN);
        mpfr_init(r37741);
        mpfr_init(r37742);
        mpfr_init_set_str(r37743, "1", 10, MPFR_RNDN);
        mpfr_init(r37744);
        mpfr_init(r37745);
        mpfr_init(r37746);
        mpfr_init(r37747);
        mpfr_init(r37748);
        mpfr_init(r37749);
        mpfr_init(r37750);
        mpfr_init(r37751);
        mpfr_init(r37752);
        mpfr_init(r37753);
        mpfr_init(r37754);
}

double f_dm(double g, double h) {
        ;
        mpfr_set_d(r37736, g, MPFR_RNDN);
        mpfr_set_d(r37737, h, MPFR_RNDN);
        mpfr_div(r37738, r37736, r37737, MPFR_RNDN);
        mpfr_acos(r37739, r37738, MPFR_RNDN);
        ;
        mpfr_div(r37741, r37739, r37740, MPFR_RNDN);
        mpfr_cos(r37742, r37741, MPFR_RNDN);
        ;
        mpfr_add(r37744, r37735, r37743, MPFR_RNDN);
        mpfr_const_pi(r37745, MPFR_RNDN);
        mpfr_div(r37746, r37745, r37740, MPFR_RNDN);
        mpfr_mul(r37747, r37744, r37746, MPFR_RNDN);
        mpfr_cos(r37748, r37747, MPFR_RNDN);
        mpfr_mul(r37749, r37742, r37748, MPFR_RNDN);
        mpfr_sin(r37750, r37741, MPFR_RNDN);
        mpfr_sin(r37751, r37747, MPFR_RNDN);
        mpfr_mul(r37752, r37750, r37751, MPFR_RNDN);
        mpfr_add(r37753, r37749, r37752, MPFR_RNDN);
        mpfr_mul(r37754, r37735, r37753, MPFR_RNDN);
        return mpfr_get_d(r37754, MPFR_RNDN);
}

