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

char *name = "NMSE problem 3.2.1";

double f_if(float a, float b_2F2, float c) {
        float r27855 = b_2F2;
        float r27856 = -r27855;
        float r27857 = r27855 * r27855;
        float r27858 = a;
        float r27859 = c;
        float r27860 = r27858 * r27859;
        float r27861 = r27857 - r27860;
        float r27862 = sqrt(r27861);
        float r27863 = r27856 - r27862;
        float r27864 = r27863 / r27858;
        return r27864;
}

double f_id(double a, double b_2F2, double c) {
        double r27865 = b_2F2;
        double r27866 = -r27865;
        double r27867 = r27865 * r27865;
        double r27868 = a;
        double r27869 = c;
        double r27870 = r27868 * r27869;
        double r27871 = r27867 - r27870;
        double r27872 = sqrt(r27871);
        double r27873 = r27866 - r27872;
        double r27874 = r27873 / r27868;
        return r27874;
}


double f_of(float a, float b_2F2, float c) {
        float r27875 = b_2F2;
        float r27876 = -1.1872979988150526e+32;
        bool r27877 = r27875 <= r27876;
        float r27878 = c;
        float r27879 = r27878 / r27875;
        float r27880 = -1/2;
        float r27881 = r27879 * r27880;
        float r27882 = -4.377552981619987e-103;
        bool r27883 = r27875 <= r27882;
        float r27884 = a;
        float r27885 = r27878 * r27884;
        float r27886 = -r27875;
        float r27887 = r27875 * r27875;
        float r27888 = r27884 * r27878;
        float r27889 = r27887 - r27888;
        float r27890 = sqrt(r27889);
        float r27891 = r27886 + r27890;
        float r27892 = r27885 / r27891;
        float r27893 = r27892 / r27884;
        float r27894 = 1.2486973271270074e+81;
        bool r27895 = r27875 <= r27894;
        float r27896 = r27886 - r27890;
        float r27897 = r27896 / r27884;
        float r27898 = -2;
        float r27899 = r27875 / r27884;
        float r27900 = r27898 * r27899;
        float r27901 = r27895 ? r27897 : r27900;
        float r27902 = r27883 ? r27893 : r27901;
        float r27903 = r27877 ? r27881 : r27902;
        return r27903;
}

double f_od(double a, double b_2F2, double c) {
        double r27904 = b_2F2;
        double r27905 = -1.1872979988150526e+32;
        bool r27906 = r27904 <= r27905;
        double r27907 = c;
        double r27908 = r27907 / r27904;
        double r27909 = -1/2;
        double r27910 = r27908 * r27909;
        double r27911 = -4.377552981619987e-103;
        bool r27912 = r27904 <= r27911;
        double r27913 = a;
        double r27914 = r27907 * r27913;
        double r27915 = -r27904;
        double r27916 = r27904 * r27904;
        double r27917 = r27913 * r27907;
        double r27918 = r27916 - r27917;
        double r27919 = sqrt(r27918);
        double r27920 = r27915 + r27919;
        double r27921 = r27914 / r27920;
        double r27922 = r27921 / r27913;
        double r27923 = 1.2486973271270074e+81;
        bool r27924 = r27904 <= r27923;
        double r27925 = r27915 - r27919;
        double r27926 = r27925 / r27913;
        double r27927 = -2;
        double r27928 = r27904 / r27913;
        double r27929 = r27927 * r27928;
        double r27930 = r27924 ? r27926 : r27929;
        double r27931 = r27912 ? r27922 : r27930;
        double r27932 = r27906 ? r27910 : r27931;
        return r27932;
}

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 r27933, r27934, r27935, r27936, r27937, r27938, r27939, r27940, r27941, r27942;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3216);
        mpfr_init(r27933);
        mpfr_init(r27934);
        mpfr_init(r27935);
        mpfr_init(r27936);
        mpfr_init(r27937);
        mpfr_init(r27938);
        mpfr_init(r27939);
        mpfr_init(r27940);
        mpfr_init(r27941);
        mpfr_init(r27942);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r27933, b_2F2, MPFR_RNDN);
        mpfr_neg(r27934, r27933, MPFR_RNDN);
        mpfr_mul(r27935, r27933, r27933, MPFR_RNDN);
        mpfr_set_d(r27936, a, MPFR_RNDN);
        mpfr_set_d(r27937, c, MPFR_RNDN);
        mpfr_mul(r27938, r27936, r27937, MPFR_RNDN);
        mpfr_sub(r27939, r27935, r27938, MPFR_RNDN);
        mpfr_sqrt(r27940, r27939, MPFR_RNDN);
        mpfr_sub(r27941, r27934, r27940, MPFR_RNDN);
        mpfr_div(r27942, r27941, r27936, MPFR_RNDN);
        return mpfr_get_d(r27942, MPFR_RNDN);
}

