#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 r31058 = 2.0f;
        float r31059 = sqrt(r31058);
        float r31060 = 4.0f;
        float r31061 = r31059 / r31060;
        float r31062 = 1.0f;
        float r31063 = 3.0f;
        float r31064 = v;
        float r31065 = r31064 * r31064;
        float r31066 = r31063 * r31065;
        float r31067 = r31062 - r31066;
        float r31068 = sqrt(r31067);
        float r31069 = r31061 * r31068;
        float r31070 = r31062 - r31065;
        float r31071 = r31069 * r31070;
        return r31071;
}

double f_id(double v) {
        double r31072 = 2.0;
        double r31073 = sqrt(r31072);
        double r31074 = 4.0;
        double r31075 = r31073 / r31074;
        double r31076 = 1.0;
        double r31077 = 3.0;
        double r31078 = v;
        double r31079 = r31078 * r31078;
        double r31080 = r31077 * r31079;
        double r31081 = r31076 - r31080;
        double r31082 = sqrt(r31081);
        double r31083 = r31075 * r31082;
        double r31084 = r31076 - r31079;
        double r31085 = r31083 * r31084;
        return r31085;
}


double f_of(float v) {
        float r31086 = 2.0f;
        float r31087 = sqrt(r31086);
        float r31088 = 4.0f;
        float r31089 = r31087 / r31088;
        float r31090 = log(r31089);
        float r31091 = 1.0f;
        float r31092 = 3.0f;
        float r31093 = v;
        float r31094 = r31093 * r31093;
        float r31095 = r31092 * r31094;
        float r31096 = r31091 - r31095;
        float r31097 = sqrt(r31096);
        float r31098 = log(r31097);
        float r31099 = r31090 + r31098;
        float r31100 = exp(r31099);
        float r31101 = r31091 - r31094;
        float r31102 = r31100 * r31101;
        return r31102;
}

double f_od(double v) {
        double r31103 = 2.0;
        double r31104 = sqrt(r31103);
        double r31105 = 4.0;
        double r31106 = r31104 / r31105;
        double r31107 = log(r31106);
        double r31108 = 1.0;
        double r31109 = 3.0;
        double r31110 = v;
        double r31111 = r31110 * r31110;
        double r31112 = r31109 * r31111;
        double r31113 = r31108 - r31112;
        double r31114 = sqrt(r31113);
        double r31115 = log(r31114);
        double r31116 = r31107 + r31115;
        double r31117 = exp(r31116);
        double r31118 = r31108 - r31111;
        double r31119 = r31117 * r31118;
        return r31119;
}

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 r31120, r31121, r31122, r31123, r31124, r31125, r31126, r31127, r31128, r31129, r31130, r31131, r31132, r31133;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r31120, "2", 10, MPFR_RNDN);
        mpfr_init(r31121);
        mpfr_init_set_str(r31122, "4", 10, MPFR_RNDN);
        mpfr_init(r31123);
        mpfr_init_set_str(r31124, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r31125, "3", 10, MPFR_RNDN);
        mpfr_init(r31126);
        mpfr_init(r31127);
        mpfr_init(r31128);
        mpfr_init(r31129);
        mpfr_init(r31130);
        mpfr_init(r31131);
        mpfr_init(r31132);
        mpfr_init(r31133);
}

double f_im(double v) {
        ;
        mpfr_sqrt(r31121, r31120, MPFR_RNDN);
        ;
        mpfr_div(r31123, r31121, r31122, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r31126, v, MPFR_RNDN);
        mpfr_sqr(r31127, r31126, MPFR_RNDN);
        mpfr_mul(r31128, r31125, r31127, MPFR_RNDN);
        mpfr_sub(r31129, r31124, r31128, MPFR_RNDN);
        mpfr_sqrt(r31130, r31129, MPFR_RNDN);
        mpfr_mul(r31131, r31123, r31130, MPFR_RNDN);
        mpfr_sub(r31132, r31124, r31127, MPFR_RNDN);
        mpfr_mul(r31133, r31131, r31132, MPFR_RNDN);
        return mpfr_get_d(r31133, MPFR_RNDN);
}

