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

char *name = "Falkner and Boettcher, Appendix B, 2";

double f_if(float v) {
        float r27138 = 2;
        float r27139 = sqrt(r27138);
        float r27140 = 4;
        float r27141 = r27139 / r27140;
        float r27142 = 1;
        float r27143 = 3;
        float r27144 = v;
        float r27145 = r27144 * r27144;
        float r27146 = r27143 * r27145;
        float r27147 = r27142 - r27146;
        float r27148 = sqrt(r27147);
        float r27149 = r27141 * r27148;
        float r27150 = r27142 - r27145;
        float r27151 = r27149 * r27150;
        return r27151;
}

double f_id(double v) {
        double r27152 = 2;
        double r27153 = sqrt(r27152);
        double r27154 = 4;
        double r27155 = r27153 / r27154;
        double r27156 = 1;
        double r27157 = 3;
        double r27158 = v;
        double r27159 = r27158 * r27158;
        double r27160 = r27157 * r27159;
        double r27161 = r27156 - r27160;
        double r27162 = sqrt(r27161);
        double r27163 = r27155 * r27162;
        double r27164 = r27156 - r27159;
        double r27165 = r27163 * r27164;
        return r27165;
}


double f_of(float v) {
        float r27166 = 2;
        float r27167 = sqrt(r27166);
        float r27168 = 4;
        float r27169 = r27167 / r27168;
        float r27170 = 1;
        float r27171 = 3;
        float r27172 = v;
        float r27173 = r27172 * r27172;
        float r27174 = r27171 * r27173;
        float r27175 = r27170 - r27174;
        float r27176 = sqrt(r27175);
        float r27177 = r27169 * r27176;
        float r27178 = r27170 - r27173;
        float r27179 = r27177 * r27178;
        return r27179;
}

double f_od(double v) {
        double r27180 = 2;
        double r27181 = sqrt(r27180);
        double r27182 = 4;
        double r27183 = r27181 / r27182;
        double r27184 = 1;
        double r27185 = 3;
        double r27186 = v;
        double r27187 = r27186 * r27186;
        double r27188 = r27185 * r27187;
        double r27189 = r27184 - r27188;
        double r27190 = sqrt(r27189);
        double r27191 = r27183 * r27190;
        double r27192 = r27184 - r27187;
        double r27193 = r27191 * r27192;
        return r27193;
}

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 r27194, r27195, r27196, r27197, r27198, r27199, r27200, r27201, r27202, r27203, r27204, r27205, r27206, r27207;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r27194, "2", 10, MPFR_RNDN);
        mpfr_init(r27195);
        mpfr_init_set_str(r27196, "4", 10, MPFR_RNDN);
        mpfr_init(r27197);
        mpfr_init_set_str(r27198, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27199, "3", 10, MPFR_RNDN);
        mpfr_init(r27200);
        mpfr_init(r27201);
        mpfr_init(r27202);
        mpfr_init(r27203);
        mpfr_init(r27204);
        mpfr_init(r27205);
        mpfr_init(r27206);
        mpfr_init(r27207);
}

double f_im(double v) {
        ;
        mpfr_sqrt(r27195, r27194, MPFR_RNDN);
        ;
        mpfr_div(r27197, r27195, r27196, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27200, v, MPFR_RNDN);
        mpfr_mul(r27201, r27200, r27200, MPFR_RNDN);
        mpfr_mul(r27202, r27199, r27201, MPFR_RNDN);
        mpfr_sub(r27203, r27198, r27202, MPFR_RNDN);
        mpfr_sqrt(r27204, r27203, MPFR_RNDN);
        mpfr_mul(r27205, r27197, r27204, MPFR_RNDN);
        mpfr_sub(r27206, r27198, r27201, MPFR_RNDN);
        mpfr_mul(r27207, r27205, r27206, MPFR_RNDN);
        return mpfr_get_d(r27207, MPFR_RNDN);
}

static mpfr_t r27208, r27209, r27210, r27211, r27212, r27213, r27214, r27215, r27216, r27217, r27218, r27219, r27220, r27221;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r27208, "2", 10, MPFR_RNDN);
        mpfr_init(r27209);
        mpfr_init_set_str(r27210, "4", 10, MPFR_RNDN);
        mpfr_init(r27211);
        mpfr_init_set_str(r27212, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27213, "3", 10, MPFR_RNDN);
        mpfr_init(r27214);
        mpfr_init(r27215);
        mpfr_init(r27216);
        mpfr_init(r27217);
        mpfr_init(r27218);
        mpfr_init(r27219);
        mpfr_init(r27220);
        mpfr_init(r27221);
}

double f_fm(double v) {
        ;
        mpfr_sqrt(r27209, r27208, MPFR_RNDN);
        ;
        mpfr_div(r27211, r27209, r27210, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27214, v, MPFR_RNDN);
        mpfr_mul(r27215, r27214, r27214, MPFR_RNDN);
        mpfr_mul(r27216, r27213, r27215, MPFR_RNDN);
        mpfr_sub(r27217, r27212, r27216, MPFR_RNDN);
        mpfr_sqrt(r27218, r27217, MPFR_RNDN);
        mpfr_mul(r27219, r27211, r27218, MPFR_RNDN);
        mpfr_sub(r27220, r27212, r27215, MPFR_RNDN);
        mpfr_mul(r27221, r27219, r27220, MPFR_RNDN);
        return mpfr_get_d(r27221, MPFR_RNDN);
}

static mpfr_t r27222, r27223, r27224, r27225, r27226, r27227, r27228, r27229, r27230, r27231, r27232, r27233, r27234, r27235;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r27222, "2", 10, MPFR_RNDN);
        mpfr_init(r27223);
        mpfr_init_set_str(r27224, "4", 10, MPFR_RNDN);
        mpfr_init(r27225);
        mpfr_init_set_str(r27226, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27227, "3", 10, MPFR_RNDN);
        mpfr_init(r27228);
        mpfr_init(r27229);
        mpfr_init(r27230);
        mpfr_init(r27231);
        mpfr_init(r27232);
        mpfr_init(r27233);
        mpfr_init(r27234);
        mpfr_init(r27235);
}

double f_dm(double v) {
        ;
        mpfr_sqrt(r27223, r27222, MPFR_RNDN);
        ;
        mpfr_div(r27225, r27223, r27224, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27228, v, MPFR_RNDN);
        mpfr_mul(r27229, r27228, r27228, MPFR_RNDN);
        mpfr_mul(r27230, r27227, r27229, MPFR_RNDN);
        mpfr_sub(r27231, r27226, r27230, MPFR_RNDN);
        mpfr_sqrt(r27232, r27231, MPFR_RNDN);
        mpfr_mul(r27233, r27225, r27232, MPFR_RNDN);
        mpfr_sub(r27234, r27226, r27229, MPFR_RNDN);
        mpfr_mul(r27235, r27233, r27234, MPFR_RNDN);
        return mpfr_get_d(r27235, MPFR_RNDN);
}

