#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 r27844 = b_2F2;
        float r27845 = -r27844;
        float r27846 = r27844 * r27844;
        float r27847 = a;
        float r27848 = c;
        float r27849 = r27847 * r27848;
        float r27850 = r27846 - r27849;
        float r27851 = sqrt(r27850);
        float r27852 = r27845 - r27851;
        float r27853 = r27852 / r27847;
        return r27853;
}

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


double f_of(float a, float b_2F2, float c) {
        float r27864 = b_2F2;
        float r27865 = -1.1872979988150526e+32;
        bool r27866 = r27864 <= r27865;
        float r27867 = c;
        float r27868 = r27867 / r27864;
        float r27869 = -1/2;
        float r27870 = r27868 * r27869;
        float r27871 = -4.377552981619987e-103;
        bool r27872 = r27864 <= r27871;
        float r27873 = a;
        float r27874 = r27867 * r27873;
        float r27875 = -r27864;
        float r27876 = r27864 * r27864;
        float r27877 = r27873 * r27867;
        float r27878 = r27876 - r27877;
        float r27879 = sqrt(r27878);
        float r27880 = r27875 + r27879;
        float r27881 = r27874 / r27880;
        float r27882 = r27881 / r27873;
        float r27883 = 1.2486973271270074e+81;
        bool r27884 = r27864 <= r27883;
        float r27885 = r27875 - r27879;
        float r27886 = r27885 / r27873;
        float r27887 = -2;
        float r27888 = r27864 / r27873;
        float r27889 = r27887 * r27888;
        float r27890 = r27884 ? r27886 : r27889;
        float r27891 = r27872 ? r27882 : r27890;
        float r27892 = r27866 ? r27870 : r27891;
        return r27892;
}

double f_od(double a, double b_2F2, double c) {
        double r27893 = b_2F2;
        double r27894 = -1.1872979988150526e+32;
        bool r27895 = r27893 <= r27894;
        double r27896 = c;
        double r27897 = r27896 / r27893;
        double r27898 = -1/2;
        double r27899 = r27897 * r27898;
        double r27900 = -4.377552981619987e-103;
        bool r27901 = r27893 <= r27900;
        double r27902 = a;
        double r27903 = r27896 * r27902;
        double r27904 = -r27893;
        double r27905 = r27893 * r27893;
        double r27906 = r27902 * r27896;
        double r27907 = r27905 - r27906;
        double r27908 = sqrt(r27907);
        double r27909 = r27904 + r27908;
        double r27910 = r27903 / r27909;
        double r27911 = r27910 / r27902;
        double r27912 = 1.2486973271270074e+81;
        bool r27913 = r27893 <= r27912;
        double r27914 = r27904 - r27908;
        double r27915 = r27914 / r27902;
        double r27916 = -2;
        double r27917 = r27893 / r27902;
        double r27918 = r27916 * r27917;
        double r27919 = r27913 ? r27915 : r27918;
        double r27920 = r27901 ? r27911 : r27919;
        double r27921 = r27895 ? r27899 : r27920;
        return r27921;
}

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 r27922, r27923, r27924, r27925, r27926, r27927, r27928, r27929, r27930, r27931;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3216);
        mpfr_init(r27922);
        mpfr_init(r27923);
        mpfr_init(r27924);
        mpfr_init(r27925);
        mpfr_init(r27926);
        mpfr_init(r27927);
        mpfr_init(r27928);
        mpfr_init(r27929);
        mpfr_init(r27930);
        mpfr_init(r27931);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r27922, b_2F2, MPFR_RNDN);
        mpfr_neg(r27923, r27922, MPFR_RNDN);
        mpfr_mul(r27924, r27922, r27922, MPFR_RNDN);
        mpfr_set_d(r27925, a, MPFR_RNDN);
        mpfr_set_d(r27926, c, MPFR_RNDN);
        mpfr_mul(r27927, r27925, r27926, MPFR_RNDN);
        mpfr_sub(r27928, r27924, r27927, MPFR_RNDN);
        mpfr_sqrt(r27929, r27928, MPFR_RNDN);
        mpfr_sub(r27930, r27923, r27929, MPFR_RNDN);
        mpfr_div(r27931, r27930, r27925, MPFR_RNDN);
        return mpfr_get_d(r27931, MPFR_RNDN);
}

