#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "NMSE problem 3.2.1, positive";

double f_if(float a, float b_2F2, float c) {
        float r5319040 = b_2F2;
        float r5319041 = -r5319040;
        float r5319042 = r5319040 * r5319040;
        float r5319043 = a;
        float r5319044 = c;
        float r5319045 = r5319043 * r5319044;
        float r5319046 = r5319042 - r5319045;
        float r5319047 = sqrt(r5319046);
        float r5319048 = r5319041 + r5319047;
        float r5319049 = r5319048 / r5319043;
        return r5319049;
}

double f_id(double a, double b_2F2, double c) {
        double r5319050 = b_2F2;
        double r5319051 = -r5319050;
        double r5319052 = r5319050 * r5319050;
        double r5319053 = a;
        double r5319054 = c;
        double r5319055 = r5319053 * r5319054;
        double r5319056 = r5319052 - r5319055;
        double r5319057 = sqrt(r5319056);
        double r5319058 = r5319051 + r5319057;
        double r5319059 = r5319058 / r5319053;
        return r5319059;
}


double f_of(float a, float b_2F2, float c) {
        float r5319060 = b_2F2;
        float r5319061 = -2.4063664882097058e+146f;
        bool r5319062 = r5319060 <= r5319061;
        float r5319063 = -2.0f;
        float r5319064 = a;
        float r5319065 = r5319060 / r5319064;
        float r5319066 = r5319063 * r5319065;
        float r5319067 = 0.034260571810453756f;
        bool r5319068 = r5319060 <= r5319067;
        float r5319069 = -r5319060;
        float r5319070 = r5319060 * r5319060;
        float r5319071 = c;
        float r5319072 = r5319064 * r5319071;
        float r5319073 = r5319070 - r5319072;
        float r5319074 = sqrt(r5319073);
        float r5319075 = r5319069 + r5319074;
        float r5319076 = r5319075 / r5319064;
        float r5319077 = r5319060 + r5319069;
        float r5319078 = r5319077 / r5319064;
        float r5319079 = 0.5f;
        float r5319080 = r5319071 / r5319060;
        float r5319081 = r5319079 * r5319080;
        float r5319082 = r5319078 - r5319081;
        float r5319083 = r5319068 ? r5319076 : r5319082;
        float r5319084 = r5319062 ? r5319066 : r5319083;
        return r5319084;
}

double f_od(double a, double b_2F2, double c) {
        double r5319085 = b_2F2;
        double r5319086 = -2.4063664882097058e+146;
        bool r5319087 = r5319085 <= r5319086;
        double r5319088 = -2.0;
        double r5319089 = a;
        double r5319090 = r5319085 / r5319089;
        double r5319091 = r5319088 * r5319090;
        double r5319092 = 0.034260571810453756;
        bool r5319093 = r5319085 <= r5319092;
        double r5319094 = -r5319085;
        double r5319095 = r5319085 * r5319085;
        double r5319096 = c;
        double r5319097 = r5319089 * r5319096;
        double r5319098 = r5319095 - r5319097;
        double r5319099 = sqrt(r5319098);
        double r5319100 = r5319094 + r5319099;
        double r5319101 = r5319100 / r5319089;
        double r5319102 = r5319085 + r5319094;
        double r5319103 = r5319102 / r5319089;
        double r5319104 = 0.5;
        double r5319105 = r5319096 / r5319085;
        double r5319106 = r5319104 * r5319105;
        double r5319107 = r5319103 - r5319106;
        double r5319108 = r5319093 ? r5319101 : r5319107;
        double r5319109 = r5319087 ? r5319091 : r5319108;
        return r5319109;
}

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 r5319110, r5319111, r5319112, r5319113, r5319114, r5319115, r5319116, r5319117, r5319118, r5319119;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5319110);
        mpfr_init(r5319111);
        mpfr_init(r5319112);
        mpfr_init(r5319113);
        mpfr_init(r5319114);
        mpfr_init(r5319115);
        mpfr_init(r5319116);
        mpfr_init(r5319117);
        mpfr_init(r5319118);
        mpfr_init(r5319119);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r5319110, b_2F2, MPFR_RNDN);
        mpfr_neg(r5319111, r5319110, MPFR_RNDN);
        mpfr_sqr(r5319112, r5319110, MPFR_RNDN);
        mpfr_set_d(r5319113, a, MPFR_RNDN);
        mpfr_set_d(r5319114, c, MPFR_RNDN);
        mpfr_mul(r5319115, r5319113, r5319114, MPFR_RNDN);
        mpfr_sub(r5319116, r5319112, r5319115, MPFR_RNDN);
        mpfr_sqrt(r5319117, r5319116, MPFR_RNDN);
        mpfr_add(r5319118, r5319111, r5319117, MPFR_RNDN);
        mpfr_div(r5319119, r5319118, r5319113, MPFR_RNDN);
        return mpfr_get_d(r5319119, MPFR_RNDN);
}

