#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 r9989 = b_2;
        float r9990 = -r9989;
        float r9991 = r9989 * r9989;
        float r9992 = a;
        float r9993 = c;
        float r9994 = r9992 * r9993;
        float r9995 = r9991 - r9994;
        float r9996 = sqrt(r9995);
        float r9997 = r9990 - r9996;
        float r9998 = r9997 / r9992;
        return r9998;
}

double f_id(double a, double b_2, double c) {
        double r9999 = b_2;
        double r10000 = -r9999;
        double r10001 = r9999 * r9999;
        double r10002 = a;
        double r10003 = c;
        double r10004 = r10002 * r10003;
        double r10005 = r10001 - r10004;
        double r10006 = sqrt(r10005);
        double r10007 = r10000 - r10006;
        double r10008 = r10007 / r10002;
        return r10008;
}


double f_of(float a, float b_2, float c) {
        float r10009 = b_2;
        float r10010 = -1/2;
        float r10011 = r10009 / r10010;
        float r10012 = -4.678924937769312e+155;
        bool r10013 = r10011 <= r10012;
        float r10014 = -2;
        float r10015 = a;
        float r10016 = r10009 / r10015;
        float r10017 = r10014 * r10016;
        float r10018 = 3.2652260730989626e-184;
        bool r10019 = r10011 <= r10018;
        float r10020 = 1;
        float r10021 = -r10009;
        float r10022 = r10009 * r10009;
        float r10023 = c;
        float r10024 = r10015 * r10023;
        float r10025 = r10022 - r10024;
        float r10026 = sqrt(r10025);
        float r10027 = r10021 - r10026;
        float r10028 = r10015 / r10027;
        float r10029 = r10020 / r10028;
        float r10030 = 3.9637125641752236e+86;
        bool r10031 = r10011 <= r10030;
        float r10032 = r10026 - r10009;
        float r10033 = r10024 / r10032;
        float r10034 = r10033 / r10015;
        float r10035 = r10015 / r10009;
        float r10036 = 1/2;
        float r10037 = r10036 * r10023;
        float r10038 = r10035 * r10037;
        float r10039 = 2;
        float r10040 = r10039 * r10009;
        float r10041 = r10038 - r10040;
        float r10042 = r10023 / r10041;
        float r10043 = r10031 ? r10034 : r10042;
        float r10044 = r10019 ? r10029 : r10043;
        float r10045 = r10013 ? r10017 : r10044;
        return r10045;
}

double f_od(double a, double b_2, double c) {
        double r10046 = b_2;
        double r10047 = -1/2;
        double r10048 = r10046 / r10047;
        double r10049 = -4.678924937769312e+155;
        bool r10050 = r10048 <= r10049;
        double r10051 = -2;
        double r10052 = a;
        double r10053 = r10046 / r10052;
        double r10054 = r10051 * r10053;
        double r10055 = 3.2652260730989626e-184;
        bool r10056 = r10048 <= r10055;
        double r10057 = 1;
        double r10058 = -r10046;
        double r10059 = r10046 * r10046;
        double r10060 = c;
        double r10061 = r10052 * r10060;
        double r10062 = r10059 - r10061;
        double r10063 = sqrt(r10062);
        double r10064 = r10058 - r10063;
        double r10065 = r10052 / r10064;
        double r10066 = r10057 / r10065;
        double r10067 = 3.9637125641752236e+86;
        bool r10068 = r10048 <= r10067;
        double r10069 = r10063 - r10046;
        double r10070 = r10061 / r10069;
        double r10071 = r10070 / r10052;
        double r10072 = r10052 / r10046;
        double r10073 = 1/2;
        double r10074 = r10073 * r10060;
        double r10075 = r10072 * r10074;
        double r10076 = 2;
        double r10077 = r10076 * r10046;
        double r10078 = r10075 - r10077;
        double r10079 = r10060 / r10078;
        double r10080 = r10068 ? r10071 : r10079;
        double r10081 = r10056 ? r10066 : r10080;
        double r10082 = r10050 ? r10054 : r10081;
        return r10082;
}

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 r10083, r10084, r10085, r10086, r10087, r10088, r10089, r10090, r10091, r10092;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3408);
        mpfr_init(r10083);
        mpfr_init(r10084);
        mpfr_init(r10085);
        mpfr_init(r10086);
        mpfr_init(r10087);
        mpfr_init(r10088);
        mpfr_init(r10089);
        mpfr_init(r10090);
        mpfr_init(r10091);
        mpfr_init(r10092);
}

double f_im(double a, double b_2, double c) {
        mpfr_set_d(r10083, b_2, MPFR_RNDN);
        mpfr_neg(r10084, r10083, MPFR_RNDN);
        mpfr_mul(r10085, r10083, r10083, MPFR_RNDN);
        mpfr_set_d(r10086, a, MPFR_RNDN);
        mpfr_set_d(r10087, c, MPFR_RNDN);
        mpfr_mul(r10088, r10086, r10087, MPFR_RNDN);
        mpfr_sub(r10089, r10085, r10088, MPFR_RNDN);
        mpfr_sqrt(r10090, r10089, MPFR_RNDN);
        mpfr_sub(r10091, r10084, r10090, MPFR_RNDN);
        mpfr_div(r10092, r10091, r10086, MPFR_RNDN);
        return mpfr_get_d(r10092, MPFR_RNDN);
}

