#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 r32920 = 2;
        float r32921 = sqrt(r32920);
        float r32922 = 4;
        float r32923 = r32921 / r32922;
        float r32924 = 1;
        float r32925 = 3;
        float r32926 = v;
        float r32927 = r32926 * r32926;
        float r32928 = r32925 * r32927;
        float r32929 = r32924 - r32928;
        float r32930 = sqrt(r32929);
        float r32931 = r32923 * r32930;
        float r32932 = r32924 - r32927;
        float r32933 = r32931 * r32932;
        return r32933;
}

double f_id(double v) {
        double r32934 = 2;
        double r32935 = sqrt(r32934);
        double r32936 = 4;
        double r32937 = r32935 / r32936;
        double r32938 = 1;
        double r32939 = 3;
        double r32940 = v;
        double r32941 = r32940 * r32940;
        double r32942 = r32939 * r32941;
        double r32943 = r32938 - r32942;
        double r32944 = sqrt(r32943);
        double r32945 = r32937 * r32944;
        double r32946 = r32938 - r32941;
        double r32947 = r32945 * r32946;
        return r32947;
}


double f_of(float v) {
        float r32948 = 2;
        float r32949 = sqrt(r32948);
        float r32950 = 4;
        float r32951 = r32949 / r32950;
        float r32952 = 1;
        float r32953 = 3;
        float r32954 = v;
        float r32955 = r32954 * r32954;
        float r32956 = r32953 * r32955;
        float r32957 = r32952 - r32956;
        float r32958 = sqrt(r32957);
        float r32959 = r32951 * r32958;
        float r32960 = r32952 - r32955;
        float r32961 = r32959 * r32960;
        return r32961;
}

double f_od(double v) {
        double r32962 = 2;
        double r32963 = sqrt(r32962);
        double r32964 = 4;
        double r32965 = r32963 / r32964;
        double r32966 = 1;
        double r32967 = 3;
        double r32968 = v;
        double r32969 = r32968 * r32968;
        double r32970 = r32967 * r32969;
        double r32971 = r32966 - r32970;
        double r32972 = sqrt(r32971);
        double r32973 = r32965 * r32972;
        double r32974 = r32966 - r32969;
        double r32975 = r32973 * r32974;
        return r32975;
}

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 r32976, r32977, r32978, r32979, r32980, r32981, r32982, r32983, r32984, r32985, r32986, r32987, r32988, r32989;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32976, "2", 10, MPFR_RNDN);
        mpfr_init(r32977);
        mpfr_init_set_str(r32978, "4", 10, MPFR_RNDN);
        mpfr_init(r32979);
        mpfr_init_set_str(r32980, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32981, "3", 10, MPFR_RNDN);
        mpfr_init(r32982);
        mpfr_init(r32983);
        mpfr_init(r32984);
        mpfr_init(r32985);
        mpfr_init(r32986);
        mpfr_init(r32987);
        mpfr_init(r32988);
        mpfr_init(r32989);
}

double f_im(double v) {
        ;
        mpfr_sqrt(r32977, r32976, MPFR_RNDN);
        ;
        mpfr_div(r32979, r32977, r32978, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r32982, v, MPFR_RNDN);
        mpfr_mul(r32983, r32982, r32982, MPFR_RNDN);
        mpfr_mul(r32984, r32981, r32983, MPFR_RNDN);
        mpfr_sub(r32985, r32980, r32984, MPFR_RNDN);
        mpfr_sqrt(r32986, r32985, MPFR_RNDN);
        mpfr_mul(r32987, r32979, r32986, MPFR_RNDN);
        mpfr_sub(r32988, r32980, r32983, MPFR_RNDN);
        mpfr_mul(r32989, r32987, r32988, MPFR_RNDN);
        return mpfr_get_d(r32989, MPFR_RNDN);
}

static mpfr_t r32990, r32991, r32992, r32993, r32994, r32995, r32996, r32997, r32998, r32999, r33000, r33001, r33002, r33003;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32990, "2", 10, MPFR_RNDN);
        mpfr_init(r32991);
        mpfr_init_set_str(r32992, "4", 10, MPFR_RNDN);
        mpfr_init(r32993);
        mpfr_init_set_str(r32994, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32995, "3", 10, MPFR_RNDN);
        mpfr_init(r32996);
        mpfr_init(r32997);
        mpfr_init(r32998);
        mpfr_init(r32999);
        mpfr_init(r33000);
        mpfr_init(r33001);
        mpfr_init(r33002);
        mpfr_init(r33003);
}

double f_fm(double v) {
        ;
        mpfr_sqrt(r32991, r32990, MPFR_RNDN);
        ;
        mpfr_div(r32993, r32991, r32992, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r32996, v, MPFR_RNDN);
        mpfr_mul(r32997, r32996, r32996, MPFR_RNDN);
        mpfr_mul(r32998, r32995, r32997, MPFR_RNDN);
        mpfr_sub(r32999, r32994, r32998, MPFR_RNDN);
        mpfr_sqrt(r33000, r32999, MPFR_RNDN);
        mpfr_mul(r33001, r32993, r33000, MPFR_RNDN);
        mpfr_sub(r33002, r32994, r32997, MPFR_RNDN);
        mpfr_mul(r33003, r33001, r33002, MPFR_RNDN);
        return mpfr_get_d(r33003, MPFR_RNDN);
}

static mpfr_t r33004, r33005, r33006, r33007, r33008, r33009, r33010, r33011, r33012, r33013, r33014, r33015, r33016, r33017;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33004, "2", 10, MPFR_RNDN);
        mpfr_init(r33005);
        mpfr_init_set_str(r33006, "4", 10, MPFR_RNDN);
        mpfr_init(r33007);
        mpfr_init_set_str(r33008, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r33009, "3", 10, MPFR_RNDN);
        mpfr_init(r33010);
        mpfr_init(r33011);
        mpfr_init(r33012);
        mpfr_init(r33013);
        mpfr_init(r33014);
        mpfr_init(r33015);
        mpfr_init(r33016);
        mpfr_init(r33017);
}

double f_dm(double v) {
        ;
        mpfr_sqrt(r33005, r33004, MPFR_RNDN);
        ;
        mpfr_div(r33007, r33005, r33006, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r33010, v, MPFR_RNDN);
        mpfr_mul(r33011, r33010, r33010, MPFR_RNDN);
        mpfr_mul(r33012, r33009, r33011, MPFR_RNDN);
        mpfr_sub(r33013, r33008, r33012, MPFR_RNDN);
        mpfr_sqrt(r33014, r33013, MPFR_RNDN);
        mpfr_mul(r33015, r33007, r33014, MPFR_RNDN);
        mpfr_sub(r33016, r33008, r33011, MPFR_RNDN);
        mpfr_mul(r33017, r33015, r33016, MPFR_RNDN);
        return mpfr_get_d(r33017, MPFR_RNDN);
}