static mpfr_t r27943, r27944, r27945, r27946, r27947, r27948, r27949, r27950, r27951, r27952, r27953, r27954, r27955, r27956, r27957, r27958, r27959, r27960, r27961, r27962, r27963, r27964, r27965, r27966, r27967, r27968, r27969, r27970, r27971;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3216);
        mpfr_init(r27943);
        mpfr_init_set_str(r27944, "-1.1872979988150526e+32", 10, MPFR_RNDN);
        mpfr_init(r27945);
        mpfr_init(r27946);
        mpfr_init(r27947);
        mpfr_init_set_str(r27948, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r27949);
        mpfr_init_set_str(r27950, "-4.377552981619987e-103", 10, MPFR_RNDN);
        mpfr_init(r27951);
        mpfr_init(r27952);
        mpfr_init(r27953);
        mpfr_init(r27954);
        mpfr_init(r27955);
        mpfr_init(r27956);
        mpfr_init(r27957);
        mpfr_init(r27958);
        mpfr_init(r27959);
        mpfr_init(r27960);
        mpfr_init(r27961);
        mpfr_init_set_str(r27962, "1.2486973271270074e+81", 10, MPFR_RNDN);
        mpfr_init(r27963);
        mpfr_init(r27964);
        mpfr_init(r27965);
        mpfr_init_set_str(r27966, "-2", 10, MPFR_RNDN);
        mpfr_init(r27967);
        mpfr_init(r27968);
        mpfr_init(r27969);
        mpfr_init(r27970);
        mpfr_init(r27971);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r27943, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r27945, mpfr_cmp(r27943, r27944) <= 0, MPFR_RNDN);
        mpfr_set_d(r27946, c, MPFR_RNDN);
        mpfr_div(r27947, r27946, r27943, MPFR_RNDN);
        ;
        mpfr_mul(r27949, r27947, r27948, MPFR_RNDN);
        ;
        mpfr_set_si(r27951, mpfr_cmp(r27943, r27950) <= 0, MPFR_RNDN);
        mpfr_set_d(r27952, a, MPFR_RNDN);
        mpfr_mul(r27953, r27946, r27952, MPFR_RNDN);
        mpfr_neg(r27954, r27943, MPFR_RNDN);
        mpfr_mul(r27955, r27943, r27943, MPFR_RNDN);
        mpfr_mul(r27956, r27952, r27946, MPFR_RNDN);
        mpfr_sub(r27957, r27955, r27956, MPFR_RNDN);
        mpfr_sqrt(r27958, r27957, MPFR_RNDN);
        mpfr_add(r27959, r27954, r27958, MPFR_RNDN);
        mpfr_div(r27960, r27953, r27959, MPFR_RNDN);
        mpfr_div(r27961, r27960, r27952, MPFR_RNDN);
        ;
        mpfr_set_si(r27963, mpfr_cmp(r27943, r27962) <= 0, MPFR_RNDN);
        mpfr_sub(r27964, r27954, r27958, MPFR_RNDN);
        mpfr_div(r27965, r27964, r27952, MPFR_RNDN);
        ;
        mpfr_div(r27967, r27943, r27952, MPFR_RNDN);
        mpfr_mul(r27968, r27966, r27967, MPFR_RNDN);
        if (mpfr_get_si(r27963, MPFR_RNDN)) { mpfr_set(r27969, r27965, MPFR_RNDN); } else { mpfr_set(r27969, r27968, MPFR_RNDN); };
        if (mpfr_get_si(r27951, MPFR_RNDN)) { mpfr_set(r27970, r27961, MPFR_RNDN); } else { mpfr_set(r27970, r27969, MPFR_RNDN); };
        if (mpfr_get_si(r27945, MPFR_RNDN)) { mpfr_set(r27971, r27949, MPFR_RNDN); } else { mpfr_set(r27971, r27970, MPFR_RNDN); };
        return mpfr_get_d(r27971, MPFR_RNDN);
}

