#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 r25850 = b_2;
        float r25851 = -r25850;
        float r25852 = r25850 * r25850;
        float r25853 = a;
        float r25854 = c;
        float r25855 = r25853 * r25854;
        float r25856 = r25852 - r25855;
        float r25857 = sqrt(r25856);
        float r25858 = r25851 - r25857;
        float r25859 = r25858 / r25853;
        return r25859;
}

double f_id(double a, double b_2, double c) {
        double r25860 = b_2;
        double r25861 = -r25860;
        double r25862 = r25860 * r25860;
        double r25863 = a;
        double r25864 = c;
        double r25865 = r25863 * r25864;
        double r25866 = r25862 - r25865;
        double r25867 = sqrt(r25866);
        double r25868 = r25861 - r25867;
        double r25869 = r25868 / r25863;
        return r25869;
}


double f_of(float a, float b_2, float c) {
        float r25870 = b_2;
        float r25871 = -4.4718629886123e+18;
        bool r25872 = r25870 <= r25871;
        float r25873 = -1/2;
        float r25874 = c;
        float r25875 = r25873 * r25874;
        float r25876 = r25875 / r25870;
        float r25877 = -2.416846626462428e-136;
        bool r25878 = r25870 <= r25877;
        float r25879 = 1;
        float r25880 = a;
        float r25881 = r25874 * r25880;
        float r25882 = r25880 / r25881;
        float r25883 = -r25870;
        float r25884 = r25870 * r25870;
        float r25885 = r25880 * r25874;
        float r25886 = r25884 - r25885;
        float r25887 = sqrt(r25886);
        float r25888 = r25883 + r25887;
        float r25889 = r25882 * r25888;
        float r25890 = r25879 / r25889;
        float r25891 = 2.8067255509096775e+134;
        bool r25892 = r25870 <= r25891;
        float r25893 = r25883 - r25887;
        float r25894 = r25893 / r25880;
        float r25895 = -2;
        float r25896 = r25870 / r25880;
        float r25897 = r25895 * r25896;
        float r25898 = r25892 ? r25894 : r25897;
        float r25899 = r25878 ? r25890 : r25898;
        float r25900 = r25872 ? r25876 : r25899;
        return r25900;
}

double f_od(double a, double b_2, double c) {
        double r25901 = b_2;
        double r25902 = -4.4718629886123e+18;
        bool r25903 = r25901 <= r25902;
        double r25904 = -1/2;
        double r25905 = c;
        double r25906 = r25904 * r25905;
        double r25907 = r25906 / r25901;
        double r25908 = -2.416846626462428e-136;
        bool r25909 = r25901 <= r25908;
        double r25910 = 1;
        double r25911 = a;
        double r25912 = r25905 * r25911;
        double r25913 = r25911 / r25912;
        double r25914 = -r25901;
        double r25915 = r25901 * r25901;
        double r25916 = r25911 * r25905;
        double r25917 = r25915 - r25916;
        double r25918 = sqrt(r25917);
        double r25919 = r25914 + r25918;
        double r25920 = r25913 * r25919;
        double r25921 = r25910 / r25920;
        double r25922 = 2.8067255509096775e+134;
        bool r25923 = r25901 <= r25922;
        double r25924 = r25914 - r25918;
        double r25925 = r25924 / r25911;
        double r25926 = -2;
        double r25927 = r25901 / r25911;
        double r25928 = r25926 * r25927;
        double r25929 = r25923 ? r25925 : r25928;
        double r25930 = r25909 ? r25921 : r25929;
        double r25931 = r25903 ? r25907 : r25930;
        return r25931;
}

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 r25932, r25933, r25934, r25935, r25936, r25937, r25938, r25939, r25940, r25941;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3408);
        mpfr_init(r25932);
        mpfr_init(r25933);
        mpfr_init(r25934);
        mpfr_init(r25935);
        mpfr_init(r25936);
        mpfr_init(r25937);
        mpfr_init(r25938);
        mpfr_init(r25939);
        mpfr_init(r25940);
        mpfr_init(r25941);
}

double f_im(double a, double b_2, double c) {
        mpfr_set_d(r25932, b_2, MPFR_RNDN);
        mpfr_neg(r25933, r25932, MPFR_RNDN);
        mpfr_mul(r25934, r25932, r25932, MPFR_RNDN);
        mpfr_set_d(r25935, a, MPFR_RNDN);
        mpfr_set_d(r25936, c, MPFR_RNDN);
        mpfr_mul(r25937, r25935, r25936, MPFR_RNDN);
        mpfr_sub(r25938, r25934, r25937, MPFR_RNDN);
        mpfr_sqrt(r25939, r25938, MPFR_RNDN);
        mpfr_sub(r25940, r25933, r25939, MPFR_RNDN);
        mpfr_div(r25941, r25940, r25935, MPFR_RNDN);
        return mpfr_get_d(r25941, MPFR_RNDN);
}

