#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 r11872634 = 1;
        float r11872635 = x;
        float r11872636 = sqrt(r11872635);
        float r11872637 = r11872634 / r11872636;
        float r11872638 = r11872635 + r11872634;
        float r11872639 = sqrt(r11872638);
        float r11872640 = r11872634 / r11872639;
        float r11872641 = r11872637 - r11872640;
        return r11872641;
}

double f_id(double x) {
        double r11872642 = 1;
        double r11872643 = x;
        double r11872644 = sqrt(r11872643);
        double r11872645 = r11872642 / r11872644;
        double r11872646 = r11872643 + r11872642;
        double r11872647 = sqrt(r11872646);
        double r11872648 = r11872642 / r11872647;
        double r11872649 = r11872645 - r11872648;
        return r11872649;
}


double f_of(float x) {
        float r11872650 = 1;
        float r11872651 = x;
        float r11872652 = r11872651 + r11872650;
        float r11872653 = sqrt(r11872652);
        float r11872654 = sqrt(r11872651);
        float r11872655 = r11872653 + r11872654;
        float r11872656 = r11872650 / r11872655;
        float r11872657 = sqrt(r11872656);
        float r11872658 = r11872654 * r11872653;
        float r11872659 = r11872658 / r11872657;
        float r11872660 = r11872657 / r11872659;
        return r11872660;
}

double f_od(double x) {
        double r11872661 = 1;
        double r11872662 = x;
        double r11872663 = r11872662 + r11872661;
        double r11872664 = sqrt(r11872663);
        double r11872665 = sqrt(r11872662);
        double r11872666 = r11872664 + r11872665;
        double r11872667 = r11872661 / r11872666;
        double r11872668 = sqrt(r11872667);
        double r11872669 = r11872665 * r11872664;
        double r11872670 = r11872669 / r11872668;
        double r11872671 = r11872668 / r11872670;
        return r11872671;
}

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 r11872672, r11872673, r11872674, r11872675, r11872676, r11872677, r11872678, r11872679;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r11872672, "1", 10, MPFR_RNDN);
        mpfr_init(r11872673);
        mpfr_init(r11872674);
        mpfr_init(r11872675);
        mpfr_init(r11872676);
        mpfr_init(r11872677);
        mpfr_init(r11872678);
        mpfr_init(r11872679);
}

double f_im(double x) {
        ;
        mpfr_set_d(r11872673, x, MPFR_RNDN);
        mpfr_sqrt(r11872674, r11872673, MPFR_RNDN);
        mpfr_div(r11872675, r11872672, r11872674, MPFR_RNDN);
        mpfr_add(r11872676, r11872673, r11872672, MPFR_RNDN);
        mpfr_sqrt(r11872677, r11872676, MPFR_RNDN);
        mpfr_div(r11872678, r11872672, r11872677, MPFR_RNDN);
        mpfr_sub(r11872679, r11872675, r11872678, MPFR_RNDN);
        return mpfr_get_d(r11872679, MPFR_RNDN);
}

static mpfr_t r11872680, r11872681, r11872682, r11872683, r11872684, r11872685, r11872686, r11872687, r11872688, r11872689, r11872690;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r11872680, "1", 10, MPFR_RNDN);
        mpfr_init(r11872681);
        mpfr_init(r11872682);
        mpfr_init(r11872683);
        mpfr_init(r11872684);
        mpfr_init(r11872685);
        mpfr_init(r11872686);
        mpfr_init(r11872687);
        mpfr_init(r11872688);
        mpfr_init(r11872689);
        mpfr_init(r11872690);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r11872681, x, MPFR_RNDN);
        mpfr_add(r11872682, r11872681, r11872680, MPFR_RNDN);
        mpfr_sqrt(r11872683, r11872682, MPFR_RNDN);
        mpfr_sqrt(r11872684, r11872681, MPFR_RNDN);
        mpfr_add(r11872685, r11872683, r11872684, MPFR_RNDN);
        mpfr_div(r11872686, r11872680, r11872685, MPFR_RNDN);
        mpfr_sqrt(r11872687, r11872686, MPFR_RNDN);
        mpfr_mul(r11872688, r11872684, r11872683, MPFR_RNDN);
        mpfr_div(r11872689, r11872688, r11872687, MPFR_RNDN);
        mpfr_div(r11872690, r11872687, r11872689, MPFR_RNDN);
        return mpfr_get_d(r11872690, MPFR_RNDN);
}

static mpfr_t r11872691, r11872692, r11872693, r11872694, r11872695, r11872696, r11872697, r11872698, r11872699, r11872700, r11872701;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r11872691, "1", 10, MPFR_RNDN);
        mpfr_init(r11872692);
        mpfr_init(r11872693);
        mpfr_init(r11872694);
        mpfr_init(r11872695);
        mpfr_init(r11872696);
        mpfr_init(r11872697);
        mpfr_init(r11872698);
        mpfr_init(r11872699);
        mpfr_init(r11872700);
        mpfr_init(r11872701);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r11872692, x, MPFR_RNDN);
        mpfr_add(r11872693, r11872692, r11872691, MPFR_RNDN);
        mpfr_sqrt(r11872694, r11872693, MPFR_RNDN);
        mpfr_sqrt(r11872695, r11872692, MPFR_RNDN);
        mpfr_add(r11872696, r11872694, r11872695, MPFR_RNDN);
        mpfr_div(r11872697, r11872691, r11872696, MPFR_RNDN);
        mpfr_sqrt(r11872698, r11872697, MPFR_RNDN);
        mpfr_mul(r11872699, r11872695, r11872694, MPFR_RNDN);
        mpfr_div(r11872700, r11872699, r11872698, MPFR_RNDN);
        mpfr_div(r11872701, r11872698, r11872700, MPFR_RNDN);
        return mpfr_get_d(r11872701, MPFR_RNDN);
}

