#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 r32880 = 2;
        float r32881 = sqrt(r32880);
        float r32882 = 4;
        float r32883 = r32881 / r32882;
        float r32884 = 1;
        float r32885 = 3;
        float r32886 = v;
        float r32887 = r32886 * r32886;
        float r32888 = r32885 * r32887;
        float r32889 = r32884 - r32888;
        float r32890 = sqrt(r32889);
        float r32891 = r32883 * r32890;
        float r32892 = r32884 - r32887;
        float r32893 = r32891 * r32892;
        return r32893;
}

double f_id(double v) {
        double r32894 = 2;
        double r32895 = sqrt(r32894);
        double r32896 = 4;
        double r32897 = r32895 / r32896;
        double r32898 = 1;
        double r32899 = 3;
        double r32900 = v;
        double r32901 = r32900 * r32900;
        double r32902 = r32899 * r32901;
        double r32903 = r32898 - r32902;
        double r32904 = sqrt(r32903);
        double r32905 = r32897 * r32904;
        double r32906 = r32898 - r32901;
        double r32907 = r32905 * r32906;
        return r32907;
}


double f_of(float v) {
        float r32908 = 2;
        float r32909 = sqrt(r32908);
        float r32910 = 4;
        float r32911 = r32909 / r32910;
        float r32912 = 1;
        float r32913 = 3;
        float r32914 = v;
        float r32915 = r32914 * r32914;
        float r32916 = r32913 * r32915;
        float r32917 = r32912 - r32916;
        float r32918 = sqrt(r32917);
        float r32919 = r32911 * r32918;
        float r32920 = r32912 - r32915;
        float r32921 = r32919 * r32920;
        return r32921;
}

double f_od(double v) {
        double r32922 = 2;
        double r32923 = sqrt(r32922);
        double r32924 = 4;
        double r32925 = r32923 / r32924;
        double r32926 = 1;
        double r32927 = 3;
        double r32928 = v;
        double r32929 = r32928 * r32928;
        double r32930 = r32927 * r32929;
        double r32931 = r32926 - r32930;
        double r32932 = sqrt(r32931);
        double r32933 = r32925 * r32932;
        double r32934 = r32926 - r32929;
        double r32935 = r32933 * r32934;
        return r32935;
}

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 r32936, r32937, r32938, r32939, r32940, r32941, r32942, r32943, r32944, r32945, r32946, r32947, r32948, r32949;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32936, "2", 10, MPFR_RNDN);
        mpfr_init(r32937);
        mpfr_init_set_str(r32938, "4", 10, MPFR_RNDN);
        mpfr_init(r32939);
        mpfr_init_set_str(r32940, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32941, "3", 10, MPFR_RNDN);
        mpfr_init(r32942);
        mpfr_init(r32943);
        mpfr_init(r32944);
        mpfr_init(r32945);
        mpfr_init(r32946);
        mpfr_init(r32947);
        mpfr_init(r32948);
        mpfr_init(r32949);
}

double f_im(double v) {
        ;
        mpfr_sqrt(r32937, r32936, MPFR_RNDN);
        ;
        mpfr_div(r32939, r32937, r32938, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r32942, v, MPFR_RNDN);
        mpfr_mul(r32943, r32942, r32942, MPFR_RNDN);
        mpfr_mul(r32944, r32941, r32943, MPFR_RNDN);
        mpfr_sub(r32945, r32940, r32944, MPFR_RNDN);
        mpfr_sqrt(r32946, r32945, MPFR_RNDN);
        mpfr_mul(r32947, r32939, r32946, MPFR_RNDN);
        mpfr_sub(r32948, r32940, r32943, MPFR_RNDN);
        mpfr_mul(r32949, r32947, r32948, MPFR_RNDN);
        return mpfr_get_d(r32949, MPFR_RNDN);
}

static mpfr_t r32950, r32951, r32952, r32953, r32954, r32955, r32956, r32957, r32958, r32959, r32960, r32961, r32962, r32963;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32950, "2", 10, MPFR_RNDN);
        mpfr_init(r32951);
        mpfr_init_set_str(r32952, "4", 10, MPFR_RNDN);
        mpfr_init(r32953);
        mpfr_init_set_str(r32954, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32955, "3", 10, MPFR_RNDN);
        mpfr_init(r32956);
        mpfr_init(r32957);
        mpfr_init(r32958);
        mpfr_init(r32959);
        mpfr_init(r32960);
        mpfr_init(r32961);
        mpfr_init(r32962);
        mpfr_init(r32963);
}

double f_fm(double v) {
        ;
        mpfr_sqrt(r32951, r32950, MPFR_RNDN);
        ;
        mpfr_div(r32953, r32951, r32952, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r32956, v, MPFR_RNDN);
        mpfr_mul(r32957, r32956, r32956, MPFR_RNDN);
        mpfr_mul(r32958, r32955, r32957, MPFR_RNDN);
        mpfr_sub(r32959, r32954, r32958, MPFR_RNDN);
        mpfr_sqrt(r32960, r32959, MPFR_RNDN);
        mpfr_mul(r32961, r32953, r32960, MPFR_RNDN);
        mpfr_sub(r32962, r32954, r32957, MPFR_RNDN);
        mpfr_mul(r32963, r32961, r32962, MPFR_RNDN);
        return mpfr_get_d(r32963, MPFR_RNDN);
}

static mpfr_t r32964, r32965, r32966, r32967, r32968, r32969, r32970, r32971, r32972, r32973, r32974, r32975, r32976, r32977;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r32964, "2", 10, MPFR_RNDN);
        mpfr_init(r32965);
        mpfr_init_set_str(r32966, "4", 10, MPFR_RNDN);
        mpfr_init(r32967);
        mpfr_init_set_str(r32968, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r32969, "3", 10, MPFR_RNDN);
        mpfr_init(r32970);
        mpfr_init(r32971);
        mpfr_init(r32972);
        mpfr_init(r32973);
        mpfr_init(r32974);
        mpfr_init(r32975);
        mpfr_init(r32976);
        mpfr_init(r32977);
}

double f_dm(double v) {
        ;
        mpfr_sqrt(r32965, r32964, MPFR_RNDN);
        ;
        mpfr_div(r32967, r32965, r32966, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r32970, v, MPFR_RNDN);
        mpfr_mul(r32971, r32970, r32970, MPFR_RNDN);
        mpfr_mul(r32972, r32969, r32971, MPFR_RNDN);
        mpfr_sub(r32973, r32968, r32972, MPFR_RNDN);
        mpfr_sqrt(r32974, r32973, MPFR_RNDN);
        mpfr_mul(r32975, r32967, r32974, MPFR_RNDN);
        mpfr_sub(r32976, r32968, r32971, MPFR_RNDN);
        mpfr_mul(r32977, r32975, r32976, MPFR_RNDN);
        return mpfr_get_d(r32977, MPFR_RNDN);
}

