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

char *name = "quad2m (problem 3.2.1, negative)";

double f_if(float a, float b_2F2, float c) {
        float r19857 = b_2F2;
        float r19858 = -r19857;
        float r19859 = r19857 * r19857;
        float r19860 = a;
        float r19861 = c;
        float r19862 = r19860 * r19861;
        float r19863 = r19859 - r19862;
        float r19864 = sqrt(r19863);
        float r19865 = r19858 - r19864;
        float r19866 = r19865 / r19860;
        return r19866;
}

double f_id(double a, double b_2F2, double c) {
        double r19867 = b_2F2;
        double r19868 = -r19867;
        double r19869 = r19867 * r19867;
        double r19870 = a;
        double r19871 = c;
        double r19872 = r19870 * r19871;
        double r19873 = r19869 - r19872;
        double r19874 = sqrt(r19873);
        double r19875 = r19868 - r19874;
        double r19876 = r19875 / r19870;
        return r19876;
}


double f_of(float a, float b_2F2, float c) {
        float r19877 = b_2F2;
        float r19878 = -6.539512710864403e+66;
        bool r19879 = r19877 <= r19878;
        float r19880 = c;
        float r19881 = r19880 / r19877;
        float r19882 = -1/2;
        float r19883 = r19881 * r19882;
        float r19884 = -3.4571144459829794e-131;
        bool r19885 = r19877 <= r19884;
        float r19886 = 3.1746500024866854e+75;
        bool r19887 = r19877 <= r19886;
        float r19888 = -r19877;
        float r19889 = a;
        float r19890 = r19888 / r19889;
        float r19891 = r19877 * r19877;
        float r19892 = r19889 * r19880;
        float r19893 = r19891 - r19892;
        float r19894 = sqrt(r19893);
        float r19895 = r19894 / r19889;
        float r19896 = r19890 - r19895;
        float r19897 = 1/2;
        float r19898 = r19897 * r19881;
        float r19899 = r19888 - r19877;
        float r19900 = r19899 / r19889;
        float r19901 = r19898 + r19900;
        float r19902 = r19887 ? r19896 : r19901;
        float r19903 = r19885 ? r19883 : r19902;
        float r19904 = r19879 ? r19883 : r19903;
        return r19904;
}

double f_od(double a, double b_2F2, double c) {
        double r19905 = b_2F2;
        double r19906 = -6.539512710864403e+66;
        bool r19907 = r19905 <= r19906;
        double r19908 = c;
        double r19909 = r19908 / r19905;
        double r19910 = -1/2;
        double r19911 = r19909 * r19910;
        double r19912 = -3.4571144459829794e-131;
        bool r19913 = r19905 <= r19912;
        double r19914 = 3.1746500024866854e+75;
        bool r19915 = r19905 <= r19914;
        double r19916 = -r19905;
        double r19917 = a;
        double r19918 = r19916 / r19917;
        double r19919 = r19905 * r19905;
        double r19920 = r19917 * r19908;
        double r19921 = r19919 - r19920;
        double r19922 = sqrt(r19921);
        double r19923 = r19922 / r19917;
        double r19924 = r19918 - r19923;
        double r19925 = 1/2;
        double r19926 = r19925 * r19909;
        double r19927 = r19916 - r19905;
        double r19928 = r19927 / r19917;
        double r19929 = r19926 + r19928;
        double r19930 = r19915 ? r19924 : r19929;
        double r19931 = r19913 ? r19911 : r19930;
        double r19932 = r19907 ? r19911 : r19931;
        return r19932;
}

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 r19933, r19934, r19935, r19936, r19937, r19938, r19939, r19940, r19941, r19942;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3216);
        mpfr_init(r19933);
        mpfr_init(r19934);
        mpfr_init(r19935);
        mpfr_init(r19936);
        mpfr_init(r19937);
        mpfr_init(r19938);
        mpfr_init(r19939);
        mpfr_init(r19940);
        mpfr_init(r19941);
        mpfr_init(r19942);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r19933, b_2F2, MPFR_RNDN);
        mpfr_neg(r19934, r19933, MPFR_RNDN);
        mpfr_mul(r19935, r19933, r19933, MPFR_RNDN);
        mpfr_set_d(r19936, a, MPFR_RNDN);
        mpfr_set_d(r19937, c, MPFR_RNDN);
        mpfr_mul(r19938, r19936, r19937, MPFR_RNDN);
        mpfr_sub(r19939, r19935, r19938, MPFR_RNDN);
        mpfr_sqrt(r19940, r19939, MPFR_RNDN);
        mpfr_sub(r19941, r19934, r19940, MPFR_RNDN);
        mpfr_div(r19942, r19941, r19936, MPFR_RNDN);
        return mpfr_get_d(r19942, MPFR_RNDN);
}

