#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 r58577 = 1.0f;
        float r58578 = x;
        float r58579 = sqrt(r58578);
        float r58580 = r58577 / r58579;
        float r58581 = r58578 + r58577;
        float r58582 = sqrt(r58581);
        float r58583 = r58577 / r58582;
        float r58584 = r58580 - r58583;
        return r58584;
}

double f_id(double x) {
        double r58585 = 1.0;
        double r58586 = x;
        double r58587 = sqrt(r58586);
        double r58588 = r58585 / r58587;
        double r58589 = r58586 + r58585;
        double r58590 = sqrt(r58589);
        double r58591 = r58585 / r58590;
        double r58592 = r58588 - r58591;
        return r58592;
}


double f_of(float x) {
        float r58593 = 1.0f;
        float r58594 = x;
        float r58595 = r58593 + r58594;
        float r58596 = sqrt(r58595);
        float r58597 = sqrt(r58594);
        float r58598 = r58596 + r58597;
        float r58599 = r58593 / r58598;
        float r58600 = r58594 + r58593;
        float r58601 = sqrt(r58600);
        float r58602 = r58597 * r58601;
        float r58603 = r58593 / r58602;
        float r58604 = r58599 * r58603;
        return r58604;
}

double f_od(double x) {
        double r58605 = 1.0;
        double r58606 = x;
        double r58607 = r58605 + r58606;
        double r58608 = sqrt(r58607);
        double r58609 = sqrt(r58606);
        double r58610 = r58608 + r58609;
        double r58611 = r58605 / r58610;
        double r58612 = r58606 + r58605;
        double r58613 = sqrt(r58612);
        double r58614 = r58609 * r58613;
        double r58615 = r58605 / r58614;
        double r58616 = r58611 * r58615;
        return r58616;
}

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 r58617, r58618, r58619, r58620, r58621, r58622, r58623, r58624;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r58617, "1", 10, MPFR_RNDN);
        mpfr_init(r58618);
        mpfr_init(r58619);
        mpfr_init(r58620);
        mpfr_init(r58621);
        mpfr_init(r58622);
        mpfr_init(r58623);
        mpfr_init(r58624);
}

double f_im(double x) {
        ;
        mpfr_set_d(r58618, x, MPFR_RNDN);
        mpfr_sqrt(r58619, r58618, MPFR_RNDN);
        mpfr_div(r58620, r58617, r58619, MPFR_RNDN);
        mpfr_add(r58621, r58618, r58617, MPFR_RNDN);
        mpfr_sqrt(r58622, r58621, MPFR_RNDN);
        mpfr_div(r58623, r58617, r58622, MPFR_RNDN);
        mpfr_sub(r58624, r58620, r58623, MPFR_RNDN);
        return mpfr_get_d(r58624, MPFR_RNDN);
}

static mpfr_t r58625, r58626, r58627, r58628, r58629, r58630, r58631, r58632, r58633, r58634, r58635, r58636;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r58625, "1", 10, MPFR_RNDN);
        mpfr_init(r58626);
        mpfr_init(r58627);
        mpfr_init(r58628);
        mpfr_init(r58629);
        mpfr_init(r58630);
        mpfr_init(r58631);
        mpfr_init(r58632);
        mpfr_init(r58633);
        mpfr_init(r58634);
        mpfr_init(r58635);
        mpfr_init(r58636);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r58626, x, MPFR_RNDN);
        mpfr_add(r58627, r58625, r58626, MPFR_RNDN);
        mpfr_sqrt(r58628, r58627, MPFR_RNDN);
        mpfr_sqrt(r58629, r58626, MPFR_RNDN);
        mpfr_add(r58630, r58628, r58629, MPFR_RNDN);
        mpfr_div(r58631, r58625, r58630, MPFR_RNDN);
        mpfr_add(r58632, r58626, r58625, MPFR_RNDN);
        mpfr_sqrt(r58633, r58632, MPFR_RNDN);
        mpfr_mul(r58634, r58629, r58633, MPFR_RNDN);
        mpfr_div(r58635, r58625, r58634, MPFR_RNDN);
        mpfr_mul(r58636, r58631, r58635, MPFR_RNDN);
        return mpfr_get_d(r58636, MPFR_RNDN);
}

static mpfr_t r58637, r58638, r58639, r58640, r58641, r58642, r58643, r58644, r58645, r58646, r58647, r58648;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r58637, "1", 10, MPFR_RNDN);
        mpfr_init(r58638);
        mpfr_init(r58639);
        mpfr_init(r58640);
        mpfr_init(r58641);
        mpfr_init(r58642);
        mpfr_init(r58643);
        mpfr_init(r58644);
        mpfr_init(r58645);
        mpfr_init(r58646);
        mpfr_init(r58647);
        mpfr_init(r58648);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r58638, x, MPFR_RNDN);
        mpfr_add(r58639, r58637, r58638, MPFR_RNDN);
        mpfr_sqrt(r58640, r58639, MPFR_RNDN);
        mpfr_sqrt(r58641, r58638, MPFR_RNDN);
        mpfr_add(r58642, r58640, r58641, MPFR_RNDN);
        mpfr_div(r58643, r58637, r58642, MPFR_RNDN);
        mpfr_add(r58644, r58638, r58637, MPFR_RNDN);
        mpfr_sqrt(r58645, r58644, MPFR_RNDN);
        mpfr_mul(r58646, r58641, r58645, MPFR_RNDN);
        mpfr_div(r58647, r58637, r58646, MPFR_RNDN);
        mpfr_mul(r58648, r58643, r58647, MPFR_RNDN);
        return mpfr_get_d(r58648, MPFR_RNDN);
}