static mpfr_t r25942, r25943, r25944, r25945, r25946, r25947, r25948, r25949, r25950, r25951, r25952, r25953, r25954, r25955, r25956, r25957, r25958, r25959, r25960, r25961, r25962, r25963, r25964, r25965, r25966, r25967, r25968, r25969, r25970, r25971, r25972;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r25942);
        mpfr_init_set_str(r25943, "-4.4718629886123e+18", 10, MPFR_RNDN);
        mpfr_init(r25944);
        mpfr_init_set_str(r25945, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r25946);
        mpfr_init(r25947);
        mpfr_init(r25948);
        mpfr_init_set_str(r25949, "-2.416846626462428e-136", 10, MPFR_RNDN);
        mpfr_init(r25950);
        mpfr_init_set_str(r25951, "1", 10, MPFR_RNDN);
        mpfr_init(r25952);
        mpfr_init(r25953);
        mpfr_init(r25954);
        mpfr_init(r25955);
        mpfr_init(r25956);
        mpfr_init(r25957);
        mpfr_init(r25958);
        mpfr_init(r25959);
        mpfr_init(r25960);
        mpfr_init(r25961);
        mpfr_init(r25962);
        mpfr_init_set_str(r25963, "2.8067255509096775e+134", 10, MPFR_RNDN);
        mpfr_init(r25964);
        mpfr_init(r25965);
        mpfr_init(r25966);
        mpfr_init_set_str(r25967, "-2", 10, MPFR_RNDN);
        mpfr_init(r25968);
        mpfr_init(r25969);
        mpfr_init(r25970);
        mpfr_init(r25971);
        mpfr_init(r25972);
}

double f_fm(double a, double b_2, double c) {
        mpfr_set_d(r25942, b_2, MPFR_RNDN);
        ;
        mpfr_set_si(r25944, mpfr_cmp(r25942, r25943) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r25946, c, MPFR_RNDN);
        mpfr_mul(r25947, r25945, r25946, MPFR_RNDN);
        mpfr_div(r25948, r25947, r25942, MPFR_RNDN);
        ;
        mpfr_set_si(r25950, mpfr_cmp(r25942, r25949) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r25952, a, MPFR_RNDN);
        mpfr_mul(r25953, r25946, r25952, MPFR_RNDN);
        mpfr_div(r25954, r25952, r25953, MPFR_RNDN);
        mpfr_neg(r25955, r25942, MPFR_RNDN);
        mpfr_mul(r25956, r25942, r25942, MPFR_RNDN);
        mpfr_mul(r25957, r25952, r25946, MPFR_RNDN);
        mpfr_sub(r25958, r25956, r25957, MPFR_RNDN);
        mpfr_sqrt(r25959, r25958, MPFR_RNDN);
        mpfr_add(r25960, r25955, r25959, MPFR_RNDN);
        mpfr_mul(r25961, r25954, r25960, MPFR_RNDN);
        mpfr_div(r25962, r25951, r25961, MPFR_RNDN);
        ;
        mpfr_set_si(r25964, mpfr_cmp(r25942, r25963) <= 0, MPFR_RNDN);
        mpfr_sub(r25965, r25955, r25959, MPFR_RNDN);
        mpfr_div(r25966, r25965, r25952, MPFR_RNDN);
        ;
        mpfr_div(r25968, r25942, r25952, MPFR_RNDN);
        mpfr_mul(r25969, r25967, r25968, MPFR_RNDN);
        if (mpfr_get_si(r25964, MPFR_RNDN)) { mpfr_set(r25970, r25966, MPFR_RNDN); } else { mpfr_set(r25970, r25969, MPFR_RNDN); };
        if (mpfr_get_si(r25950, MPFR_RNDN)) { mpfr_set(r25971, r25962, MPFR_RNDN); } else { mpfr_set(r25971, r25970, MPFR_RNDN); };
        if (mpfr_get_si(r25944, MPFR_RNDN)) { mpfr_set(r25972, r25948, MPFR_RNDN); } else { mpfr_set(r25972, r25971, MPFR_RNDN); };
        return mpfr_get_d(r25972, MPFR_RNDN);
}

static mpfr_t 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, r26000, r26001, r26002, r26003;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r25973);
        mpfr_init_set_str(r25974, "-4.4718629886123e+18", 10, MPFR_RNDN);
        mpfr_init(r25975);
        mpfr_init_set_str(r25976, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r25977);
        mpfr_init(r25978);
        mpfr_init(r25979);
        mpfr_init_set_str(r25980, "-2.416846626462428e-136", 10, MPFR_RNDN);
        mpfr_init(r25981);
        mpfr_init_set_str(r25982, "1", 10, MPFR_RNDN);
        mpfr_init(r25983);
        mpfr_init(r25984);
        mpfr_init(r25985);
        mpfr_init(r25986);
        mpfr_init(r25987);
        mpfr_init(r25988);
        mpfr_init(r25989);
        mpfr_init(r25990);
        mpfr_init(r25991);
        mpfr_init(r25992);
        mpfr_init(r25993);
        mpfr_init_set_str(r25994, "2.8067255509096775e+134", 10, MPFR_RNDN);
        mpfr_init(r25995);
        mpfr_init(r25996);
        mpfr_init(r25997);
        mpfr_init_set_str(r25998, "-2", 10, MPFR_RNDN);
        mpfr_init(r25999);
        mpfr_init(r26000);
        mpfr_init(r26001);
        mpfr_init(r26002);
        mpfr_init(r26003);
}

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

