#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_2, float c) {
        float r9901 = b_2;
        float r9902 = -r9901;
        float r9903 = r9901 * r9901;
        float r9904 = a;
        float r9905 = c;
        float r9906 = r9904 * r9905;
        float r9907 = r9903 - r9906;
        float r9908 = sqrt(r9907);
        float r9909 = r9902 - r9908;
        float r9910 = r9909 / r9904;
        return r9910;
}

double f_id(double a, double b_2, double c) {
        double r9911 = b_2;
        double r9912 = -r9911;
        double r9913 = r9911 * r9911;
        double r9914 = a;
        double r9915 = c;
        double r9916 = r9914 * r9915;
        double r9917 = r9913 - r9916;
        double r9918 = sqrt(r9917);
        double r9919 = r9912 - r9918;
        double r9920 = r9919 / r9914;
        return r9920;
}


double f_of(float a, float b_2, float c) {
        float r9921 = b_2;
        float r9922 = -2.4360596003219827e+23;
        bool r9923 = r9921 <= r9922;
        float r9924 = c;
        float r9925 = 1/2;
        float r9926 = a;
        float r9927 = r9925 * r9926;
        float r9928 = r9921 / r9924;
        float r9929 = r9927 / r9928;
        float r9930 = r9921 + r9921;
        float r9931 = r9929 - r9930;
        float r9932 = r9924 / r9931;
        float r9933 = -2.0503675161606082e-282;
        bool r9934 = r9921 <= r9933;
        float r9935 = r9921 * r9921;
        float r9936 = r9924 * r9926;
        float r9937 = r9935 - r9936;
        float r9938 = sqrt(r9937);
        float r9939 = r9938 - r9921;
        float r9940 = r9926 / r9939;
        float r9941 = r9924 * r9940;
        float r9942 = r9941 / r9926;
        float r9943 = 2.2595025069381943e+39;
        bool r9944 = r9921 <= r9943;
        float r9945 = 1;
        float r9946 = -r9921;
        float r9947 = r9926 * r9924;
        float r9948 = r9935 - r9947;
        float r9949 = sqrt(r9948);
        float r9950 = r9946 - r9949;
        float r9951 = r9926 / r9950;
        float r9952 = r9945 / r9951;
        float r9953 = r9931 / r9926;
        float r9954 = r9944 ? r9952 : r9953;
        float r9955 = r9934 ? r9942 : r9954;
        float r9956 = r9923 ? r9932 : r9955;
        return r9956;
}

double f_od(double a, double b_2, double c) {
        double r9957 = b_2;
        double r9958 = -2.4360596003219827e+23;
        bool r9959 = r9957 <= r9958;
        double r9960 = c;
        double r9961 = 1/2;
        double r9962 = a;
        double r9963 = r9961 * r9962;
        double r9964 = r9957 / r9960;
        double r9965 = r9963 / r9964;
        double r9966 = r9957 + r9957;
        double r9967 = r9965 - r9966;
        double r9968 = r9960 / r9967;
        double r9969 = -2.0503675161606082e-282;
        bool r9970 = r9957 <= r9969;
        double r9971 = r9957 * r9957;
        double r9972 = r9960 * r9962;
        double r9973 = r9971 - r9972;
        double r9974 = sqrt(r9973);
        double r9975 = r9974 - r9957;
        double r9976 = r9962 / r9975;
        double r9977 = r9960 * r9976;
        double r9978 = r9977 / r9962;
        double r9979 = 2.2595025069381943e+39;
        bool r9980 = r9957 <= r9979;
        double r9981 = 1;
        double r9982 = -r9957;
        double r9983 = r9962 * r9960;
        double r9984 = r9971 - r9983;
        double r9985 = sqrt(r9984);
        double r9986 = r9982 - r9985;
        double r9987 = r9962 / r9986;
        double r9988 = r9981 / r9987;
        double r9989 = r9967 / r9962;
        double r9990 = r9980 ? r9988 : r9989;
        double r9991 = r9970 ? r9978 : r9990;
        double r9992 = r9959 ? r9968 : r9991;
        return r9992;
}

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 r9993, r9994, r9995, r9996, r9997, r9998, r9999, r10000, r10001, r10002;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3408);
        mpfr_init(r9993);
        mpfr_init(r9994);
        mpfr_init(r9995);
        mpfr_init(r9996);
        mpfr_init(r9997);
        mpfr_init(r9998);
        mpfr_init(r9999);
        mpfr_init(r10000);
        mpfr_init(r10001);
        mpfr_init(r10002);
}

double f_im(double a, double b_2, double c) {
        mpfr_set_d(r9993, b_2, MPFR_RNDN);
        mpfr_neg(r9994, r9993, MPFR_RNDN);
        mpfr_mul(r9995, r9993, r9993, MPFR_RNDN);
        mpfr_set_d(r9996, a, MPFR_RNDN);
        mpfr_set_d(r9997, c, MPFR_RNDN);
        mpfr_mul(r9998, r9996, r9997, MPFR_RNDN);
        mpfr_sub(r9999, r9995, r9998, MPFR_RNDN);
        mpfr_sqrt(r10000, r9999, MPFR_RNDN);
        mpfr_sub(r10001, r9994, r10000, MPFR_RNDN);
        mpfr_div(r10002, r10001, r9996, MPFR_RNDN);
        return mpfr_get_d(r10002, MPFR_RNDN);
}

