#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 r25915 = b_2;
        float r25916 = -r25915;
        float r25917 = r25915 * r25915;
        float r25918 = a;
        float r25919 = c;
        float r25920 = r25918 * r25919;
        float r25921 = r25917 - r25920;
        float r25922 = sqrt(r25921);
        float r25923 = r25916 - r25922;
        float r25924 = r25923 / r25918;
        return r25924;
}

double f_id(double a, double b_2, double c) {
        double r25925 = b_2;
        double r25926 = -r25925;
        double r25927 = r25925 * r25925;
        double r25928 = a;
        double r25929 = c;
        double r25930 = r25928 * r25929;
        double r25931 = r25927 - r25930;
        double r25932 = sqrt(r25931);
        double r25933 = r25926 - r25932;
        double r25934 = r25933 / r25928;
        return r25934;
}


double f_of(float a, float b_2, float c) {
        float r25935 = b_2;
        float r25936 = -3.3472901989528128e-15;
        bool r25937 = r25935 <= r25936;
        float r25938 = -1/2;
        float r25939 = c;
        float r25940 = r25939 / r25935;
        float r25941 = r25938 * r25940;
        float r25942 = -4.003770516478777e-194;
        bool r25943 = r25935 <= r25942;
        float r25944 = a;
        float r25945 = r25939 * r25944;
        float r25946 = r25935 * r25935;
        float r25947 = r25944 * r25939;
        float r25948 = r25946 - r25947;
        float r25949 = sqrt(r25948);
        float r25950 = r25949 - r25935;
        float r25951 = r25945 / r25950;
        float r25952 = r25951 / r25944;
        float r25953 = 1.586737340205888e+144;
        bool r25954 = r25935 <= r25953;
        float r25955 = -r25935;
        float r25956 = r25955 - r25949;
        float r25957 = 1;
        float r25958 = r25957 / r25944;
        float r25959 = r25956 * r25958;
        float r25960 = -2;
        float r25961 = r25935 / r25944;
        float r25962 = r25960 * r25961;
        float r25963 = r25954 ? r25959 : r25962;
        float r25964 = r25943 ? r25952 : r25963;
        float r25965 = r25937 ? r25941 : r25964;
        return r25965;
}

double f_od(double a, double b_2, double c) {
        double r25966 = b_2;
        double r25967 = -3.3472901989528128e-15;
        bool r25968 = r25966 <= r25967;
        double r25969 = -1/2;
        double r25970 = c;
        double r25971 = r25970 / r25966;
        double r25972 = r25969 * r25971;
        double r25973 = -4.003770516478777e-194;
        bool r25974 = r25966 <= r25973;
        double r25975 = a;
        double r25976 = r25970 * r25975;
        double r25977 = r25966 * r25966;
        double r25978 = r25975 * r25970;
        double r25979 = r25977 - r25978;
        double r25980 = sqrt(r25979);
        double r25981 = r25980 - r25966;
        double r25982 = r25976 / r25981;
        double r25983 = r25982 / r25975;
        double r25984 = 1.586737340205888e+144;
        bool r25985 = r25966 <= r25984;
        double r25986 = -r25966;
        double r25987 = r25986 - r25980;
        double r25988 = 1;
        double r25989 = r25988 / r25975;
        double r25990 = r25987 * r25989;
        double r25991 = -2;
        double r25992 = r25966 / r25975;
        double r25993 = r25991 * r25992;
        double r25994 = r25985 ? r25990 : r25993;
        double r25995 = r25974 ? r25983 : r25994;
        double r25996 = r25968 ? r25972 : r25995;
        return r25996;
}

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 r25997, r25998, r25999, r26000, r26001, r26002, r26003, r26004, r26005, r26006;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3408);
        mpfr_init(r25997);
        mpfr_init(r25998);
        mpfr_init(r25999);
        mpfr_init(r26000);
        mpfr_init(r26001);
        mpfr_init(r26002);
        mpfr_init(r26003);
        mpfr_init(r26004);
        mpfr_init(r26005);
        mpfr_init(r26006);
}

