#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 r25877 = b_2;
        float r25878 = -r25877;
        float r25879 = r25877 * r25877;
        float r25880 = a;
        float r25881 = c;
        float r25882 = r25880 * r25881;
        float r25883 = r25879 - r25882;
        float r25884 = sqrt(r25883);
        float r25885 = r25878 - r25884;
        float r25886 = r25885 / r25880;
        return r25886;
}

double f_id(double a, double b_2, double c) {
        double r25887 = b_2;
        double r25888 = -r25887;
        double r25889 = r25887 * r25887;
        double r25890 = a;
        double r25891 = c;
        double r25892 = r25890 * r25891;
        double r25893 = r25889 - r25892;
        double r25894 = sqrt(r25893);
        double r25895 = r25888 - r25894;
        double r25896 = r25895 / r25890;
        return r25896;
}


double f_of(float a, float b_2, float c) {
        float r25897 = b_2;
        float r25898 = -9.364913351832592e+42;
        bool r25899 = r25897 <= r25898;
        float r25900 = 1/2;
        float r25901 = -r25900;
        float r25902 = c;
        float r25903 = r25902 / r25897;
        float r25904 = r25901 * r25903;
        float r25905 = -4.099879830209986e-284;
        bool r25906 = r25897 <= r25905;
        float r25907 = a;
        float r25908 = r25907 * r25902;
        float r25909 = r25897 * r25897;
        float r25910 = r25909 - r25908;
        float r25911 = sqrt(r25910);
        float r25912 = r25911 - r25897;
        float r25913 = r25908 / r25912;
        float r25914 = r25913 / r25907;
        float r25915 = 5.317885823358275e+67;
        bool r25916 = r25897 <= r25915;
        float r25917 = 1;
        float r25918 = r25917 / r25907;
        float r25919 = -r25897;
        float r25920 = r25919 - r25911;
        float r25921 = r25918 * r25920;
        float r25922 = r25897 / r25907;
        float r25923 = -2;
        float r25924 = r25922 * r25923;
        float r25925 = r25916 ? r25921 : r25924;
        float r25926 = r25906 ? r25914 : r25925;
        float r25927 = r25899 ? r25904 : r25926;
        return r25927;
}

double f_od(double a, double b_2, double c) {
        double r25928 = b_2;
        double r25929 = -9.364913351832592e+42;
        bool r25930 = r25928 <= r25929;
        double r25931 = 1/2;
        double r25932 = -r25931;
        double r25933 = c;
        double r25934 = r25933 / r25928;
        double r25935 = r25932 * r25934;
        double r25936 = -4.099879830209986e-284;
        bool r25937 = r25928 <= r25936;
        double r25938 = a;
        double r25939 = r25938 * r25933;
        double r25940 = r25928 * r25928;
        double r25941 = r25940 - r25939;
        double r25942 = sqrt(r25941);
        double r25943 = r25942 - r25928;
        double r25944 = r25939 / r25943;
        double r25945 = r25944 / r25938;
        double r25946 = 5.317885823358275e+67;
        bool r25947 = r25928 <= r25946;
        double r25948 = 1;
        double r25949 = r25948 / r25938;
        double r25950 = -r25928;
        double r25951 = r25950 - r25942;
        double r25952 = r25949 * r25951;
        double r25953 = r25928 / r25938;
        double r25954 = -2;
        double r25955 = r25953 * r25954;
        double r25956 = r25947 ? r25952 : r25955;
        double r25957 = r25937 ? r25945 : r25956;
        double r25958 = r25930 ? r25935 : r25957;
        return r25958;
}

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 r25959, r25960, r25961, r25962, r25963, r25964, r25965, r25966, r25967, r25968;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3408);
        mpfr_init(r25959);
        mpfr_init(r25960);
        mpfr_init(r25961);
        mpfr_init(r25962);
        mpfr_init(r25963);
        mpfr_init(r25964);
        mpfr_init(r25965);
        mpfr_init(r25966);
        mpfr_init(r25967);
        mpfr_init(r25968);
}

