#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 r33369 = 2;
        float r33370 = sqrt(r33369);
        float r33371 = 4;
        float r33372 = r33370 / r33371;
        float r33373 = 1;
        float r33374 = 3;
        float r33375 = v;
        float r33376 = r33375 * r33375;
        float r33377 = r33374 * r33376;
        float r33378 = r33373 - r33377;
        float r33379 = sqrt(r33378);
        float r33380 = r33372 * r33379;
        float r33381 = r33373 - r33376;
        float r33382 = r33380 * r33381;
        return r33382;
}

double f_id(double v) {
        double r33383 = 2;
        double r33384 = sqrt(r33383);
        double r33385 = 4;
        double r33386 = r33384 / r33385;
        double r33387 = 1;
        double r33388 = 3;
        double r33389 = v;
        double r33390 = r33389 * r33389;
        double r33391 = r33388 * r33390;
        double r33392 = r33387 - r33391;
        double r33393 = sqrt(r33392);
        double r33394 = r33386 * r33393;
        double r33395 = r33387 - r33390;
        double r33396 = r33394 * r33395;
        return r33396;
}


double f_of(float v) {
        float r33397 = 2;
        float r33398 = sqrt(r33397);
        float r33399 = 4;
        float r33400 = r33398 / r33399;
        float r33401 = 1;
        float r33402 = 3;
        float r33403 = v;
        float r33404 = r33403 * r33403;
        float r33405 = r33402 * r33404;
        float r33406 = r33401 - r33405;
        float r33407 = sqrt(r33406);
        float r33408 = r33400 * r33407;
        float r33409 = r33401 - r33404;
        float r33410 = r33408 * r33409;
        return r33410;
}

double f_od(double v) {
        double r33411 = 2;
        double r33412 = sqrt(r33411);
        double r33413 = 4;
        double r33414 = r33412 / r33413;
        double r33415 = 1;
        double r33416 = 3;
        double r33417 = v;
        double r33418 = r33417 * r33417;
        double r33419 = r33416 * r33418;
        double r33420 = r33415 - r33419;
        double r33421 = sqrt(r33420);
        double r33422 = r33414 * r33421;
        double r33423 = r33415 - r33418;
        double r33424 = r33422 * r33423;
        return r33424;
}

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 r33425, r33426, r33427, r33428, r33429, r33430, r33431, r33432, r33433, r33434, r33435, r33436, r33437, r33438;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33425, "2", 10, MPFR_RNDN);
        mpfr_init(r33426);
        mpfr_init_set_str(r33427, "4", 10, MPFR_RNDN);
        mpfr_init(r33428);
        mpfr_init_set_str(r33429, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r33430, "3", 10, MPFR_RNDN);
        mpfr_init(r33431);
        mpfr_init(r33432);
        mpfr_init(r33433);
        mpfr_init(r33434);
        mpfr_init(r33435);
        mpfr_init(r33436);
        mpfr_init(r33437);
        mpfr_init(r33438);
}

double f_im(double v) {
        ;
        mpfr_sqrt(r33426, r33425, MPFR_RNDN);
        ;
        mpfr_div(r33428, r33426, r33427, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r33431, v, MPFR_RNDN);
        mpfr_mul(r33432, r33431, r33431, MPFR_RNDN);
        mpfr_mul(r33433, r33430, r33432, MPFR_RNDN);
        mpfr_sub(r33434, r33429, r33433, MPFR_RNDN);
        mpfr_sqrt(r33435, r33434, MPFR_RNDN);
        mpfr_mul(r33436, r33428, r33435, MPFR_RNDN);
        mpfr_sub(r33437, r33429, r33432, MPFR_RNDN);
        mpfr_mul(r33438, r33436, r33437, MPFR_RNDN);
        return mpfr_get_d(r33438, MPFR_RNDN);
}

static mpfr_t r33439, r33440, r33441, r33442, r33443, r33444, r33445, r33446, r33447, r33448, r33449, r33450, r33451, r33452;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33439, "2", 10, MPFR_RNDN);
        mpfr_init(r33440);
        mpfr_init_set_str(r33441, "4", 10, MPFR_RNDN);
        mpfr_init(r33442);
        mpfr_init_set_str(r33443, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r33444, "3", 10, MPFR_RNDN);
        mpfr_init(r33445);
        mpfr_init(r33446);
        mpfr_init(r33447);
        mpfr_init(r33448);
        mpfr_init(r33449);
        mpfr_init(r33450);
        mpfr_init(r33451);
        mpfr_init(r33452);
}

double f_fm(double v) {
        ;
        mpfr_sqrt(r33440, r33439, MPFR_RNDN);
        ;
        mpfr_div(r33442, r33440, r33441, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r33445, v, MPFR_RNDN);
        mpfr_mul(r33446, r33445, r33445, MPFR_RNDN);
        mpfr_mul(r33447, r33444, r33446, MPFR_RNDN);
        mpfr_sub(r33448, r33443, r33447, MPFR_RNDN);
        mpfr_sqrt(r33449, r33448, MPFR_RNDN);
        mpfr_mul(r33450, r33442, r33449, MPFR_RNDN);
        mpfr_sub(r33451, r33443, r33446, MPFR_RNDN);
        mpfr_mul(r33452, r33450, r33451, MPFR_RNDN);
        return mpfr_get_d(r33452, MPFR_RNDN);
}

static mpfr_t r33453, r33454, r33455, r33456, r33457, r33458, r33459, r33460, r33461, r33462, r33463, r33464, r33465, r33466;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r33453, "2", 10, MPFR_RNDN);
        mpfr_init(r33454);
        mpfr_init_set_str(r33455, "4", 10, MPFR_RNDN);
        mpfr_init(r33456);
        mpfr_init_set_str(r33457, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r33458, "3", 10, MPFR_RNDN);
        mpfr_init(r33459);
        mpfr_init(r33460);
        mpfr_init(r33461);
        mpfr_init(r33462);
        mpfr_init(r33463);
        mpfr_init(r33464);
        mpfr_init(r33465);
        mpfr_init(r33466);
}

double f_dm(double v) {
        ;
        mpfr_sqrt(r33454, r33453, MPFR_RNDN);
        ;
        mpfr_div(r33456, r33454, r33455, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r33459, v, MPFR_RNDN);
        mpfr_mul(r33460, r33459, r33459, MPFR_RNDN);
        mpfr_mul(r33461, r33458, r33460, MPFR_RNDN);
        mpfr_sub(r33462, r33457, r33461, MPFR_RNDN);
        mpfr_sqrt(r33463, r33462, MPFR_RNDN);
        mpfr_mul(r33464, r33456, r33463, MPFR_RNDN);
        mpfr_sub(r33465, r33457, r33460, MPFR_RNDN);
        mpfr_mul(r33466, r33464, r33465, MPFR_RNDN);
        return mpfr_get_d(r33466, MPFR_RNDN);
}

