#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 r27182 = 2;
        float r27183 = sqrt(r27182);
        float r27184 = 4;
        float r27185 = r27183 / r27184;
        float r27186 = 1;
        float r27187 = 3;
        float r27188 = v;
        float r27189 = r27188 * r27188;
        float r27190 = r27187 * r27189;
        float r27191 = r27186 - r27190;
        float r27192 = sqrt(r27191);
        float r27193 = r27185 * r27192;
        float r27194 = r27186 - r27189;
        float r27195 = r27193 * r27194;
        return r27195;
}

double f_id(double v) {
        double r27196 = 2;
        double r27197 = sqrt(r27196);
        double r27198 = 4;
        double r27199 = r27197 / r27198;
        double r27200 = 1;
        double r27201 = 3;
        double r27202 = v;
        double r27203 = r27202 * r27202;
        double r27204 = r27201 * r27203;
        double r27205 = r27200 - r27204;
        double r27206 = sqrt(r27205);
        double r27207 = r27199 * r27206;
        double r27208 = r27200 - r27203;
        double r27209 = r27207 * r27208;
        return r27209;
}


double f_of(float v) {
        float r27210 = 2;
        float r27211 = sqrt(r27210);
        float r27212 = 4;
        float r27213 = r27211 / r27212;
        float r27214 = 1;
        float r27215 = 3;
        float r27216 = v;
        float r27217 = r27216 * r27216;
        float r27218 = r27215 * r27217;
        float r27219 = r27214 - r27218;
        float r27220 = sqrt(r27219);
        float r27221 = r27213 * r27220;
        float r27222 = r27214 - r27217;
        float r27223 = r27221 * r27222;
        return r27223;
}

double f_od(double v) {
        double r27224 = 2;
        double r27225 = sqrt(r27224);
        double r27226 = 4;
        double r27227 = r27225 / r27226;
        double r27228 = 1;
        double r27229 = 3;
        double r27230 = v;
        double r27231 = r27230 * r27230;
        double r27232 = r27229 * r27231;
        double r27233 = r27228 - r27232;
        double r27234 = sqrt(r27233);
        double r27235 = r27227 * r27234;
        double r27236 = r27228 - r27231;
        double r27237 = r27235 * r27236;
        return r27237;
}

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 r27238, r27239, r27240, r27241, r27242, r27243, r27244, r27245, r27246, r27247, r27248, r27249, r27250, r27251;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r27238, "2", 10, MPFR_RNDN);
        mpfr_init(r27239);
        mpfr_init_set_str(r27240, "4", 10, MPFR_RNDN);
        mpfr_init(r27241);
        mpfr_init_set_str(r27242, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27243, "3", 10, MPFR_RNDN);
        mpfr_init(r27244);
        mpfr_init(r27245);
        mpfr_init(r27246);
        mpfr_init(r27247);
        mpfr_init(r27248);
        mpfr_init(r27249);
        mpfr_init(r27250);
        mpfr_init(r27251);
}

double f_im(double v) {
        ;
        mpfr_sqrt(r27239, r27238, MPFR_RNDN);
        ;
        mpfr_div(r27241, r27239, r27240, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27244, v, MPFR_RNDN);
        mpfr_mul(r27245, r27244, r27244, MPFR_RNDN);
        mpfr_mul(r27246, r27243, r27245, MPFR_RNDN);
        mpfr_sub(r27247, r27242, r27246, MPFR_RNDN);
        mpfr_sqrt(r27248, r27247, MPFR_RNDN);
        mpfr_mul(r27249, r27241, r27248, MPFR_RNDN);
        mpfr_sub(r27250, r27242, r27245, MPFR_RNDN);
        mpfr_mul(r27251, r27249, r27250, MPFR_RNDN);
        return mpfr_get_d(r27251, MPFR_RNDN);
}

static mpfr_t r27252, r27253, r27254, r27255, r27256, r27257, r27258, r27259, r27260, r27261, r27262, r27263, r27264, r27265;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r27252, "2", 10, MPFR_RNDN);
        mpfr_init(r27253);
        mpfr_init_set_str(r27254, "4", 10, MPFR_RNDN);
        mpfr_init(r27255);
        mpfr_init_set_str(r27256, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27257, "3", 10, MPFR_RNDN);
        mpfr_init(r27258);
        mpfr_init(r27259);
        mpfr_init(r27260);
        mpfr_init(r27261);
        mpfr_init(r27262);
        mpfr_init(r27263);
        mpfr_init(r27264);
        mpfr_init(r27265);
}

double f_fm(double v) {
        ;
        mpfr_sqrt(r27253, r27252, MPFR_RNDN);
        ;
        mpfr_div(r27255, r27253, r27254, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27258, v, MPFR_RNDN);
        mpfr_mul(r27259, r27258, r27258, MPFR_RNDN);
        mpfr_mul(r27260, r27257, r27259, MPFR_RNDN);
        mpfr_sub(r27261, r27256, r27260, MPFR_RNDN);
        mpfr_sqrt(r27262, r27261, MPFR_RNDN);
        mpfr_mul(r27263, r27255, r27262, MPFR_RNDN);
        mpfr_sub(r27264, r27256, r27259, MPFR_RNDN);
        mpfr_mul(r27265, r27263, r27264, MPFR_RNDN);
        return mpfr_get_d(r27265, MPFR_RNDN);
}

static mpfr_t r27266, r27267, r27268, r27269, r27270, r27271, r27272, r27273, r27274, r27275, r27276, r27277, r27278, r27279;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r27266, "2", 10, MPFR_RNDN);
        mpfr_init(r27267);
        mpfr_init_set_str(r27268, "4", 10, MPFR_RNDN);
        mpfr_init(r27269);
        mpfr_init_set_str(r27270, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27271, "3", 10, MPFR_RNDN);
        mpfr_init(r27272);
        mpfr_init(r27273);
        mpfr_init(r27274);
        mpfr_init(r27275);
        mpfr_init(r27276);
        mpfr_init(r27277);
        mpfr_init(r27278);
        mpfr_init(r27279);
}

double f_dm(double v) {
        ;
        mpfr_sqrt(r27267, r27266, MPFR_RNDN);
        ;
        mpfr_div(r27269, r27267, r27268, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27272, v, MPFR_RNDN);
        mpfr_mul(r27273, r27272, r27272, MPFR_RNDN);
        mpfr_mul(r27274, r27271, r27273, MPFR_RNDN);
        mpfr_sub(r27275, r27270, r27274, MPFR_RNDN);
        mpfr_sqrt(r27276, r27275, MPFR_RNDN);
        mpfr_mul(r27277, r27269, r27276, MPFR_RNDN);
        mpfr_sub(r27278, r27270, r27273, MPFR_RNDN);
        mpfr_mul(r27279, r27277, r27278, MPFR_RNDN);
        return mpfr_get_d(r27279, MPFR_RNDN);
}