static mpfr_t r10093, r10094, r10095, r10096, r10097, r10098, r10099, r10100, r10101, r10102, r10103, r10104, r10105, r10106, r10107, r10108, r10109, r10110, r10111, r10112, r10113, r10114, r10115, r10116, r10117, r10118, r10119, r10120, r10121, r10122, r10123, r10124, r10125, r10126, r10127, r10128, r10129;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r10093);
        mpfr_init_set_str(r10094, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r10095);
        mpfr_init_set_str(r10096, "-4.678924937769312e+155", 10, MPFR_RNDN);
        mpfr_init(r10097);
        mpfr_init_set_str(r10098, "-2", 10, MPFR_RNDN);
        mpfr_init(r10099);
        mpfr_init(r10100);
        mpfr_init(r10101);
        mpfr_init_set_str(r10102, "3.2652260730989626e-184", 10, MPFR_RNDN);
        mpfr_init(r10103);
        mpfr_init_set_str(r10104, "1", 10, MPFR_RNDN);
        mpfr_init(r10105);
        mpfr_init(r10106);
        mpfr_init(r10107);
        mpfr_init(r10108);
        mpfr_init(r10109);
        mpfr_init(r10110);
        mpfr_init(r10111);
        mpfr_init(r10112);
        mpfr_init(r10113);
        mpfr_init_set_str(r10114, "3.9637125641752236e+86", 10, MPFR_RNDN);
        mpfr_init(r10115);
        mpfr_init(r10116);
        mpfr_init(r10117);
        mpfr_init(r10118);
        mpfr_init(r10119);
        mpfr_init_set_str(r10120, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10121);
        mpfr_init(r10122);
        mpfr_init_set_str(r10123, "2", 10, MPFR_RNDN);
        mpfr_init(r10124);
        mpfr_init(r10125);
        mpfr_init(r10126);
        mpfr_init(r10127);
        mpfr_init(r10128);
        mpfr_init(r10129);
}

double f_fm(double a, double b_2, double c) {
        mpfr_set_d(r10093, b_2, MPFR_RNDN);
        ;
        mpfr_div(r10095, r10093, r10094, MPFR_RNDN);
        ;
        mpfr_set_si(r10097, mpfr_cmp(r10095, r10096) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r10099, a, MPFR_RNDN);
        mpfr_div(r10100, r10093, r10099, MPFR_RNDN);
        mpfr_mul(r10101, r10098, r10100, MPFR_RNDN);
        ;
        mpfr_set_si(r10103, mpfr_cmp(r10095, r10102) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r10105, r10093, MPFR_RNDN);
        mpfr_mul(r10106, r10093, r10093, MPFR_RNDN);
        mpfr_set_d(r10107, c, MPFR_RNDN);
        mpfr_mul(r10108, r10099, r10107, MPFR_RNDN);
        mpfr_sub(r10109, r10106, r10108, MPFR_RNDN);
        mpfr_sqrt(r10110, r10109, MPFR_RNDN);
        mpfr_sub(r10111, r10105, r10110, MPFR_RNDN);
        mpfr_div(r10112, r10099, r10111, MPFR_RNDN);
        mpfr_div(r10113, r10104, r10112, MPFR_RNDN);
        ;
        mpfr_set_si(r10115, mpfr_cmp(r10095, r10114) <= 0, MPFR_RNDN);
        mpfr_sub(r10116, r10110, r10093, MPFR_RNDN);
        mpfr_div(r10117, r10108, r10116, MPFR_RNDN);
        mpfr_div(r10118, r10117, r10099, MPFR_RNDN);
        mpfr_div(r10119, r10099, r10093, MPFR_RNDN);
        ;
        mpfr_mul(r10121, r10120, r10107, MPFR_RNDN);
        mpfr_mul(r10122, r10119, r10121, MPFR_RNDN);
        ;
        mpfr_mul(r10124, r10123, r10093, MPFR_RNDN);
        mpfr_sub(r10125, r10122, r10124, MPFR_RNDN);
        mpfr_div(r10126, r10107, r10125, MPFR_RNDN);
        if (mpfr_get_si(r10115, MPFR_RNDN)) { mpfr_set(r10127, r10118, MPFR_RNDN); } else { mpfr_set(r10127, r10126, MPFR_RNDN); };
        if (mpfr_get_si(r10103, MPFR_RNDN)) { mpfr_set(r10128, r10113, MPFR_RNDN); } else { mpfr_set(r10128, r10127, MPFR_RNDN); };
        if (mpfr_get_si(r10097, MPFR_RNDN)) { mpfr_set(r10129, r10101, MPFR_RNDN); } else { mpfr_set(r10129, r10128, MPFR_RNDN); };
        return mpfr_get_d(r10129, MPFR_RNDN);
}