double f_im(double a, double b_2, double c) {
        mpfr_set_d(r25959, b_2, MPFR_RNDN);
        mpfr_neg(r25960, r25959, MPFR_RNDN);
        mpfr_mul(r25961, r25959, r25959, MPFR_RNDN);
        mpfr_set_d(r25962, a, MPFR_RNDN);
        mpfr_set_d(r25963, c, MPFR_RNDN);
        mpfr_mul(r25964, r25962, r25963, MPFR_RNDN);
        mpfr_sub(r25965, r25961, r25964, MPFR_RNDN);
        mpfr_sqrt(r25966, r25965, MPFR_RNDN);
        mpfr_sub(r25967, r25960, r25966, MPFR_RNDN);
        mpfr_div(r25968, r25967, r25962, MPFR_RNDN);
        return mpfr_get_d(r25968, MPFR_RNDN);
}

static mpfr_t r25969, r25970, r25971, r25972, r25973, r25974, r25975, r25976, r25977, r25978, r25979, r25980, r25981, r25982, r25983, r25984, r25985, r25986, r25987, r25988, r25989, r25990, r25991, r25992, r25993, r25994, r25995, r25996, r25997, r25998, r25999;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r25969);
        mpfr_init_set_str(r25970, "-9.364913351832592e+42", 10, MPFR_RNDN);
        mpfr_init(r25971);
        mpfr_init_set_str(r25972, "1/2", 10, MPFR_RNDN);
        mpfr_init(r25973);
        mpfr_init(r25974);
        mpfr_init(r25975);
        mpfr_init(r25976);
        mpfr_init_set_str(r25977, "-4.099879830209986e-284", 10, MPFR_RNDN);
        mpfr_init(r25978);
        mpfr_init(r25979);
        mpfr_init(r25980);
        mpfr_init(r25981);
        mpfr_init(r25982);
        mpfr_init(r25983);
        mpfr_init(r25984);
        mpfr_init(r25985);
        mpfr_init(r25986);
        mpfr_init_set_str(r25987, "5.317885823358275e+67", 10, MPFR_RNDN);
        mpfr_init(r25988);
        mpfr_init_set_str(r25989, "1", 10, MPFR_RNDN);
        mpfr_init(r25990);
        mpfr_init(r25991);
        mpfr_init(r25992);
        mpfr_init(r25993);
        mpfr_init(r25994);
        mpfr_init_set_str(r25995, "-2", 10, MPFR_RNDN);
        mpfr_init(r25996);
        mpfr_init(r25997);
        mpfr_init(r25998);
        mpfr_init(r25999);
}

double f_fm(double a, double b_2, double c) {
        mpfr_set_d(r25969, b_2, MPFR_RNDN);
        ;
        mpfr_set_si(r25971, mpfr_cmp(r25969, r25970) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r25973, r25972, MPFR_RNDN);
        mpfr_set_d(r25974, c, MPFR_RNDN);
        mpfr_div(r25975, r25974, r25969, MPFR_RNDN);
        mpfr_mul(r25976, r25973, r25975, MPFR_RNDN);
        ;
        mpfr_set_si(r25978, mpfr_cmp(r25969, r25977) <= 0, MPFR_RNDN);
        mpfr_set_d(r25979, a, MPFR_RNDN);
        mpfr_mul(r25980, r25979, r25974, MPFR_RNDN);
        mpfr_mul(r25981, r25969, r25969, MPFR_RNDN);
        mpfr_sub(r25982, r25981, r25980, MPFR_RNDN);
        mpfr_sqrt(r25983, r25982, MPFR_RNDN);
        mpfr_sub(r25984, r25983, r25969, MPFR_RNDN);
        mpfr_div(r25985, r25980, r25984, MPFR_RNDN);
        mpfr_div(r25986, r25985, r25979, MPFR_RNDN);
        ;
        mpfr_set_si(r25988, mpfr_cmp(r25969, r25987) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r25990, r25989, r25979, MPFR_RNDN);
        mpfr_neg(r25991, r25969, MPFR_RNDN);
        mpfr_sub(r25992, r25991, r25983, MPFR_RNDN);
        mpfr_mul(r25993, r25990, r25992, MPFR_RNDN);
        mpfr_div(r25994, r25969, r25979, MPFR_RNDN);
        ;
        mpfr_mul(r25996, r25994, r25995, MPFR_RNDN);
        if (mpfr_get_si(r25988, MPFR_RNDN)) { mpfr_set(r25997, r25993, MPFR_RNDN); } else { mpfr_set(r25997, r25996, MPFR_RNDN); };
        if (mpfr_get_si(r25978, MPFR_RNDN)) { mpfr_set(r25998, r25986, MPFR_RNDN); } else { mpfr_set(r25998, r25997, MPFR_RNDN); };
        if (mpfr_get_si(r25971, MPFR_RNDN)) { mpfr_set(r25999, r25976, MPFR_RNDN); } else { mpfr_set(r25999, r25998, MPFR_RNDN); };
        return mpfr_get_d(r25999, MPFR_RNDN);
}