static mpfr_t r10003, r10004, r10005, r10006, r10007, r10008, r10009, r10010, r10011, r10012, r10013, r10014, r10015, r10016, r10017, r10018, r10019, r10020, r10021, r10022, r10023, r10024, r10025, r10026, r10027, r10028, r10029, r10030, r10031, r10032, r10033, r10034, r10035, r10036, r10037, r10038;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r10003);
        mpfr_init_set_str(r10004, "-2.4360596003219827e+23", 10, MPFR_RNDN);
        mpfr_init(r10005);
        mpfr_init(r10006);
        mpfr_init_set_str(r10007, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10008);
        mpfr_init(r10009);
        mpfr_init(r10010);
        mpfr_init(r10011);
        mpfr_init(r10012);
        mpfr_init(r10013);
        mpfr_init(r10014);
        mpfr_init_set_str(r10015, "-2.0503675161606082e-282", 10, MPFR_RNDN);
        mpfr_init(r10016);
        mpfr_init(r10017);
        mpfr_init(r10018);
        mpfr_init(r10019);
        mpfr_init(r10020);
        mpfr_init(r10021);
        mpfr_init(r10022);
        mpfr_init(r10023);
        mpfr_init(r10024);
        mpfr_init_set_str(r10025, "2.2595025069381943e+39", 10, MPFR_RNDN);
        mpfr_init(r10026);
        mpfr_init_set_str(r10027, "1", 10, MPFR_RNDN);
        mpfr_init(r10028);
        mpfr_init(r10029);
        mpfr_init(r10030);
        mpfr_init(r10031);
        mpfr_init(r10032);
        mpfr_init(r10033);
        mpfr_init(r10034);
        mpfr_init(r10035);
        mpfr_init(r10036);
        mpfr_init(r10037);
        mpfr_init(r10038);
}

double f_fm(double a, double b_2, double c) {
        mpfr_set_d(r10003, b_2, MPFR_RNDN);
        ;
        mpfr_set_si(r10005, mpfr_cmp(r10003, r10004) <= 0, MPFR_RNDN);
        mpfr_set_d(r10006, c, MPFR_RNDN);
        ;
        mpfr_set_d(r10008, a, MPFR_RNDN);
        mpfr_mul(r10009, r10007, r10008, MPFR_RNDN);
        mpfr_div(r10010, r10003, r10006, MPFR_RNDN);
        mpfr_div(r10011, r10009, r10010, MPFR_RNDN);
        mpfr_add(r10012, r10003, r10003, MPFR_RNDN);
        mpfr_sub(r10013, r10011, r10012, MPFR_RNDN);
        mpfr_div(r10014, r10006, r10013, MPFR_RNDN);
        ;
        mpfr_set_si(r10016, mpfr_cmp(r10003, r10015) <= 0, MPFR_RNDN);
        mpfr_mul(r10017, r10003, r10003, MPFR_RNDN);
        mpfr_mul(r10018, r10006, r10008, MPFR_RNDN);
        mpfr_sub(r10019, r10017, r10018, MPFR_RNDN);
        mpfr_sqrt(r10020, r10019, MPFR_RNDN);
        mpfr_sub(r10021, r10020, r10003, MPFR_RNDN);
        mpfr_div(r10022, r10008, r10021, MPFR_RNDN);
        mpfr_mul(r10023, r10006, r10022, MPFR_RNDN);
        mpfr_div(r10024, r10023, r10008, MPFR_RNDN);
        ;
        mpfr_set_si(r10026, mpfr_cmp(r10003, r10025) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r10028, r10003, MPFR_RNDN);
        mpfr_mul(r10029, r10008, r10006, MPFR_RNDN);
        mpfr_sub(r10030, r10017, r10029, MPFR_RNDN);
        mpfr_sqrt(r10031, r10030, MPFR_RNDN);
        mpfr_sub(r10032, r10028, r10031, MPFR_RNDN);
        mpfr_div(r10033, r10008, r10032, MPFR_RNDN);
        mpfr_div(r10034, r10027, r10033, MPFR_RNDN);
        mpfr_div(r10035, r10013, r10008, MPFR_RNDN);
        if (mpfr_get_si(r10026, MPFR_RNDN)) { mpfr_set(r10036, r10034, MPFR_RNDN); } else { mpfr_set(r10036, r10035, MPFR_RNDN); };
        if (mpfr_get_si(r10016, MPFR_RNDN)) { mpfr_set(r10037, r10024, MPFR_RNDN); } else { mpfr_set(r10037, r10036, MPFR_RNDN); };
        if (mpfr_get_si(r10005, MPFR_RNDN)) { mpfr_set(r10038, r10014, MPFR_RNDN); } else { mpfr_set(r10038, r10037, MPFR_RNDN); };
        return mpfr_get_d(r10038, MPFR_RNDN);
}