double f_im(double a, double b_2, double c) {
        mpfr_set_d(r25997, b_2, MPFR_RNDN);
        mpfr_neg(r25998, r25997, MPFR_RNDN);
        mpfr_mul(r25999, r25997, r25997, MPFR_RNDN);
        mpfr_set_d(r26000, a, MPFR_RNDN);
        mpfr_set_d(r26001, c, MPFR_RNDN);
        mpfr_mul(r26002, r26000, r26001, MPFR_RNDN);
        mpfr_sub(r26003, r25999, r26002, MPFR_RNDN);
        mpfr_sqrt(r26004, r26003, MPFR_RNDN);
        mpfr_sub(r26005, r25998, r26004, MPFR_RNDN);
        mpfr_div(r26006, r26005, r26000, MPFR_RNDN);
        return mpfr_get_d(r26006, MPFR_RNDN);
}

static mpfr_t r26007, r26008, r26009, r26010, r26011, r26012, r26013, r26014, r26015, r26016, r26017, r26018, r26019, r26020, r26021, r26022, r26023, r26024, r26025, r26026, r26027, r26028, r26029, r26030, r26031, r26032, r26033, r26034, r26035, r26036, r26037;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r26007);
        mpfr_init_set_str(r26008, "-3.3472901989528128e-15", 10, MPFR_RNDN);
        mpfr_init(r26009);
        mpfr_init_set_str(r26010, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r26011);
        mpfr_init(r26012);
        mpfr_init(r26013);
        mpfr_init_set_str(r26014, "-4.003770516478777e-194", 10, MPFR_RNDN);
        mpfr_init(r26015);
        mpfr_init(r26016);
        mpfr_init(r26017);
        mpfr_init(r26018);
        mpfr_init(r26019);
        mpfr_init(r26020);
        mpfr_init(r26021);
        mpfr_init(r26022);
        mpfr_init(r26023);
        mpfr_init(r26024);
        mpfr_init_set_str(r26025, "1.586737340205888e+144", 10, MPFR_RNDN);
        mpfr_init(r26026);
        mpfr_init(r26027);
        mpfr_init(r26028);
        mpfr_init_set_str(r26029, "1", 10, MPFR_RNDN);
        mpfr_init(r26030);
        mpfr_init(r26031);
        mpfr_init_set_str(r26032, "-2", 10, MPFR_RNDN);
        mpfr_init(r26033);
        mpfr_init(r26034);
        mpfr_init(r26035);
        mpfr_init(r26036);
        mpfr_init(r26037);
}

double f_fm(double a, double b_2, double c) {
        mpfr_set_d(r26007, b_2, MPFR_RNDN);
        ;
        mpfr_set_si(r26009, mpfr_cmp(r26007, r26008) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r26011, c, MPFR_RNDN);
        mpfr_div(r26012, r26011, r26007, MPFR_RNDN);
        mpfr_mul(r26013, r26010, r26012, MPFR_RNDN);
        ;
        mpfr_set_si(r26015, mpfr_cmp(r26007, r26014) <= 0, MPFR_RNDN);
        mpfr_set_d(r26016, a, MPFR_RNDN);
        mpfr_mul(r26017, r26011, r26016, MPFR_RNDN);
        mpfr_mul(r26018, r26007, r26007, MPFR_RNDN);
        mpfr_mul(r26019, r26016, r26011, MPFR_RNDN);
        mpfr_sub(r26020, r26018, r26019, MPFR_RNDN);
        mpfr_sqrt(r26021, r26020, MPFR_RNDN);
        mpfr_sub(r26022, r26021, r26007, MPFR_RNDN);
        mpfr_div(r26023, r26017, r26022, MPFR_RNDN);
        mpfr_div(r26024, r26023, r26016, MPFR_RNDN);
        ;
        mpfr_set_si(r26026, mpfr_cmp(r26007, r26025) <= 0, MPFR_RNDN);
        mpfr_neg(r26027, r26007, MPFR_RNDN);
        mpfr_sub(r26028, r26027, r26021, MPFR_RNDN);
        ;
        mpfr_div(r26030, r26029, r26016, MPFR_RNDN);
        mpfr_mul(r26031, r26028, r26030, MPFR_RNDN);
        ;
        mpfr_div(r26033, r26007, r26016, MPFR_RNDN);
        mpfr_mul(r26034, r26032, r26033, MPFR_RNDN);
        if (mpfr_get_si(r26026, MPFR_RNDN)) { mpfr_set(r26035, r26031, MPFR_RNDN); } else { mpfr_set(r26035, r26034, MPFR_RNDN); };
        if (mpfr_get_si(r26015, MPFR_RNDN)) { mpfr_set(r26036, r26024, MPFR_RNDN); } else { mpfr_set(r26036, r26035, MPFR_RNDN); };
        if (mpfr_get_si(r26009, MPFR_RNDN)) { mpfr_set(r26037, r26013, MPFR_RNDN); } else { mpfr_set(r26037, r26036, MPFR_RNDN); };
        return mpfr_get_d(r26037, MPFR_RNDN);
}

