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

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

double f_if(float v) {
        float r32971 = 1;
        float r32972 = 5;
        float r32973 = v;
        float r32974 = r32973 * r32973;
        float r32975 = r32972 * r32974;
        float r32976 = r32971 - r32975;
        float r32977 = r32974 - r32971;
        float r32978 = r32976 / r32977;
        float r32979 = acos(r32978);
        return r32979;
}

double f_id(double v) {
        double r32980 = 1;
        double r32981 = 5;
        double r32982 = v;
        double r32983 = r32982 * r32982;
        double r32984 = r32981 * r32983;
        double r32985 = r32980 - r32984;
        double r32986 = r32983 - r32980;
        double r32987 = r32985 / r32986;
        double r32988 = acos(r32987);
        return r32988;
}


double f_of(float v) {
        float r32989 = 1;
        float r32990 = 5;
        float r32991 = v;
        float r32992 = r32991 * r32991;
        float r32993 = r32990 * r32992;
        float r32994 = r32989 - r32993;
        float r32995 = r32992 - r32989;
        float r32996 = r32994 / r32995;
        float r32997 = acos(r32996);
        float r32998 = sqrt(r32997);
        float r32999 = sqrt(r32998);
        float r33000 = r32998 * r32999;
        float r33001 = cbrt(r32999);
        float r33002 = r33001 * r33001;
        float r33003 = r33000 * r33002;
        float r33004 = r33003 * r33001;
        return r33004;
}

double f_od(double v) {
        double r33005 = 1;
        double r33006 = 5;
        double r33007 = v;
        double r33008 = r33007 * r33007;
        double r33009 = r33006 * r33008;
        double r33010 = r33005 - r33009;
        double r33011 = r33008 - r33005;
        double r33012 = r33010 / r33011;
        double r33013 = acos(r33012);
        double r33014 = sqrt(r33013);
        double r33015 = sqrt(r33014);
        double r33016 = r33014 * r33015;
        double r33017 = cbrt(r33015);
        double r33018 = r33017 * r33017;
        double r33019 = r33016 * r33018;
        double r33020 = r33019 * r33017;
        return r33020;
}

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 r33021, r33022, r33023, r33024, r33025, r33026, r33027, r33028, r33029;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33021, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r33022, "5", 10, MPFR_RNDN);
        mpfr_init(r33023);
        mpfr_init(r33024);
        mpfr_init(r33025);
        mpfr_init(r33026);
        mpfr_init(r33027);
        mpfr_init(r33028);
        mpfr_init(r33029);
}

double f_im(double v) {
        ;
        ;
        mpfr_set_d(r33023, v, MPFR_RNDN);
        mpfr_mul(r33024, r33023, r33023, MPFR_RNDN);
        mpfr_mul(r33025, r33022, r33024, MPFR_RNDN);
        mpfr_sub(r33026, r33021, r33025, MPFR_RNDN);
        mpfr_sub(r33027, r33024, r33021, MPFR_RNDN);
        mpfr_div(r33028, r33026, r33027, MPFR_RNDN);
        mpfr_acos(r33029, r33028, MPFR_RNDN);
        return mpfr_get_d(r33029, MPFR_RNDN);
}

static mpfr_t r33030, r33031, r33032, r33033, r33034, r33035, r33036, r33037, r33038, r33039, r33040, r33041, r33042, r33043, r33044, r33045;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33030, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r33031, "5", 10, MPFR_RNDN);
        mpfr_init(r33032);
        mpfr_init(r33033);
        mpfr_init(r33034);
        mpfr_init(r33035);
        mpfr_init(r33036);
        mpfr_init(r33037);
        mpfr_init(r33038);
        mpfr_init(r33039);
        mpfr_init(r33040);
        mpfr_init(r33041);
        mpfr_init(r33042);
        mpfr_init(r33043);
        mpfr_init(r33044);
        mpfr_init(r33045);
}

double f_fm(double v) {
        ;
        ;
        mpfr_set_d(r33032, v, MPFR_RNDN);
        mpfr_mul(r33033, r33032, r33032, MPFR_RNDN);
        mpfr_mul(r33034, r33031, r33033, MPFR_RNDN);
        mpfr_sub(r33035, r33030, r33034, MPFR_RNDN);
        mpfr_sub(r33036, r33033, r33030, MPFR_RNDN);
        mpfr_div(r33037, r33035, r33036, MPFR_RNDN);
        mpfr_acos(r33038, r33037, MPFR_RNDN);
        mpfr_sqrt(r33039, r33038, MPFR_RNDN);
        mpfr_sqrt(r33040, r33039, MPFR_RNDN);
        mpfr_mul(r33041, r33039, r33040, MPFR_RNDN);
        mpfr_cbrt(r33042, r33040, MPFR_RNDN);
        mpfr_mul(r33043, r33042, r33042, MPFR_RNDN);
        mpfr_mul(r33044, r33041, r33043, MPFR_RNDN);
        mpfr_mul(r33045, r33044, r33042, MPFR_RNDN);
        return mpfr_get_d(r33045, MPFR_RNDN);
}

static mpfr_t r33046, r33047, r33048, r33049, r33050, r33051, r33052, r33053, r33054, r33055, r33056, r33057, r33058, r33059, r33060, r33061;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33046, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r33047, "5", 10, MPFR_RNDN);
        mpfr_init(r33048);
        mpfr_init(r33049);
        mpfr_init(r33050);
        mpfr_init(r33051);
        mpfr_init(r33052);
        mpfr_init(r33053);
        mpfr_init(r33054);
        mpfr_init(r33055);
        mpfr_init(r33056);
        mpfr_init(r33057);
        mpfr_init(r33058);
        mpfr_init(r33059);
        mpfr_init(r33060);
        mpfr_init(r33061);
}

double f_dm(double v) {
        ;
        ;
        mpfr_set_d(r33048, v, MPFR_RNDN);
        mpfr_mul(r33049, r33048, r33048, MPFR_RNDN);
        mpfr_mul(r33050, r33047, r33049, MPFR_RNDN);
        mpfr_sub(r33051, r33046, r33050, MPFR_RNDN);
        mpfr_sub(r33052, r33049, r33046, MPFR_RNDN);
        mpfr_div(r33053, r33051, r33052, MPFR_RNDN);
        mpfr_acos(r33054, r33053, MPFR_RNDN);
        mpfr_sqrt(r33055, r33054, MPFR_RNDN);
        mpfr_sqrt(r33056, r33055, MPFR_RNDN);
        mpfr_mul(r33057, r33055, r33056, MPFR_RNDN);
        mpfr_cbrt(r33058, r33056, MPFR_RNDN);
        mpfr_mul(r33059, r33058, r33058, MPFR_RNDN);
        mpfr_mul(r33060, r33057, r33059, MPFR_RNDN);
        mpfr_mul(r33061, r33060, r33058, MPFR_RNDN);
        return mpfr_get_d(r33061, MPFR_RNDN);
}