static mpfr_t r19943, r19944, r19945, r19946, r19947, r19948, r19949, r19950, r19951, r19952, r19953, r19954, r19955, r19956, r19957, r19958, r19959, r19960, r19961, r19962, r19963, r19964, r19965, r19966, r19967, r19968, r19969, r19970;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3216);
        mpfr_init(r19943);
        mpfr_init_set_str(r19944, "-6.539512710864403e+66", 10, MPFR_RNDN);
        mpfr_init(r19945);
        mpfr_init(r19946);
        mpfr_init(r19947);
        mpfr_init_set_str(r19948, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r19949);
        mpfr_init_set_str(r19950, "-3.4571144459829794e-131", 10, MPFR_RNDN);
        mpfr_init(r19951);
        mpfr_init_set_str(r19952, "3.1746500024866854e+75", 10, MPFR_RNDN);
        mpfr_init(r19953);
        mpfr_init(r19954);
        mpfr_init(r19955);
        mpfr_init(r19956);
        mpfr_init(r19957);
        mpfr_init(r19958);
        mpfr_init(r19959);
        mpfr_init(r19960);
        mpfr_init(r19961);
        mpfr_init(r19962);
        mpfr_init_set_str(r19963, "1/2", 10, MPFR_RNDN);
        mpfr_init(r19964);
        mpfr_init(r19965);
        mpfr_init(r19966);
        mpfr_init(r19967);
        mpfr_init(r19968);
        mpfr_init(r19969);
        mpfr_init(r19970);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r19943, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r19945, mpfr_cmp(r19943, r19944) <= 0, MPFR_RNDN);
        mpfr_set_d(r19946, c, MPFR_RNDN);
        mpfr_div(r19947, r19946, r19943, MPFR_RNDN);
        ;
        mpfr_mul(r19949, r19947, r19948, MPFR_RNDN);
        ;
        mpfr_set_si(r19951, mpfr_cmp(r19943, r19950) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r19953, mpfr_cmp(r19943, r19952) <= 0, MPFR_RNDN);
        mpfr_neg(r19954, r19943, MPFR_RNDN);
        mpfr_set_d(r19955, a, MPFR_RNDN);
        mpfr_div(r19956, r19954, r19955, MPFR_RNDN);
        mpfr_mul(r19957, r19943, r19943, MPFR_RNDN);
        mpfr_mul(r19958, r19955, r19946, MPFR_RNDN);
        mpfr_sub(r19959, r19957, r19958, MPFR_RNDN);
        mpfr_sqrt(r19960, r19959, MPFR_RNDN);
        mpfr_div(r19961, r19960, r19955, MPFR_RNDN);
        mpfr_sub(r19962, r19956, r19961, MPFR_RNDN);
        ;
        mpfr_mul(r19964, r19963, r19947, MPFR_RNDN);
        mpfr_sub(r19965, r19954, r19943, MPFR_RNDN);
        mpfr_div(r19966, r19965, r19955, MPFR_RNDN);
        mpfr_add(r19967, r19964, r19966, MPFR_RNDN);
        if (mpfr_get_si(r19953, MPFR_RNDN)) { mpfr_set(r19968, r19962, MPFR_RNDN); } else { mpfr_set(r19968, r19967, MPFR_RNDN); };
        if (mpfr_get_si(r19951, MPFR_RNDN)) { mpfr_set(r19969, r19949, MPFR_RNDN); } else { mpfr_set(r19969, r19968, MPFR_RNDN); };
        if (mpfr_get_si(r19945, MPFR_RNDN)) { mpfr_set(r19970, r19949, MPFR_RNDN); } else { mpfr_set(r19970, r19969, MPFR_RNDN); };
        return mpfr_get_d(r19970, MPFR_RNDN);
}