static mpfr_t r10130, r10131, r10132, r10133, r10134, r10135, r10136, r10137, r10138, r10139, r10140, r10141, r10142, r10143, r10144, r10145, r10146, r10147, r10148, r10149, r10150, r10151, r10152, r10153, r10154, r10155, r10156, r10157, r10158, r10159, r10160, r10161, r10162, r10163, r10164, r10165, r10166;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r10130);
        mpfr_init_set_str(r10131, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r10132);
        mpfr_init_set_str(r10133, "-4.678924937769312e+155", 10, MPFR_RNDN);
        mpfr_init(r10134);
        mpfr_init_set_str(r10135, "-2", 10, MPFR_RNDN);
        mpfr_init(r10136);
        mpfr_init(r10137);
        mpfr_init(r10138);
        mpfr_init_set_str(r10139, "3.2652260730989626e-184", 10, MPFR_RNDN);
        mpfr_init(r10140);
        mpfr_init_set_str(r10141, "1", 10, MPFR_RNDN);
        mpfr_init(r10142);
        mpfr_init(r10143);
        mpfr_init(r10144);
        mpfr_init(r10145);
        mpfr_init(r10146);
        mpfr_init(r10147);
        mpfr_init(r10148);
        mpfr_init(r10149);
        mpfr_init(r10150);
        mpfr_init_set_str(r10151, "3.9637125641752236e+86", 10, MPFR_RNDN);
        mpfr_init(r10152);
        mpfr_init(r10153);
        mpfr_init(r10154);
        mpfr_init(r10155);
        mpfr_init(r10156);
        mpfr_init_set_str(r10157, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10158);
        mpfr_init(r10159);
        mpfr_init_set_str(r10160, "2", 10, MPFR_RNDN);
        mpfr_init(r10161);
        mpfr_init(r10162);
        mpfr_init(r10163);
        mpfr_init(r10164);
        mpfr_init(r10165);
        mpfr_init(r10166);
}

double f_dm(double a, double b_2, double c) {
        mpfr_set_d(r10130, b_2, MPFR_RNDN);
        ;
        mpfr_div(r10132, r10130, r10131, MPFR_RNDN);
        ;
        mpfr_set_si(r10134, mpfr_cmp(r10132, r10133) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r10136, a, MPFR_RNDN);
        mpfr_div(r10137, r10130, r10136, MPFR_RNDN);
        mpfr_mul(r10138, r10135, r10137, MPFR_RNDN);
        ;
        mpfr_set_si(r10140, mpfr_cmp(r10132, r10139) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r10142, r10130, MPFR_RNDN);
        mpfr_mul(r10143, r10130, r10130, MPFR_RNDN);
        mpfr_set_d(r10144, c, MPFR_RNDN);
        mpfr_mul(r10145, r10136, r10144, MPFR_RNDN);
        mpfr_sub(r10146, r10143, r10145, MPFR_RNDN);
        mpfr_sqrt(r10147, r10146, MPFR_RNDN);
        mpfr_sub(r10148, r10142, r10147, MPFR_RNDN);
        mpfr_div(r10149, r10136, r10148, MPFR_RNDN);
        mpfr_div(r10150, r10141, r10149, MPFR_RNDN);
        ;
        mpfr_set_si(r10152, mpfr_cmp(r10132, r10151) <= 0, MPFR_RNDN);
        mpfr_sub(r10153, r10147, r10130, MPFR_RNDN);
        mpfr_div(r10154, r10145, r10153, MPFR_RNDN);
        mpfr_div(r10155, r10154, r10136, MPFR_RNDN);
        mpfr_div(r10156, r10136, r10130, MPFR_RNDN);
        ;
        mpfr_mul(r10158, r10157, r10144, MPFR_RNDN);
        mpfr_mul(r10159, r10156, r10158, MPFR_RNDN);
        ;
        mpfr_mul(r10161, r10160, r10130, MPFR_RNDN);
        mpfr_sub(r10162, r10159, r10161, MPFR_RNDN);
        mpfr_div(r10163, r10144, r10162, MPFR_RNDN);
        if (mpfr_get_si(r10152, MPFR_RNDN)) { mpfr_set(r10164, r10155, MPFR_RNDN); } else { mpfr_set(r10164, r10163, MPFR_RNDN); };
        if (mpfr_get_si(r10140, MPFR_RNDN)) { mpfr_set(r10165, r10150, MPFR_RNDN); } else { mpfr_set(r10165, r10164, MPFR_RNDN); };
        if (mpfr_get_si(r10134, MPFR_RNDN)) { mpfr_set(r10166, r10138, MPFR_RNDN); } else { mpfr_set(r10166, r10165, MPFR_RNDN); };
        return mpfr_get_d(r10166, MPFR_RNDN);
}

