#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 r27828 = b_2F2;
        float r27829 = -r27828;
        float r27830 = r27828 * r27828;
        float r27831 = a;
        float r27832 = c;
        float r27833 = r27831 * r27832;
        float r27834 = r27830 - r27833;
        float r27835 = sqrt(r27834);
        float r27836 = r27829 - r27835;
        float r27837 = r27836 / r27831;
        return r27837;
}

double f_id(double a, double b_2F2, double c) {
        double r27838 = b_2F2;
        double r27839 = -r27838;
        double r27840 = r27838 * r27838;
        double r27841 = a;
        double r27842 = c;
        double r27843 = r27841 * r27842;
        double r27844 = r27840 - r27843;
        double r27845 = sqrt(r27844);
        double r27846 = r27839 - r27845;
        double r27847 = r27846 / r27841;
        return r27847;
}


double f_of(float a, float b_2F2, float c) {
        float r27848 = b_2F2;
        float r27849 = -1.5109696884710251e+32;
        bool r27850 = r27848 <= r27849;
        float r27851 = c;
        float r27852 = r27851 / r27848;
        float r27853 = -1/2;
        float r27854 = r27852 * r27853;
        float r27855 = -5.265216833412822e-50;
        bool r27856 = r27848 <= r27855;
        float r27857 = a;
        float r27858 = r27851 * r27857;
        float r27859 = -r27848;
        float r27860 = r27848 * r27848;
        float r27861 = r27857 * r27851;
        float r27862 = r27860 - r27861;
        float r27863 = sqrt(r27862);
        float r27864 = r27859 + r27863;
        float r27865 = r27858 / r27864;
        float r27866 = r27865 / r27857;
        float r27867 = -5.313823226269673e-107;
        bool r27868 = r27848 <= r27867;
        float r27869 = 1.6622135411792587e+81;
        bool r27870 = r27848 <= r27869;
        float r27871 = r27859 - r27863;
        float r27872 = r27871 / r27857;
        float r27873 = -2;
        float r27874 = r27848 / r27857;
        float r27875 = r27873 * r27874;
        float r27876 = r27870 ? r27872 : r27875;
        float r27877 = r27868 ? r27854 : r27876;
        float r27878 = r27856 ? r27866 : r27877;
        float r27879 = r27850 ? r27854 : r27878;
        return r27879;
}

double f_od(double a, double b_2F2, double c) {
        double r27880 = b_2F2;
        double r27881 = -1.5109696884710251e+32;
        bool r27882 = r27880 <= r27881;
        double r27883 = c;
        double r27884 = r27883 / r27880;
        double r27885 = -1/2;
        double r27886 = r27884 * r27885;
        double r27887 = -5.265216833412822e-50;
        bool r27888 = r27880 <= r27887;
        double r27889 = a;
        double r27890 = r27883 * r27889;
        double r27891 = -r27880;
        double r27892 = r27880 * r27880;
        double r27893 = r27889 * r27883;
        double r27894 = r27892 - r27893;
        double r27895 = sqrt(r27894);
        double r27896 = r27891 + r27895;
        double r27897 = r27890 / r27896;
        double r27898 = r27897 / r27889;
        double r27899 = -5.313823226269673e-107;
        bool r27900 = r27880 <= r27899;
        double r27901 = 1.6622135411792587e+81;
        bool r27902 = r27880 <= r27901;
        double r27903 = r27891 - r27895;
        double r27904 = r27903 / r27889;
        double r27905 = -2;
        double r27906 = r27880 / r27889;
        double r27907 = r27905 * r27906;
        double r27908 = r27902 ? r27904 : r27907;
        double r27909 = r27900 ? r27886 : r27908;
        double r27910 = r27888 ? r27898 : r27909;
        double r27911 = r27882 ? r27886 : r27910;
        return r27911;
}

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 r27912, r27913, r27914, r27915, r27916, r27917, r27918, r27919, r27920, r27921;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3216);
        mpfr_init(r27912);
        mpfr_init(r27913);
        mpfr_init(r27914);
        mpfr_init(r27915);
        mpfr_init(r27916);
        mpfr_init(r27917);
        mpfr_init(r27918);
        mpfr_init(r27919);
        mpfr_init(r27920);
        mpfr_init(r27921);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r27912, b_2F2, MPFR_RNDN);
        mpfr_neg(r27913, r27912, MPFR_RNDN);
        mpfr_mul(r27914, r27912, r27912, MPFR_RNDN);
        mpfr_set_d(r27915, a, MPFR_RNDN);
        mpfr_set_d(r27916, c, MPFR_RNDN);
        mpfr_mul(r27917, r27915, r27916, MPFR_RNDN);
        mpfr_sub(r27918, r27914, r27917, MPFR_RNDN);
        mpfr_sqrt(r27919, r27918, MPFR_RNDN);
        mpfr_sub(r27920, r27913, r27919, MPFR_RNDN);
        mpfr_div(r27921, r27920, r27915, MPFR_RNDN);
        return mpfr_get_d(r27921, MPFR_RNDN);
}