static mpfr_t r10039, r10040, r10041, r10042, r10043, r10044, r10045, r10046, r10047, r10048, r10049, r10050, r10051, r10052, r10053, r10054, r10055, r10056, r10057, r10058, r10059, r10060, r10061, r10062, r10063, r10064, r10065, r10066, r10067, r10068, r10069, r10070, r10071, r10072, r10073, r10074;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r10039);
        mpfr_init_set_str(r10040, "-2.4360596003219827e+23", 10, MPFR_RNDN);
        mpfr_init(r10041);
        mpfr_init(r10042);
        mpfr_init_set_str(r10043, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10044);
        mpfr_init(r10045);
        mpfr_init(r10046);
        mpfr_init(r10047);
        mpfr_init(r10048);
        mpfr_init(r10049);
        mpfr_init(r10050);
        mpfr_init_set_str(r10051, "-2.0503675161606082e-282", 10, MPFR_RNDN);
        mpfr_init(r10052);
        mpfr_init(r10053);
        mpfr_init(r10054);
        mpfr_init(r10055);
        mpfr_init(r10056);
        mpfr_init(r10057);
        mpfr_init(r10058);
        mpfr_init(r10059);
        mpfr_init(r10060);
        mpfr_init_set_str(r10061, "2.2595025069381943e+39", 10, MPFR_RNDN);
        mpfr_init(r10062);
        mpfr_init_set_str(r10063, "1", 10, MPFR_RNDN);
        mpfr_init(r10064);
        mpfr_init(r10065);
        mpfr_init(r10066);
        mpfr_init(r10067);
        mpfr_init(r10068);
        mpfr_init(r10069);
        mpfr_init(r10070);
        mpfr_init(r10071);
        mpfr_init(r10072);
        mpfr_init(r10073);
        mpfr_init(r10074);
}

double f_dm(double a, double b_2, double c) {
        mpfr_set_d(r10039, b_2, MPFR_RNDN);
        ;
        mpfr_set_si(r10041, mpfr_cmp(r10039, r10040) <= 0, MPFR_RNDN);
        mpfr_set_d(r10042, c, MPFR_RNDN);
        ;
        mpfr_set_d(r10044, a, MPFR_RNDN);
        mpfr_mul(r10045, r10043, r10044, MPFR_RNDN);
        mpfr_div(r10046, r10039, r10042, MPFR_RNDN);
        mpfr_div(r10047, r10045, r10046, MPFR_RNDN);
        mpfr_add(r10048, r10039, r10039, MPFR_RNDN);
        mpfr_sub(r10049, r10047, r10048, MPFR_RNDN);
        mpfr_div(r10050, r10042, r10049, MPFR_RNDN);
        ;
        mpfr_set_si(r10052, mpfr_cmp(r10039, r10051) <= 0, MPFR_RNDN);
        mpfr_mul(r10053, r10039, r10039, MPFR_RNDN);
        mpfr_mul(r10054, r10042, r10044, MPFR_RNDN);
        mpfr_sub(r10055, r10053, r10054, MPFR_RNDN);
        mpfr_sqrt(r10056, r10055, MPFR_RNDN);
        mpfr_sub(r10057, r10056, r10039, MPFR_RNDN);
        mpfr_div(r10058, r10044, r10057, MPFR_RNDN);
        mpfr_mul(r10059, r10042, r10058, MPFR_RNDN);
        mpfr_div(r10060, r10059, r10044, MPFR_RNDN);
        ;
        mpfr_set_si(r10062, mpfr_cmp(r10039, r10061) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r10064, r10039, MPFR_RNDN);
        mpfr_mul(r10065, r10044, r10042, MPFR_RNDN);
        mpfr_sub(r10066, r10053, r10065, MPFR_RNDN);
        mpfr_sqrt(r10067, r10066, MPFR_RNDN);
        mpfr_sub(r10068, r10064, r10067, MPFR_RNDN);
        mpfr_div(r10069, r10044, r10068, MPFR_RNDN);
        mpfr_div(r10070, r10063, r10069, MPFR_RNDN);
        mpfr_div(r10071, r10049, r10044, MPFR_RNDN);
        if (mpfr_get_si(r10062, MPFR_RNDN)) { mpfr_set(r10072, r10070, MPFR_RNDN); } else { mpfr_set(r10072, r10071, MPFR_RNDN); };
        if (mpfr_get_si(r10052, MPFR_RNDN)) { mpfr_set(r10073, r10060, MPFR_RNDN); } else { mpfr_set(r10073, r10072, MPFR_RNDN); };
        if (mpfr_get_si(r10041, MPFR_RNDN)) { mpfr_set(r10074, r10050, MPFR_RNDN); } else { mpfr_set(r10074, r10073, MPFR_RNDN); };
        return mpfr_get_d(r10074, MPFR_RNDN);
}