static mpfr_t r5319120, r5319121, r5319122, r5319123, r5319124, r5319125, r5319126, r5319127, r5319128, r5319129, r5319130, r5319131, r5319132, r5319133, r5319134, r5319135, r5319136, r5319137, r5319138, r5319139, r5319140, r5319141, r5319142, r5319143, r5319144;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5319120);
        mpfr_init_set_str(r5319121, "-2.4063664882097058e+146", 10, MPFR_RNDN);
        mpfr_init(r5319122);
        mpfr_init_set_str(r5319123, "-2", 10, MPFR_RNDN);
        mpfr_init(r5319124);
        mpfr_init(r5319125);
        mpfr_init(r5319126);
        mpfr_init_set_str(r5319127, "0.034260571810453756", 10, MPFR_RNDN);
        mpfr_init(r5319128);
        mpfr_init(r5319129);
        mpfr_init(r5319130);
        mpfr_init(r5319131);
        mpfr_init(r5319132);
        mpfr_init(r5319133);
        mpfr_init(r5319134);
        mpfr_init(r5319135);
        mpfr_init(r5319136);
        mpfr_init(r5319137);
        mpfr_init(r5319138);
        mpfr_init_set_str(r5319139, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5319140);
        mpfr_init(r5319141);
        mpfr_init(r5319142);
        mpfr_init(r5319143);
        mpfr_init(r5319144);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r5319120, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r5319122, mpfr_cmp(r5319120, r5319121) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r5319124, a, MPFR_RNDN);
        mpfr_div(r5319125, r5319120, r5319124, MPFR_RNDN);
        mpfr_mul(r5319126, r5319123, r5319125, MPFR_RNDN);
        ;
        mpfr_set_si(r5319128, mpfr_cmp(r5319120, r5319127) <= 0, MPFR_RNDN);
        mpfr_neg(r5319129, r5319120, MPFR_RNDN);
        mpfr_sqr(r5319130, r5319120, MPFR_RNDN);
        mpfr_set_d(r5319131, c, MPFR_RNDN);
        mpfr_mul(r5319132, r5319124, r5319131, MPFR_RNDN);
        mpfr_sub(r5319133, r5319130, r5319132, MPFR_RNDN);
        mpfr_sqrt(r5319134, r5319133, MPFR_RNDN);
        mpfr_add(r5319135, r5319129, r5319134, MPFR_RNDN);
        mpfr_div(r5319136, r5319135, r5319124, MPFR_RNDN);
        mpfr_add(r5319137, r5319120, r5319129, MPFR_RNDN);
        mpfr_div(r5319138, r5319137, r5319124, MPFR_RNDN);
        ;
        mpfr_div(r5319140, r5319131, r5319120, MPFR_RNDN);
        mpfr_mul(r5319141, r5319139, r5319140, MPFR_RNDN);
        mpfr_sub(r5319142, r5319138, r5319141, MPFR_RNDN);
        if (mpfr_get_si(r5319128, MPFR_RNDN)) { mpfr_set(r5319143, r5319136, MPFR_RNDN); } else { mpfr_set(r5319143, r5319142, MPFR_RNDN); };
        if (mpfr_get_si(r5319122, MPFR_RNDN)) { mpfr_set(r5319144, r5319126, MPFR_RNDN); } else { mpfr_set(r5319144, r5319143, MPFR_RNDN); };
        return mpfr_get_d(r5319144, MPFR_RNDN);
}