static mpfr_t r26038, r26039, r26040, r26041, r26042, r26043, r26044, r26045, r26046, r26047, r26048, r26049, r26050, r26051, r26052, r26053, r26054, r26055, r26056, r26057, r26058, r26059, r26060, r26061, r26062, r26063, r26064, r26065, r26066, r26067, r26068;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r26038);
        mpfr_init_set_str(r26039, "-3.3472901989528128e-15", 10, MPFR_RNDN);
        mpfr_init(r26040);
        mpfr_init_set_str(r26041, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r26042);
        mpfr_init(r26043);
        mpfr_init(r26044);
        mpfr_init_set_str(r26045, "-4.003770516478777e-194", 10, MPFR_RNDN);
        mpfr_init(r26046);
        mpfr_init(r26047);
        mpfr_init(r26048);
        mpfr_init(r26049);
        mpfr_init(r26050);
        mpfr_init(r26051);
        mpfr_init(r26052);
        mpfr_init(r26053);
        mpfr_init(r26054);
        mpfr_init(r26055);
        mpfr_init_set_str(r26056, "1.586737340205888e+144", 10, MPFR_RNDN);
        mpfr_init(r26057);
        mpfr_init(r26058);
        mpfr_init(r26059);
        mpfr_init_set_str(r26060, "1", 10, MPFR_RNDN);
        mpfr_init(r26061);
        mpfr_init(r26062);
        mpfr_init_set_str(r26063, "-2", 10, MPFR_RNDN);
        mpfr_init(r26064);
        mpfr_init(r26065);
        mpfr_init(r26066);
        mpfr_init(r26067);
        mpfr_init(r26068);
}

double f_dm(double a, double b_2, double c) {
        mpfr_set_d(r26038, b_2, MPFR_RNDN);
        ;
        mpfr_set_si(r26040, mpfr_cmp(r26038, r26039) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r26042, c, MPFR_RNDN);
        mpfr_div(r26043, r26042, r26038, MPFR_RNDN);
        mpfr_mul(r26044, r26041, r26043, MPFR_RNDN);
        ;
        mpfr_set_si(r26046, mpfr_cmp(r26038, r26045) <= 0, MPFR_RNDN);
        mpfr_set_d(r26047, a, MPFR_RNDN);
        mpfr_mul(r26048, r26042, r26047, MPFR_RNDN);
        mpfr_mul(r26049, r26038, r26038, MPFR_RNDN);
        mpfr_mul(r26050, r26047, r26042, MPFR_RNDN);
        mpfr_sub(r26051, r26049, r26050, MPFR_RNDN);
        mpfr_sqrt(r26052, r26051, MPFR_RNDN);
        mpfr_sub(r26053, r26052, r26038, MPFR_RNDN);
        mpfr_div(r26054, r26048, r26053, MPFR_RNDN);
        mpfr_div(r26055, r26054, r26047, MPFR_RNDN);
        ;
        mpfr_set_si(r26057, mpfr_cmp(r26038, r26056) <= 0, MPFR_RNDN);
        mpfr_neg(r26058, r26038, MPFR_RNDN);
        mpfr_sub(r26059, r26058, r26052, MPFR_RNDN);
        ;
        mpfr_div(r26061, r26060, r26047, MPFR_RNDN);
        mpfr_mul(r26062, r26059, r26061, MPFR_RNDN);
        ;
        mpfr_div(r26064, r26038, r26047, MPFR_RNDN);
        mpfr_mul(r26065, r26063, r26064, MPFR_RNDN);
        if (mpfr_get_si(r26057, MPFR_RNDN)) { mpfr_set(r26066, r26062, MPFR_RNDN); } else { mpfr_set(r26066, r26065, MPFR_RNDN); };
        if (mpfr_get_si(r26046, MPFR_RNDN)) { mpfr_set(r26067, r26055, MPFR_RNDN); } else { mpfr_set(r26067, r26066, MPFR_RNDN); };
        if (mpfr_get_si(r26040, MPFR_RNDN)) { mpfr_set(r26068, r26044, MPFR_RNDN); } else { mpfr_set(r26068, r26067, MPFR_RNDN); };
        return mpfr_get_d(r26068, MPFR_RNDN);
}

