#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 r33153 = 2;
        float r33154 = sqrt(r33153);
        float r33155 = 4;
        float r33156 = r33154 / r33155;
        float r33157 = 1;
        float r33158 = 3;
        float r33159 = v;
        float r33160 = r33159 * r33159;
        float r33161 = r33158 * r33160;
        float r33162 = r33157 - r33161;
        float r33163 = sqrt(r33162);
        float r33164 = r33156 * r33163;
        float r33165 = r33157 - r33160;
        float r33166 = r33164 * r33165;
        return r33166;
}

double f_id(double v) {
        double r33167 = 2;
        double r33168 = sqrt(r33167);
        double r33169 = 4;
        double r33170 = r33168 / r33169;
        double r33171 = 1;
        double r33172 = 3;
        double r33173 = v;
        double r33174 = r33173 * r33173;
        double r33175 = r33172 * r33174;
        double r33176 = r33171 - r33175;
        double r33177 = sqrt(r33176);
        double r33178 = r33170 * r33177;
        double r33179 = r33171 - r33174;
        double r33180 = r33178 * r33179;
        return r33180;
}


double f_of(float v) {
        float r33181 = 2;
        float r33182 = sqrt(r33181);
        float r33183 = 4;
        float r33184 = r33182 / r33183;
        float r33185 = 1;
        float r33186 = 3;
        float r33187 = v;
        float r33188 = r33187 * r33187;
        float r33189 = r33186 * r33188;
        float r33190 = r33185 - r33189;
        float r33191 = sqrt(r33190);
        float r33192 = r33184 * r33191;
        float r33193 = r33185 - r33188;
        float r33194 = r33192 * r33193;
        return r33194;
}

double f_od(double v) {
        double r33195 = 2;
        double r33196 = sqrt(r33195);
        double r33197 = 4;
        double r33198 = r33196 / r33197;
        double r33199 = 1;
        double r33200 = 3;
        double r33201 = v;
        double r33202 = r33201 * r33201;
        double r33203 = r33200 * r33202;
        double r33204 = r33199 - r33203;
        double r33205 = sqrt(r33204);
        double r33206 = r33198 * r33205;
        double r33207 = r33199 - r33202;
        double r33208 = r33206 * r33207;
        return r33208;
}

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 r33209, r33210, r33211, r33212, r33213, r33214, r33215, r33216, r33217, r33218, r33219, r33220, r33221, r33222;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33209, "2", 10, MPFR_RNDN);
        mpfr_init(r33210);
        mpfr_init_set_str(r33211, "4", 10, MPFR_RNDN);
        mpfr_init(r33212);
        mpfr_init_set_str(r33213, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r33214, "3", 10, MPFR_RNDN);
        mpfr_init(r33215);
        mpfr_init(r33216);
        mpfr_init(r33217);
        mpfr_init(r33218);
        mpfr_init(r33219);
        mpfr_init(r33220);
        mpfr_init(r33221);
        mpfr_init(r33222);
}

double f_im(double v) {
        ;
        mpfr_sqrt(r33210, r33209, MPFR_RNDN);
        ;
        mpfr_div(r33212, r33210, r33211, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r33215, v, MPFR_RNDN);
        mpfr_mul(r33216, r33215, r33215, MPFR_RNDN);
        mpfr_mul(r33217, r33214, r33216, MPFR_RNDN);
        mpfr_sub(r33218, r33213, r33217, MPFR_RNDN);
        mpfr_sqrt(r33219, r33218, MPFR_RNDN);
        mpfr_mul(r33220, r33212, r33219, MPFR_RNDN);
        mpfr_sub(r33221, r33213, r33216, MPFR_RNDN);
        mpfr_mul(r33222, r33220, r33221, MPFR_RNDN);
        return mpfr_get_d(r33222, MPFR_RNDN);
}

static mpfr_t r33223, r33224, r33225, r33226, r33227, r33228, r33229, r33230, r33231, r33232, r33233, r33234, r33235, r33236;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33223, "2", 10, MPFR_RNDN);
        mpfr_init(r33224);
        mpfr_init_set_str(r33225, "4", 10, MPFR_RNDN);
        mpfr_init(r33226);
        mpfr_init_set_str(r33227, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r33228, "3", 10, MPFR_RNDN);
        mpfr_init(r33229);
        mpfr_init(r33230);
        mpfr_init(r33231);
        mpfr_init(r33232);
        mpfr_init(r33233);
        mpfr_init(r33234);
        mpfr_init(r33235);
        mpfr_init(r33236);
}

double f_fm(double v) {
        ;
        mpfr_sqrt(r33224, r33223, MPFR_RNDN);
        ;
        mpfr_div(r33226, r33224, r33225, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r33229, v, MPFR_RNDN);
        mpfr_mul(r33230, r33229, r33229, MPFR_RNDN);
        mpfr_mul(r33231, r33228, r33230, MPFR_RNDN);
        mpfr_sub(r33232, r33227, r33231, MPFR_RNDN);
        mpfr_sqrt(r33233, r33232, MPFR_RNDN);
        mpfr_mul(r33234, r33226, r33233, MPFR_RNDN);
        mpfr_sub(r33235, r33227, r33230, MPFR_RNDN);
        mpfr_mul(r33236, r33234, r33235, MPFR_RNDN);
        return mpfr_get_d(r33236, MPFR_RNDN);
}

static mpfr_t r33237, r33238, r33239, r33240, r33241, r33242, r33243, r33244, r33245, r33246, r33247, r33248, r33249, r33250;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33237, "2", 10, MPFR_RNDN);
        mpfr_init(r33238);
        mpfr_init_set_str(r33239, "4", 10, MPFR_RNDN);
        mpfr_init(r33240);
        mpfr_init_set_str(r33241, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r33242, "3", 10, MPFR_RNDN);
        mpfr_init(r33243);
        mpfr_init(r33244);
        mpfr_init(r33245);
        mpfr_init(r33246);
        mpfr_init(r33247);
        mpfr_init(r33248);
        mpfr_init(r33249);
        mpfr_init(r33250);
}

double f_dm(double v) {
        ;
        mpfr_sqrt(r33238, r33237, MPFR_RNDN);
        ;
        mpfr_div(r33240, r33238, r33239, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r33243, v, MPFR_RNDN);
        mpfr_mul(r33244, r33243, r33243, MPFR_RNDN);
        mpfr_mul(r33245, r33242, r33244, MPFR_RNDN);
        mpfr_sub(r33246, r33241, r33245, MPFR_RNDN);
        mpfr_sqrt(r33247, r33246, MPFR_RNDN);
        mpfr_mul(r33248, r33240, r33247, MPFR_RNDN);
        mpfr_sub(r33249, r33241, r33244, MPFR_RNDN);
        mpfr_mul(r33250, r33248, r33249, MPFR_RNDN);
        return mpfr_get_d(r33250, MPFR_RNDN);
}

