#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 r26952 = 2;
        float r26953 = sqrt(r26952);
        float r26954 = 4;
        float r26955 = r26953 / r26954;
        float r26956 = 1;
        float r26957 = 3;
        float r26958 = v;
        float r26959 = r26958 * r26958;
        float r26960 = r26957 * r26959;
        float r26961 = r26956 - r26960;
        float r26962 = sqrt(r26961);
        float r26963 = r26955 * r26962;
        float r26964 = r26956 - r26959;
        float r26965 = r26963 * r26964;
        return r26965;
}

double f_id(double v) {
        double r26966 = 2;
        double r26967 = sqrt(r26966);
        double r26968 = 4;
        double r26969 = r26967 / r26968;
        double r26970 = 1;
        double r26971 = 3;
        double r26972 = v;
        double r26973 = r26972 * r26972;
        double r26974 = r26971 * r26973;
        double r26975 = r26970 - r26974;
        double r26976 = sqrt(r26975);
        double r26977 = r26969 * r26976;
        double r26978 = r26970 - r26973;
        double r26979 = r26977 * r26978;
        return r26979;
}


double f_of(float v) {
        float r26980 = 2;
        float r26981 = sqrt(r26980);
        float r26982 = 4;
        float r26983 = r26981 / r26982;
        float r26984 = 1;
        float r26985 = 3;
        float r26986 = v;
        float r26987 = r26986 * r26986;
        float r26988 = r26985 * r26987;
        float r26989 = r26984 - r26988;
        float r26990 = sqrt(r26989);
        float r26991 = r26983 * r26990;
        float r26992 = exp(r26991);
        float r26993 = log(r26992);
        float r26994 = r26984 - r26987;
        float r26995 = r26993 * r26994;
        return r26995;
}

double f_od(double v) {
        double r26996 = 2;
        double r26997 = sqrt(r26996);
        double r26998 = 4;
        double r26999 = r26997 / r26998;
        double r27000 = 1;
        double r27001 = 3;
        double r27002 = v;
        double r27003 = r27002 * r27002;
        double r27004 = r27001 * r27003;
        double r27005 = r27000 - r27004;
        double r27006 = sqrt(r27005);
        double r27007 = r26999 * r27006;
        double r27008 = exp(r27007);
        double r27009 = log(r27008);
        double r27010 = r27000 - r27003;
        double r27011 = r27009 * r27010;
        return r27011;
}

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 r27012, r27013, r27014, r27015, r27016, r27017, r27018, r27019, r27020, r27021, r27022, r27023, r27024, r27025;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r27012, "2", 10, MPFR_RNDN);
        mpfr_init(r27013);
        mpfr_init_set_str(r27014, "4", 10, MPFR_RNDN);
        mpfr_init(r27015);
        mpfr_init_set_str(r27016, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27017, "3", 10, MPFR_RNDN);
        mpfr_init(r27018);
        mpfr_init(r27019);
        mpfr_init(r27020);
        mpfr_init(r27021);
        mpfr_init(r27022);
        mpfr_init(r27023);
        mpfr_init(r27024);
        mpfr_init(r27025);
}

double f_im(double v) {
        ;
        mpfr_sqrt(r27013, r27012, MPFR_RNDN);
        ;
        mpfr_div(r27015, r27013, r27014, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27018, v, MPFR_RNDN);
        mpfr_mul(r27019, r27018, r27018, MPFR_RNDN);
        mpfr_mul(r27020, r27017, r27019, MPFR_RNDN);
        mpfr_sub(r27021, r27016, r27020, MPFR_RNDN);
        mpfr_sqrt(r27022, r27021, MPFR_RNDN);
        mpfr_mul(r27023, r27015, r27022, MPFR_RNDN);
        mpfr_sub(r27024, r27016, r27019, MPFR_RNDN);
        mpfr_mul(r27025, r27023, r27024, MPFR_RNDN);
        return mpfr_get_d(r27025, MPFR_RNDN);
}

static mpfr_t r27026, r27027, r27028, r27029, r27030, r27031, r27032, r27033, r27034, r27035, r27036, r27037, r27038, r27039, r27040, r27041;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r27026, "2", 10, MPFR_RNDN);
        mpfr_init(r27027);
        mpfr_init_set_str(r27028, "4", 10, MPFR_RNDN);
        mpfr_init(r27029);
        mpfr_init_set_str(r27030, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27031, "3", 10, MPFR_RNDN);
        mpfr_init(r27032);
        mpfr_init(r27033);
        mpfr_init(r27034);
        mpfr_init(r27035);
        mpfr_init(r27036);
        mpfr_init(r27037);
        mpfr_init(r27038);
        mpfr_init(r27039);
        mpfr_init(r27040);
        mpfr_init(r27041);
}

double f_fm(double v) {
        ;
        mpfr_sqrt(r27027, r27026, MPFR_RNDN);
        ;
        mpfr_div(r27029, r27027, r27028, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27032, v, MPFR_RNDN);
        mpfr_mul(r27033, r27032, r27032, MPFR_RNDN);
        mpfr_mul(r27034, r27031, r27033, MPFR_RNDN);
        mpfr_sub(r27035, r27030, r27034, MPFR_RNDN);
        mpfr_sqrt(r27036, r27035, MPFR_RNDN);
        mpfr_mul(r27037, r27029, r27036, MPFR_RNDN);
        mpfr_exp(r27038, r27037, MPFR_RNDN);
        mpfr_log(r27039, r27038, MPFR_RNDN);
        mpfr_sub(r27040, r27030, r27033, MPFR_RNDN);
        mpfr_mul(r27041, r27039, r27040, MPFR_RNDN);
        return mpfr_get_d(r27041, MPFR_RNDN);
}

static mpfr_t r27042, r27043, r27044, r27045, r27046, r27047, r27048, r27049, r27050, r27051, r27052, r27053, r27054, r27055, r27056, r27057;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r27042, "2", 10, MPFR_RNDN);
        mpfr_init(r27043);
        mpfr_init_set_str(r27044, "4", 10, MPFR_RNDN);
        mpfr_init(r27045);
        mpfr_init_set_str(r27046, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27047, "3", 10, MPFR_RNDN);
        mpfr_init(r27048);
        mpfr_init(r27049);
        mpfr_init(r27050);
        mpfr_init(r27051);
        mpfr_init(r27052);
        mpfr_init(r27053);
        mpfr_init(r27054);
        mpfr_init(r27055);
        mpfr_init(r27056);
        mpfr_init(r27057);
}

double f_dm(double v) {
        ;
        mpfr_sqrt(r27043, r27042, MPFR_RNDN);
        ;
        mpfr_div(r27045, r27043, r27044, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27048, v, MPFR_RNDN);
        mpfr_mul(r27049, r27048, r27048, MPFR_RNDN);
        mpfr_mul(r27050, r27047, r27049, MPFR_RNDN);
        mpfr_sub(r27051, r27046, r27050, MPFR_RNDN);
        mpfr_sqrt(r27052, r27051, MPFR_RNDN);
        mpfr_mul(r27053, r27045, r27052, MPFR_RNDN);
        mpfr_exp(r27054, r27053, MPFR_RNDN);
        mpfr_log(r27055, r27054, MPFR_RNDN);
        mpfr_sub(r27056, r27046, r27049, MPFR_RNDN);
        mpfr_mul(r27057, r27055, r27056, MPFR_RNDN);
        return mpfr_get_d(r27057, MPFR_RNDN);
}