static mpfr_t r26000, r26001, r26002, r26003, r26004, r26005, r26006, r26007, r26008, r26009, r26010, r26011, r26012, r26013, r26014, r26015, r26016, r26017, r26018, r26019, r26020, r26021, r26022, r26023, r26024, r26025, r26026, r26027, r26028, r26029, r26030;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r26000);
        mpfr_init_set_str(r26001, "-9.364913351832592e+42", 10, MPFR_RNDN);
        mpfr_init(r26002);
        mpfr_init_set_str(r26003, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26004);
        mpfr_init(r26005);
        mpfr_init(r26006);
        mpfr_init(r26007);
        mpfr_init_set_str(r26008, "-4.099879830209986e-284", 10, MPFR_RNDN);
        mpfr_init(r26009);
        mpfr_init(r26010);
        mpfr_init(r26011);
        mpfr_init(r26012);
        mpfr_init(r26013);
        mpfr_init(r26014);
        mpfr_init(r26015);
        mpfr_init(r26016);
        mpfr_init(r26017);
        mpfr_init_set_str(r26018, "5.317885823358275e+67", 10, MPFR_RNDN);
        mpfr_init(r26019);
        mpfr_init_set_str(r26020, "1", 10, MPFR_RNDN);
        mpfr_init(r26021);
        mpfr_init(r26022);
        mpfr_init(r26023);
        mpfr_init(r26024);
        mpfr_init(r26025);
        mpfr_init_set_str(r26026, "-2", 10, MPFR_RNDN);
        mpfr_init(r26027);
        mpfr_init(r26028);
        mpfr_init(r26029);
        mpfr_init(r26030);
}

double f_dm(double a, double b_2, double c) {
        mpfr_set_d(r26000, b_2, MPFR_RNDN);
        ;
        mpfr_set_si(r26002, mpfr_cmp(r26000, r26001) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r26004, r26003, MPFR_RNDN);
        mpfr_set_d(r26005, c, MPFR_RNDN);
        mpfr_div(r26006, r26005, r26000, MPFR_RNDN);
        mpfr_mul(r26007, r26004, r26006, MPFR_RNDN);
        ;
        mpfr_set_si(r26009, mpfr_cmp(r26000, r26008) <= 0, MPFR_RNDN);
        mpfr_set_d(r26010, a, MPFR_RNDN);
        mpfr_mul(r26011, r26010, r26005, MPFR_RNDN);
        mpfr_mul(r26012, r26000, r26000, MPFR_RNDN);
        mpfr_sub(r26013, r26012, r26011, MPFR_RNDN);
        mpfr_sqrt(r26014, r26013, MPFR_RNDN);
        mpfr_sub(r26015, r26014, r26000, MPFR_RNDN);
        mpfr_div(r26016, r26011, r26015, MPFR_RNDN);
        mpfr_div(r26017, r26016, r26010, MPFR_RNDN);
        ;
        mpfr_set_si(r26019, mpfr_cmp(r26000, r26018) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r26021, r26020, r26010, MPFR_RNDN);
        mpfr_neg(r26022, r26000, MPFR_RNDN);
        mpfr_sub(r26023, r26022, r26014, MPFR_RNDN);
        mpfr_mul(r26024, r26021, r26023, MPFR_RNDN);
        mpfr_div(r26025, r26000, r26010, MPFR_RNDN);
        ;
        mpfr_mul(r26027, r26025, r26026, MPFR_RNDN);
        if (mpfr_get_si(r26019, MPFR_RNDN)) { mpfr_set(r26028, r26024, MPFR_RNDN); } else { mpfr_set(r26028, r26027, MPFR_RNDN); };
        if (mpfr_get_si(r26009, MPFR_RNDN)) { mpfr_set(r26029, r26017, MPFR_RNDN); } else { mpfr_set(r26029, r26028, MPFR_RNDN); };
        if (mpfr_get_si(r26002, MPFR_RNDN)) { mpfr_set(r26030, r26007, MPFR_RNDN); } else { mpfr_set(r26030, r26029, MPFR_RNDN); };
        return mpfr_get_d(r26030, MPFR_RNDN);
}