static mpfr_t r27932, r27933, r27934, r27935, r27936, r27937, r27938, r27939, r27940, r27941, r27942, r27943, r27944, r27945, r27946, r27947, r27948, r27949, r27950, r27951, r27952, r27953, r27954, r27955, r27956, r27957, r27958, r27959, r27960;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3216);
        mpfr_init(r27932);
        mpfr_init_set_str(r27933, "-1.1872979988150526e+32", 10, MPFR_RNDN);
        mpfr_init(r27934);
        mpfr_init(r27935);
        mpfr_init(r27936);
        mpfr_init_set_str(r27937, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r27938);
        mpfr_init_set_str(r27939, "-4.377552981619987e-103", 10, MPFR_RNDN);
        mpfr_init(r27940);
        mpfr_init(r27941);
        mpfr_init(r27942);
        mpfr_init(r27943);
        mpfr_init(r27944);
        mpfr_init(r27945);
        mpfr_init(r27946);
        mpfr_init(r27947);
        mpfr_init(r27948);
        mpfr_init(r27949);
        mpfr_init(r27950);
        mpfr_init_set_str(r27951, "1.2486973271270074e+81", 10, MPFR_RNDN);
        mpfr_init(r27952);
        mpfr_init(r27953);
        mpfr_init(r27954);
        mpfr_init_set_str(r27955, "-2", 10, MPFR_RNDN);
        mpfr_init(r27956);
        mpfr_init(r27957);
        mpfr_init(r27958);
        mpfr_init(r27959);
        mpfr_init(r27960);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r27932, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r27934, mpfr_cmp(r27932, r27933) <= 0, MPFR_RNDN);
        mpfr_set_d(r27935, c, MPFR_RNDN);
        mpfr_div(r27936, r27935, r27932, MPFR_RNDN);
        ;
        mpfr_mul(r27938, r27936, r27937, MPFR_RNDN);
        ;
        mpfr_set_si(r27940, mpfr_cmp(r27932, r27939) <= 0, MPFR_RNDN);
        mpfr_set_d(r27941, a, MPFR_RNDN);
        mpfr_mul(r27942, r27935, r27941, MPFR_RNDN);
        mpfr_neg(r27943, r27932, MPFR_RNDN);
        mpfr_mul(r27944, r27932, r27932, MPFR_RNDN);
        mpfr_mul(r27945, r27941, r27935, MPFR_RNDN);
        mpfr_sub(r27946, r27944, r27945, MPFR_RNDN);
        mpfr_sqrt(r27947, r27946, MPFR_RNDN);
        mpfr_add(r27948, r27943, r27947, MPFR_RNDN);
        mpfr_div(r27949, r27942, r27948, MPFR_RNDN);
        mpfr_div(r27950, r27949, r27941, MPFR_RNDN);
        ;
        mpfr_set_si(r27952, mpfr_cmp(r27932, r27951) <= 0, MPFR_RNDN);
        mpfr_sub(r27953, r27943, r27947, MPFR_RNDN);
        mpfr_div(r27954, r27953, r27941, MPFR_RNDN);
        ;
        mpfr_div(r27956, r27932, r27941, MPFR_RNDN);
        mpfr_mul(r27957, r27955, r27956, MPFR_RNDN);
        if (mpfr_get_si(r27952, MPFR_RNDN)) { mpfr_set(r27958, r27954, MPFR_RNDN); } else { mpfr_set(r27958, r27957, MPFR_RNDN); };
        if (mpfr_get_si(r27940, MPFR_RNDN)) { mpfr_set(r27959, r27950, MPFR_RNDN); } else { mpfr_set(r27959, r27958, MPFR_RNDN); };
        if (mpfr_get_si(r27934, MPFR_RNDN)) { mpfr_set(r27960, r27938, MPFR_RNDN); } else { mpfr_set(r27960, r27959, MPFR_RNDN); };
        return mpfr_get_d(r27960, MPFR_RNDN);
}