static mpfr_t r5319145, r5319146, r5319147, r5319148, r5319149, r5319150, r5319151, r5319152, r5319153, r5319154, r5319155, r5319156, r5319157, r5319158, r5319159, r5319160, r5319161, r5319162, r5319163, r5319164, r5319165, r5319166, r5319167, r5319168, r5319169;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5319145);
        mpfr_init_set_str(r5319146, "-2.4063664882097058e+146", 10, MPFR_RNDN);
        mpfr_init(r5319147);
        mpfr_init_set_str(r5319148, "-2", 10, MPFR_RNDN);
        mpfr_init(r5319149);
        mpfr_init(r5319150);
        mpfr_init(r5319151);
        mpfr_init_set_str(r5319152, "0.034260571810453756", 10, MPFR_RNDN);
        mpfr_init(r5319153);
        mpfr_init(r5319154);
        mpfr_init(r5319155);
        mpfr_init(r5319156);
        mpfr_init(r5319157);
        mpfr_init(r5319158);
        mpfr_init(r5319159);
        mpfr_init(r5319160);
        mpfr_init(r5319161);
        mpfr_init(r5319162);
        mpfr_init(r5319163);
        mpfr_init_set_str(r5319164, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5319165);
        mpfr_init(r5319166);
        mpfr_init(r5319167);
        mpfr_init(r5319168);
        mpfr_init(r5319169);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r5319145, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r5319147, mpfr_cmp(r5319145, r5319146) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r5319149, a, MPFR_RNDN);
        mpfr_div(r5319150, r5319145, r5319149, MPFR_RNDN);
        mpfr_mul(r5319151, r5319148, r5319150, MPFR_RNDN);
        ;
        mpfr_set_si(r5319153, mpfr_cmp(r5319145, r5319152) <= 0, MPFR_RNDN);
        mpfr_neg(r5319154, r5319145, MPFR_RNDN);
        mpfr_sqr(r5319155, r5319145, MPFR_RNDN);
        mpfr_set_d(r5319156, c, MPFR_RNDN);
        mpfr_mul(r5319157, r5319149, r5319156, MPFR_RNDN);
        mpfr_sub(r5319158, r5319155, r5319157, MPFR_RNDN);
        mpfr_sqrt(r5319159, r5319158, MPFR_RNDN);
        mpfr_add(r5319160, r5319154, r5319159, MPFR_RNDN);
        mpfr_div(r5319161, r5319160, r5319149, MPFR_RNDN);
        mpfr_add(r5319162, r5319145, r5319154, MPFR_RNDN);
        mpfr_div(r5319163, r5319162, r5319149, MPFR_RNDN);
        ;
        mpfr_div(r5319165, r5319156, r5319145, MPFR_RNDN);
        mpfr_mul(r5319166, r5319164, r5319165, MPFR_RNDN);
        mpfr_sub(r5319167, r5319163, r5319166, MPFR_RNDN);
        if (mpfr_get_si(r5319153, MPFR_RNDN)) { mpfr_set(r5319168, r5319161, MPFR_RNDN); } else { mpfr_set(r5319168, r5319167, MPFR_RNDN); };
        if (mpfr_get_si(r5319147, MPFR_RNDN)) { mpfr_set(r5319169, r5319151, MPFR_RNDN); } else { mpfr_set(r5319169, r5319168, MPFR_RNDN); };
        return mpfr_get_d(r5319169, MPFR_RNDN);
}

