#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 r27657 = 2;
        float r27658 = sqrt(r27657);
        float r27659 = 4;
        float r27660 = r27658 / r27659;
        float r27661 = 1;
        float r27662 = 3;
        float r27663 = v;
        float r27664 = r27663 * r27663;
        float r27665 = r27662 * r27664;
        float r27666 = r27661 - r27665;
        float r27667 = sqrt(r27666);
        float r27668 = r27660 * r27667;
        float r27669 = r27661 - r27664;
        float r27670 = r27668 * r27669;
        return r27670;
}

double f_id(double v) {
        double r27671 = 2;
        double r27672 = sqrt(r27671);
        double r27673 = 4;
        double r27674 = r27672 / r27673;
        double r27675 = 1;
        double r27676 = 3;
        double r27677 = v;
        double r27678 = r27677 * r27677;
        double r27679 = r27676 * r27678;
        double r27680 = r27675 - r27679;
        double r27681 = sqrt(r27680);
        double r27682 = r27674 * r27681;
        double r27683 = r27675 - r27678;
        double r27684 = r27682 * r27683;
        return r27684;
}


double f_of(float v) {
        float r27685 = 2;
        float r27686 = sqrt(r27685);
        float r27687 = 4;
        float r27688 = r27686 / r27687;
        float r27689 = 1;
        float r27690 = 3;
        float r27691 = v;
        float r27692 = r27691 * r27691;
        float r27693 = r27690 * r27692;
        float r27694 = r27689 - r27693;
        float r27695 = sqrt(r27694);
        float r27696 = r27688 * r27695;
        float r27697 = r27689 - r27692;
        float r27698 = r27696 * r27697;
        return r27698;
}

double f_od(double v) {
        double r27699 = 2;
        double r27700 = sqrt(r27699);
        double r27701 = 4;
        double r27702 = r27700 / r27701;
        double r27703 = 1;
        double r27704 = 3;
        double r27705 = v;
        double r27706 = r27705 * r27705;
        double r27707 = r27704 * r27706;
        double r27708 = r27703 - r27707;
        double r27709 = sqrt(r27708);
        double r27710 = r27702 * r27709;
        double r27711 = r27703 - r27706;
        double r27712 = r27710 * r27711;
        return r27712;
}

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 r27713, r27714, r27715, r27716, r27717, r27718, r27719, r27720, r27721, r27722, r27723, r27724, r27725, r27726;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r27713, "2", 10, MPFR_RNDN);
        mpfr_init(r27714);
        mpfr_init_set_str(r27715, "4", 10, MPFR_RNDN);
        mpfr_init(r27716);
        mpfr_init_set_str(r27717, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27718, "3", 10, MPFR_RNDN);
        mpfr_init(r27719);
        mpfr_init(r27720);
        mpfr_init(r27721);
        mpfr_init(r27722);
        mpfr_init(r27723);
        mpfr_init(r27724);
        mpfr_init(r27725);
        mpfr_init(r27726);
}

double f_im(double v) {
        ;
        mpfr_sqrt(r27714, r27713, MPFR_RNDN);
        ;
        mpfr_div(r27716, r27714, r27715, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27719, v, MPFR_RNDN);
        mpfr_mul(r27720, r27719, r27719, MPFR_RNDN);
        mpfr_mul(r27721, r27718, r27720, MPFR_RNDN);
        mpfr_sub(r27722, r27717, r27721, MPFR_RNDN);
        mpfr_sqrt(r27723, r27722, MPFR_RNDN);
        mpfr_mul(r27724, r27716, r27723, MPFR_RNDN);
        mpfr_sub(r27725, r27717, r27720, MPFR_RNDN);
        mpfr_mul(r27726, r27724, r27725, MPFR_RNDN);
        return mpfr_get_d(r27726, MPFR_RNDN);
}

static mpfr_t r27727, r27728, r27729, r27730, r27731, r27732, r27733, r27734, r27735, r27736, r27737, r27738, r27739, r27740;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r27727, "2", 10, MPFR_RNDN);
        mpfr_init(r27728);
        mpfr_init_set_str(r27729, "4", 10, MPFR_RNDN);
        mpfr_init(r27730);
        mpfr_init_set_str(r27731, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27732, "3", 10, MPFR_RNDN);
        mpfr_init(r27733);
        mpfr_init(r27734);
        mpfr_init(r27735);
        mpfr_init(r27736);
        mpfr_init(r27737);
        mpfr_init(r27738);
        mpfr_init(r27739);
        mpfr_init(r27740);
}

double f_fm(double v) {
        ;
        mpfr_sqrt(r27728, r27727, MPFR_RNDN);
        ;
        mpfr_div(r27730, r27728, r27729, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27733, v, MPFR_RNDN);
        mpfr_mul(r27734, r27733, r27733, MPFR_RNDN);
        mpfr_mul(r27735, r27732, r27734, MPFR_RNDN);
        mpfr_sub(r27736, r27731, r27735, MPFR_RNDN);
        mpfr_sqrt(r27737, r27736, MPFR_RNDN);
        mpfr_mul(r27738, r27730, r27737, MPFR_RNDN);
        mpfr_sub(r27739, r27731, r27734, MPFR_RNDN);
        mpfr_mul(r27740, r27738, r27739, MPFR_RNDN);
        return mpfr_get_d(r27740, MPFR_RNDN);
}

static mpfr_t r27741, r27742, r27743, r27744, r27745, r27746, r27747, r27748, r27749, r27750, r27751, r27752, r27753, r27754;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r27741, "2", 10, MPFR_RNDN);
        mpfr_init(r27742);
        mpfr_init_set_str(r27743, "4", 10, MPFR_RNDN);
        mpfr_init(r27744);
        mpfr_init_set_str(r27745, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27746, "3", 10, MPFR_RNDN);
        mpfr_init(r27747);
        mpfr_init(r27748);
        mpfr_init(r27749);
        mpfr_init(r27750);
        mpfr_init(r27751);
        mpfr_init(r27752);
        mpfr_init(r27753);
        mpfr_init(r27754);
}

double f_dm(double v) {
        ;
        mpfr_sqrt(r27742, r27741, MPFR_RNDN);
        ;
        mpfr_div(r27744, r27742, r27743, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27747, v, MPFR_RNDN);
        mpfr_mul(r27748, r27747, r27747, MPFR_RNDN);
        mpfr_mul(r27749, r27746, r27748, MPFR_RNDN);
        mpfr_sub(r27750, r27745, r27749, MPFR_RNDN);
        mpfr_sqrt(r27751, r27750, MPFR_RNDN);
        mpfr_mul(r27752, r27744, r27751, MPFR_RNDN);
        mpfr_sub(r27753, r27745, r27748, MPFR_RNDN);
        mpfr_mul(r27754, r27752, r27753, MPFR_RNDN);
        return mpfr_get_d(r27754, MPFR_RNDN);
}