static mpfr_t r27961, r27962, r27963, r27964, r27965, r27966, r27967, r27968, r27969, r27970, r27971, r27972, r27973, r27974, r27975, r27976, r27977, r27978, r27979, r27980, r27981, r27982, r27983, r27984, r27985, r27986, r27987, r27988, r27989;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3216);
        mpfr_init(r27961);
        mpfr_init_set_str(r27962, "-1.1872979988150526e+32", 10, MPFR_RNDN);
        mpfr_init(r27963);
        mpfr_init(r27964);
        mpfr_init(r27965);
        mpfr_init_set_str(r27966, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r27967);
        mpfr_init_set_str(r27968, "-4.377552981619987e-103", 10, MPFR_RNDN);
        mpfr_init(r27969);
        mpfr_init(r27970);
        mpfr_init(r27971);
        mpfr_init(r27972);
        mpfr_init(r27973);
        mpfr_init(r27974);
        mpfr_init(r27975);
        mpfr_init(r27976);
        mpfr_init(r27977);
        mpfr_init(r27978);
        mpfr_init(r27979);
        mpfr_init_set_str(r27980, "1.2486973271270074e+81", 10, MPFR_RNDN);
        mpfr_init(r27981);
        mpfr_init(r27982);
        mpfr_init(r27983);
        mpfr_init_set_str(r27984, "-2", 10, MPFR_RNDN);
        mpfr_init(r27985);
        mpfr_init(r27986);
        mpfr_init(r27987);
        mpfr_init(r27988);
        mpfr_init(r27989);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r27961, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r27963, mpfr_cmp(r27961, r27962) <= 0, MPFR_RNDN);
        mpfr_set_d(r27964, c, MPFR_RNDN);
        mpfr_div(r27965, r27964, r27961, MPFR_RNDN);
        ;
        mpfr_mul(r27967, r27965, r27966, MPFR_RNDN);
        ;
        mpfr_set_si(r27969, mpfr_cmp(r27961, r27968) <= 0, MPFR_RNDN);
        mpfr_set_d(r27970, a, MPFR_RNDN);
        mpfr_mul(r27971, r27964, r27970, MPFR_RNDN);
        mpfr_neg(r27972, r27961, MPFR_RNDN);
        mpfr_mul(r27973, r27961, r27961, MPFR_RNDN);
        mpfr_mul(r27974, r27970, r27964, MPFR_RNDN);
        mpfr_sub(r27975, r27973, r27974, MPFR_RNDN);
        mpfr_sqrt(r27976, r27975, MPFR_RNDN);
        mpfr_add(r27977, r27972, r27976, MPFR_RNDN);
        mpfr_div(r27978, r27971, r27977, MPFR_RNDN);
        mpfr_div(r27979, r27978, r27970, MPFR_RNDN);
        ;
        mpfr_set_si(r27981, mpfr_cmp(r27961, r27980) <= 0, MPFR_RNDN);
        mpfr_sub(r27982, r27972, r27976, MPFR_RNDN);
        mpfr_div(r27983, r27982, r27970, MPFR_RNDN);
        ;
        mpfr_div(r27985, r27961, r27970, MPFR_RNDN);
        mpfr_mul(r27986, r27984, r27985, MPFR_RNDN);
        if (mpfr_get_si(r27981, MPFR_RNDN)) { mpfr_set(r27987, r27983, MPFR_RNDN); } else { mpfr_set(r27987, r27986, MPFR_RNDN); };
        if (mpfr_get_si(r27969, MPFR_RNDN)) { mpfr_set(r27988, r27979, MPFR_RNDN); } else { mpfr_set(r27988, r27987, MPFR_RNDN); };
        if (mpfr_get_si(r27963, MPFR_RNDN)) { mpfr_set(r27989, r27967, MPFR_RNDN); } else { mpfr_set(r27989, r27988, MPFR_RNDN); };
        return mpfr_get_d(r27989, MPFR_RNDN);
}