static mpfr_t r31134, r31135, r31136, r31137, r31138, r31139, r31140, r31141, r31142, r31143, r31144, r31145, r31146, r31147, r31148, r31149, r31150;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r31134, "2", 10, MPFR_RNDN);
        mpfr_init(r31135);
        mpfr_init_set_str(r31136, "4", 10, MPFR_RNDN);
        mpfr_init(r31137);
        mpfr_init(r31138);
        mpfr_init_set_str(r31139, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r31140, "3", 10, MPFR_RNDN);
        mpfr_init(r31141);
        mpfr_init(r31142);
        mpfr_init(r31143);
        mpfr_init(r31144);
        mpfr_init(r31145);
        mpfr_init(r31146);
        mpfr_init(r31147);
        mpfr_init(r31148);
        mpfr_init(r31149);
        mpfr_init(r31150);
}

double f_fm(double v) {
        ;
        mpfr_sqrt(r31135, r31134, MPFR_RNDN);
        ;
        mpfr_div(r31137, r31135, r31136, MPFR_RNDN);
        mpfr_log(r31138, r31137, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r31141, v, MPFR_RNDN);
        mpfr_sqr(r31142, r31141, MPFR_RNDN);
        mpfr_mul(r31143, r31140, r31142, MPFR_RNDN);
        mpfr_sub(r31144, r31139, r31143, MPFR_RNDN);
        mpfr_sqrt(r31145, r31144, MPFR_RNDN);
        mpfr_log(r31146, r31145, MPFR_RNDN);
        mpfr_add(r31147, r31138, r31146, MPFR_RNDN);
        mpfr_exp(r31148, r31147, MPFR_RNDN);
        mpfr_sub(r31149, r31139, r31142, MPFR_RNDN);
        mpfr_mul(r31150, r31148, r31149, MPFR_RNDN);
        return mpfr_get_d(r31150, MPFR_RNDN);
}

static mpfr_t r31151, r31152, r31153, r31154, r31155, r31156, r31157, r31158, r31159, r31160, r31161, r31162, r31163, r31164, r31165, r31166, r31167;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r31151, "2", 10, MPFR_RNDN);
        mpfr_init(r31152);
        mpfr_init_set_str(r31153, "4", 10, MPFR_RNDN);
        mpfr_init(r31154);
        mpfr_init(r31155);
        mpfr_init_set_str(r31156, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r31157, "3", 10, MPFR_RNDN);
        mpfr_init(r31158);
        mpfr_init(r31159);
        mpfr_init(r31160);
        mpfr_init(r31161);
        mpfr_init(r31162);
        mpfr_init(r31163);
        mpfr_init(r31164);
        mpfr_init(r31165);
        mpfr_init(r31166);
        mpfr_init(r31167);
}

double f_dm(double v) {
        ;
        mpfr_sqrt(r31152, r31151, MPFR_RNDN);
        ;
        mpfr_div(r31154, r31152, r31153, MPFR_RNDN);
        mpfr_log(r31155, r31154, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r31158, v, MPFR_RNDN);
        mpfr_sqr(r31159, r31158, MPFR_RNDN);
        mpfr_mul(r31160, r31157, r31159, MPFR_RNDN);
        mpfr_sub(r31161, r31156, r31160, MPFR_RNDN);
        mpfr_sqrt(r31162, r31161, MPFR_RNDN);
        mpfr_log(r31163, r31162, MPFR_RNDN);
        mpfr_add(r31164, r31155, r31163, MPFR_RNDN);
        mpfr_exp(r31165, r31164, MPFR_RNDN);
        mpfr_sub(r31166, r31156, r31159, MPFR_RNDN);
        mpfr_mul(r31167, r31165, r31166, MPFR_RNDN);
        return mpfr_get_d(r31167, MPFR_RNDN);
}