static mpfr_t r27972, r27973, r27974, r27975, r27976, r27977, r27978, r27979, r27980, r27981, r27982, r27983, r27984, r27985, r27986, r27987, r27988, r27989, r27990, r27991, r27992, r27993, r27994, r27995, r27996, r27997, r27998, r27999, r28000;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3216);
        mpfr_init(r27972);
        mpfr_init_set_str(r27973, "-1.1872979988150526e+32", 10, MPFR_RNDN);
        mpfr_init(r27974);
        mpfr_init(r27975);
        mpfr_init(r27976);
        mpfr_init_set_str(r27977, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r27978);
        mpfr_init_set_str(r27979, "-4.377552981619987e-103", 10, MPFR_RNDN);
        mpfr_init(r27980);
        mpfr_init(r27981);
        mpfr_init(r27982);
        mpfr_init(r27983);
        mpfr_init(r27984);
        mpfr_init(r27985);
        mpfr_init(r27986);
        mpfr_init(r27987);
        mpfr_init(r27988);
        mpfr_init(r27989);
        mpfr_init(r27990);
        mpfr_init_set_str(r27991, "1.2486973271270074e+81", 10, MPFR_RNDN);
        mpfr_init(r27992);
        mpfr_init(r27993);
        mpfr_init(r27994);
        mpfr_init_set_str(r27995, "-2", 10, MPFR_RNDN);
        mpfr_init(r27996);
        mpfr_init(r27997);
        mpfr_init(r27998);
        mpfr_init(r27999);
        mpfr_init(r28000);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r27972, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r27974, mpfr_cmp(r27972, r27973) <= 0, MPFR_RNDN);
        mpfr_set_d(r27975, c, MPFR_RNDN);
        mpfr_div(r27976, r27975, r27972, MPFR_RNDN);
        ;
        mpfr_mul(r27978, r27976, r27977, MPFR_RNDN);
        ;
        mpfr_set_si(r27980, mpfr_cmp(r27972, r27979) <= 0, MPFR_RNDN);
        mpfr_set_d(r27981, a, MPFR_RNDN);
        mpfr_mul(r27982, r27975, r27981, MPFR_RNDN);
        mpfr_neg(r27983, r27972, MPFR_RNDN);
        mpfr_mul(r27984, r27972, r27972, MPFR_RNDN);
        mpfr_mul(r27985, r27981, r27975, MPFR_RNDN);
        mpfr_sub(r27986, r27984, r27985, MPFR_RNDN);
        mpfr_sqrt(r27987, r27986, MPFR_RNDN);
        mpfr_add(r27988, r27983, r27987, MPFR_RNDN);
        mpfr_div(r27989, r27982, r27988, MPFR_RNDN);
        mpfr_div(r27990, r27989, r27981, MPFR_RNDN);
        ;
        mpfr_set_si(r27992, mpfr_cmp(r27972, r27991) <= 0, MPFR_RNDN);
        mpfr_sub(r27993, r27983, r27987, MPFR_RNDN);
        mpfr_div(r27994, r27993, r27981, MPFR_RNDN);
        ;
        mpfr_div(r27996, r27972, r27981, MPFR_RNDN);
        mpfr_mul(r27997, r27995, r27996, MPFR_RNDN);
        if (mpfr_get_si(r27992, MPFR_RNDN)) { mpfr_set(r27998, r27994, MPFR_RNDN); } else { mpfr_set(r27998, r27997, MPFR_RNDN); };
        if (mpfr_get_si(r27980, MPFR_RNDN)) { mpfr_set(r27999, r27990, MPFR_RNDN); } else { mpfr_set(r27999, r27998, MPFR_RNDN); };
        if (mpfr_get_si(r27974, MPFR_RNDN)) { mpfr_set(r28000, r27978, MPFR_RNDN); } else { mpfr_set(r28000, r27999, MPFR_RNDN); };
        return mpfr_get_d(r28000, MPFR_RNDN);
}