static mpfr_t r27922, r27923, r27924, r27925, r27926, r27927, r27928, r27929, r27930, r27931, r27932, r27933, r27934, r27935, r27936, r27937, r27938, r27939, r27940, r27941, r27942, r27943, r27944, r27945, r27946, r27947, r27948, r27949, r27950, r27951, r27952, r27953;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3216);
        mpfr_init(r27922);
        mpfr_init_set_str(r27923, "-1.5109696884710251e+32", 10, MPFR_RNDN);
        mpfr_init(r27924);
        mpfr_init(r27925);
        mpfr_init(r27926);
        mpfr_init_set_str(r27927, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r27928);
        mpfr_init_set_str(r27929, "-5.265216833412822e-50", 10, MPFR_RNDN);
        mpfr_init(r27930);
        mpfr_init(r27931);
        mpfr_init(r27932);
        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_set_str(r27941, "-5.313823226269673e-107", 10, MPFR_RNDN);
        mpfr_init(r27942);
        mpfr_init_set_str(r27943, "1.6622135411792587e+81", 10, MPFR_RNDN);
        mpfr_init(r27944);
        mpfr_init(r27945);
        mpfr_init(r27946);
        mpfr_init_set_str(r27947, "-2", 10, MPFR_RNDN);
        mpfr_init(r27948);
        mpfr_init(r27949);
        mpfr_init(r27950);
        mpfr_init(r27951);
        mpfr_init(r27952);
        mpfr_init(r27953);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r27922, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r27924, mpfr_cmp(r27922, r27923) <= 0, MPFR_RNDN);
        mpfr_set_d(r27925, c, MPFR_RNDN);
        mpfr_div(r27926, r27925, r27922, MPFR_RNDN);
        ;
        mpfr_mul(r27928, r27926, r27927, MPFR_RNDN);
        ;
        mpfr_set_si(r27930, mpfr_cmp(r27922, r27929) <= 0, MPFR_RNDN);
        mpfr_set_d(r27931, a, MPFR_RNDN);
        mpfr_mul(r27932, r27925, r27931, MPFR_RNDN);
        mpfr_neg(r27933, r27922, MPFR_RNDN);
        mpfr_mul(r27934, r27922, r27922, MPFR_RNDN);
        mpfr_mul(r27935, r27931, r27925, MPFR_RNDN);
        mpfr_sub(r27936, r27934, r27935, MPFR_RNDN);
        mpfr_sqrt(r27937, r27936, MPFR_RNDN);
        mpfr_add(r27938, r27933, r27937, MPFR_RNDN);
        mpfr_div(r27939, r27932, r27938, MPFR_RNDN);
        mpfr_div(r27940, r27939, r27931, MPFR_RNDN);
        ;
        mpfr_set_si(r27942, mpfr_cmp(r27922, r27941) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r27944, mpfr_cmp(r27922, r27943) <= 0, MPFR_RNDN);
        mpfr_sub(r27945, r27933, r27937, MPFR_RNDN);
        mpfr_div(r27946, r27945, r27931, MPFR_RNDN);
        ;
        mpfr_div(r27948, r27922, r27931, MPFR_RNDN);
        mpfr_mul(r27949, r27947, r27948, MPFR_RNDN);
        if (mpfr_get_si(r27944, MPFR_RNDN)) { mpfr_set(r27950, r27946, MPFR_RNDN); } else { mpfr_set(r27950, r27949, MPFR_RNDN); };
        if (mpfr_get_si(r27942, MPFR_RNDN)) { mpfr_set(r27951, r27928, MPFR_RNDN); } else { mpfr_set(r27951, r27950, MPFR_RNDN); };
        if (mpfr_get_si(r27930, MPFR_RNDN)) { mpfr_set(r27952, r27940, MPFR_RNDN); } else { mpfr_set(r27952, r27951, MPFR_RNDN); };
        if (mpfr_get_si(r27924, MPFR_RNDN)) { mpfr_set(r27953, r27928, MPFR_RNDN); } else { mpfr_set(r27953, r27952, MPFR_RNDN); };
        return mpfr_get_d(r27953, MPFR_RNDN);
}

static mpfr_t r27954, r27955, r27956, r27957, r27958, r27959, r27960, 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;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3216);
        mpfr_init(r27954);
        mpfr_init_set_str(r27955, "-1.5109696884710251e+32", 10, MPFR_RNDN);
        mpfr_init(r27956);
        mpfr_init(r27957);
        mpfr_init(r27958);
        mpfr_init_set_str(r27959, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r27960);
        mpfr_init_set_str(r27961, "-5.265216833412822e-50", 10, MPFR_RNDN);
        mpfr_init(r27962);
        mpfr_init(r27963);
        mpfr_init(r27964);
        mpfr_init(r27965);
        mpfr_init(r27966);
        mpfr_init(r27967);
        mpfr_init(r27968);
        mpfr_init(r27969);
        mpfr_init(r27970);
        mpfr_init(r27971);
        mpfr_init(r27972);
        mpfr_init_set_str(r27973, "-5.313823226269673e-107", 10, MPFR_RNDN);
        mpfr_init(r27974);
        mpfr_init_set_str(r27975, "1.6622135411792587e+81", 10, MPFR_RNDN);
        mpfr_init(r27976);
        mpfr_init(r27977);
        mpfr_init(r27978);
        mpfr_init_set_str(r27979, "-2", 10, MPFR_RNDN);
        mpfr_init(r27980);
        mpfr_init(r27981);
        mpfr_init(r27982);
        mpfr_init(r27983);
        mpfr_init(r27984);
        mpfr_init(r27985);
}

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

