#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "2isqrt (example 3.6)";

double f_if(float x) {
        float r27694 = 1;
        float r27695 = x;
        float r27696 = sqrt(r27695);
        float r27697 = r27694 / r27696;
        float r27698 = r27695 + r27694;
        float r27699 = sqrt(r27698);
        float r27700 = r27694 / r27699;
        float r27701 = r27697 - r27700;
        return r27701;
}

double f_id(double x) {
        double r27702 = 1;
        double r27703 = x;
        double r27704 = sqrt(r27703);
        double r27705 = r27702 / r27704;
        double r27706 = r27703 + r27702;
        double r27707 = sqrt(r27706);
        double r27708 = r27702 / r27707;
        double r27709 = r27705 - r27708;
        return r27709;
}


double f_of(float x) {
        float r27710 = 1;
        float r27711 = x;
        float r27712 = r27711 + r27710;
        float r27713 = sqrt(r27711);
        float r27714 = r27712 * r27713;
        float r27715 = sqrt(r27712);
        float r27716 = r27715 * r27711;
        float r27717 = r27714 + r27716;
        float r27718 = r27710 / r27717;
        return r27718;
}

double f_od(double x) {
        double r27719 = 1;
        double r27720 = x;
        double r27721 = r27720 + r27719;
        double r27722 = sqrt(r27720);
        double r27723 = r27721 * r27722;
        double r27724 = sqrt(r27721);
        double r27725 = r27724 * r27720;
        double r27726 = r27723 + r27725;
        double r27727 = r27719 / r27726;
        return r27727;
}

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 r27728, r27729, r27730, r27731, r27732, r27733, r27734, r27735;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27728, "1", 10, MPFR_RNDN);
        mpfr_init(r27729);
        mpfr_init(r27730);
        mpfr_init(r27731);
        mpfr_init(r27732);
        mpfr_init(r27733);
        mpfr_init(r27734);
        mpfr_init(r27735);
}

double f_im(double x) {
        ;
        mpfr_set_d(r27729, x, MPFR_RNDN);
        mpfr_sqrt(r27730, r27729, MPFR_RNDN);
        mpfr_div(r27731, r27728, r27730, MPFR_RNDN);
        mpfr_add(r27732, r27729, r27728, MPFR_RNDN);
        mpfr_sqrt(r27733, r27732, MPFR_RNDN);
        mpfr_div(r27734, r27728, r27733, MPFR_RNDN);
        mpfr_sub(r27735, r27731, r27734, MPFR_RNDN);
        return mpfr_get_d(r27735, MPFR_RNDN);
}

static mpfr_t r27736, r27737, r27738, r27739, r27740, r27741, r27742, r27743, r27744;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27736, "1", 10, MPFR_RNDN);
        mpfr_init(r27737);
        mpfr_init(r27738);
        mpfr_init(r27739);
        mpfr_init(r27740);
        mpfr_init(r27741);
        mpfr_init(r27742);
        mpfr_init(r27743);
        mpfr_init(r27744);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r27737, x, MPFR_RNDN);
        mpfr_add(r27738, r27737, r27736, MPFR_RNDN);
        mpfr_sqrt(r27739, r27737, MPFR_RNDN);
        mpfr_mul(r27740, r27738, r27739, MPFR_RNDN);
        mpfr_sqrt(r27741, r27738, MPFR_RNDN);
        mpfr_mul(r27742, r27741, r27737, MPFR_RNDN);
        mpfr_add(r27743, r27740, r27742, MPFR_RNDN);
        mpfr_div(r27744, r27736, r27743, MPFR_RNDN);
        return mpfr_get_d(r27744, MPFR_RNDN);
}

static mpfr_t r27745, r27746, r27747, r27748, r27749, r27750, r27751, r27752, r27753;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27745, "1", 10, MPFR_RNDN);
        mpfr_init(r27746);
        mpfr_init(r27747);
        mpfr_init(r27748);
        mpfr_init(r27749);
        mpfr_init(r27750);
        mpfr_init(r27751);
        mpfr_init(r27752);
        mpfr_init(r27753);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r27746, x, MPFR_RNDN);
        mpfr_add(r27747, r27746, r27745, MPFR_RNDN);
        mpfr_sqrt(r27748, r27746, MPFR_RNDN);
        mpfr_mul(r27749, r27747, r27748, MPFR_RNDN);
        mpfr_sqrt(r27750, r27747, MPFR_RNDN);
        mpfr_mul(r27751, r27750, r27746, MPFR_RNDN);
        mpfr_add(r27752, r27749, r27751, MPFR_RNDN);
        mpfr_div(r27753, r27745, r27752, MPFR_RNDN);
        return mpfr_get_d(r27753, MPFR_RNDN);
}