static mpfr_t r19971, r19972, r19973, r19974, r19975, r19976, r19977, r19978, r19979, r19980, r19981, r19982, r19983, r19984, r19985, r19986, r19987, r19988, r19989, r19990, r19991, r19992, r19993, r19994, r19995, r19996, r19997, r19998;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3216);
        mpfr_init(r19971);
        mpfr_init_set_str(r19972, "-6.539512710864403e+66", 10, MPFR_RNDN);
        mpfr_init(r19973);
        mpfr_init(r19974);
        mpfr_init(r19975);
        mpfr_init_set_str(r19976, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r19977);
        mpfr_init_set_str(r19978, "-3.4571144459829794e-131", 10, MPFR_RNDN);
        mpfr_init(r19979);
        mpfr_init_set_str(r19980, "3.1746500024866854e+75", 10, MPFR_RNDN);
        mpfr_init(r19981);
        mpfr_init(r19982);
        mpfr_init(r19983);
        mpfr_init(r19984);
        mpfr_init(r19985);
        mpfr_init(r19986);
        mpfr_init(r19987);
        mpfr_init(r19988);
        mpfr_init(r19989);
        mpfr_init(r19990);
        mpfr_init_set_str(r19991, "1/2", 10, MPFR_RNDN);
        mpfr_init(r19992);
        mpfr_init(r19993);
        mpfr_init(r19994);
        mpfr_init(r19995);
        mpfr_init(r19996);
        mpfr_init(r19997);
        mpfr_init(r19998);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r19971, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r19973, mpfr_cmp(r19971, r19972) <= 0, MPFR_RNDN);
        mpfr_set_d(r19974, c, MPFR_RNDN);
        mpfr_div(r19975, r19974, r19971, MPFR_RNDN);
        ;
        mpfr_mul(r19977, r19975, r19976, MPFR_RNDN);
        ;
        mpfr_set_si(r19979, mpfr_cmp(r19971, r19978) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r19981, mpfr_cmp(r19971, r19980) <= 0, MPFR_RNDN);
        mpfr_neg(r19982, r19971, MPFR_RNDN);
        mpfr_set_d(r19983, a, MPFR_RNDN);
        mpfr_div(r19984, r19982, r19983, MPFR_RNDN);
        mpfr_mul(r19985, r19971, r19971, MPFR_RNDN);
        mpfr_mul(r19986, r19983, r19974, MPFR_RNDN);
        mpfr_sub(r19987, r19985, r19986, MPFR_RNDN);
        mpfr_sqrt(r19988, r19987, MPFR_RNDN);
        mpfr_div(r19989, r19988, r19983, MPFR_RNDN);
        mpfr_sub(r19990, r19984, r19989, MPFR_RNDN);
        ;
        mpfr_mul(r19992, r19991, r19975, MPFR_RNDN);
        mpfr_sub(r19993, r19982, r19971, MPFR_RNDN);
        mpfr_div(r19994, r19993, r19983, MPFR_RNDN);
        mpfr_add(r19995, r19992, r19994, MPFR_RNDN);
        if (mpfr_get_si(r19981, MPFR_RNDN)) { mpfr_set(r19996, r19990, MPFR_RNDN); } else { mpfr_set(r19996, r19995, MPFR_RNDN); };
        if (mpfr_get_si(r19979, MPFR_RNDN)) { mpfr_set(r19997, r19977, MPFR_RNDN); } else { mpfr_set(r19997, r19996, MPFR_RNDN); };
        if (mpfr_get_si(r19973, MPFR_RNDN)) { mpfr_set(r19998, r19977, MPFR_RNDN); } else { mpfr_set(r19998, r19997, MPFR_RNDN); };
        return mpfr_get_d(r19998, MPFR_RNDN);
}

