#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 r4876563 = 1.0f;
        float r4876564 = x;
        float r4876565 = sqrt(r4876564);
        float r4876566 = r4876563 / r4876565;
        float r4876567 = r4876564 + r4876563;
        float r4876568 = sqrt(r4876567);
        float r4876569 = r4876563 / r4876568;
        float r4876570 = r4876566 - r4876569;
        return r4876570;
}

double f_id(double x) {
        double r4876571 = 1.0;
        double r4876572 = x;
        double r4876573 = sqrt(r4876572);
        double r4876574 = r4876571 / r4876573;
        double r4876575 = r4876572 + r4876571;
        double r4876576 = sqrt(r4876575);
        double r4876577 = r4876571 / r4876576;
        double r4876578 = r4876574 - r4876577;
        return r4876578;
}


double f_of(float x) {
        float r4876579 = 1.0f;
        float r4876580 = x;
        float r4876581 = r4876580 + r4876579;
        float r4876582 = sqrt(r4876581);
        float r4876583 = sqrt(r4876580);
        float r4876584 = r4876582 + r4876583;
        float r4876585 = r4876579 / r4876584;
        float r4876586 = sqrt(r4876585);
        float r4876587 = r4876586 / r4876583;
        float r4876588 = r4876586 / r4876582;
        float r4876589 = r4876587 * r4876588;
        return r4876589;
}

double f_od(double x) {
        double r4876590 = 1.0;
        double r4876591 = x;
        double r4876592 = r4876591 + r4876590;
        double r4876593 = sqrt(r4876592);
        double r4876594 = sqrt(r4876591);
        double r4876595 = r4876593 + r4876594;
        double r4876596 = r4876590 / r4876595;
        double r4876597 = sqrt(r4876596);
        double r4876598 = r4876597 / r4876594;
        double r4876599 = r4876597 / r4876593;
        double r4876600 = r4876598 * r4876599;
        return r4876600;
}

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 r4876601, r4876602, r4876603, r4876604, r4876605, r4876606, r4876607, r4876608;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r4876601, "1", 10, MPFR_RNDN);
        mpfr_init(r4876602);
        mpfr_init(r4876603);
        mpfr_init(r4876604);
        mpfr_init(r4876605);
        mpfr_init(r4876606);
        mpfr_init(r4876607);
        mpfr_init(r4876608);
}

double f_im(double x) {
        ;
        mpfr_set_d(r4876602, x, MPFR_RNDN);
        mpfr_sqrt(r4876603, r4876602, MPFR_RNDN);
        mpfr_div(r4876604, r4876601, r4876603, MPFR_RNDN);
        mpfr_add(r4876605, r4876602, r4876601, MPFR_RNDN);
        mpfr_sqrt(r4876606, r4876605, MPFR_RNDN);
        mpfr_div(r4876607, r4876601, r4876606, MPFR_RNDN);
        mpfr_sub(r4876608, r4876604, r4876607, MPFR_RNDN);
        return mpfr_get_d(r4876608, MPFR_RNDN);
}

static mpfr_t r4876609, r4876610, r4876611, r4876612, r4876613, r4876614, r4876615, r4876616, r4876617, r4876618, r4876619;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r4876609, "1", 10, MPFR_RNDN);
        mpfr_init(r4876610);
        mpfr_init(r4876611);
        mpfr_init(r4876612);
        mpfr_init(r4876613);
        mpfr_init(r4876614);
        mpfr_init(r4876615);
        mpfr_init(r4876616);
        mpfr_init(r4876617);
        mpfr_init(r4876618);
        mpfr_init(r4876619);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r4876610, x, MPFR_RNDN);
        mpfr_add(r4876611, r4876610, r4876609, MPFR_RNDN);
        mpfr_sqrt(r4876612, r4876611, MPFR_RNDN);
        mpfr_sqrt(r4876613, r4876610, MPFR_RNDN);
        mpfr_add(r4876614, r4876612, r4876613, MPFR_RNDN);
        mpfr_div(r4876615, r4876609, r4876614, MPFR_RNDN);
        mpfr_sqrt(r4876616, r4876615, MPFR_RNDN);
        mpfr_div(r4876617, r4876616, r4876613, MPFR_RNDN);
        mpfr_div(r4876618, r4876616, r4876612, MPFR_RNDN);
        mpfr_mul(r4876619, r4876617, r4876618, MPFR_RNDN);
        return mpfr_get_d(r4876619, MPFR_RNDN);
}

static mpfr_t r4876620, r4876621, r4876622, r4876623, r4876624, r4876625, r4876626, r4876627, r4876628, r4876629, r4876630;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r4876620, "1", 10, MPFR_RNDN);
        mpfr_init(r4876621);
        mpfr_init(r4876622);
        mpfr_init(r4876623);
        mpfr_init(r4876624);
        mpfr_init(r4876625);
        mpfr_init(r4876626);
        mpfr_init(r4876627);
        mpfr_init(r4876628);
        mpfr_init(r4876629);
        mpfr_init(r4876630);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r4876621, x, MPFR_RNDN);
        mpfr_add(r4876622, r4876621, r4876620, MPFR_RNDN);
        mpfr_sqrt(r4876623, r4876622, MPFR_RNDN);
        mpfr_sqrt(r4876624, r4876621, MPFR_RNDN);
        mpfr_add(r4876625, r4876623, r4876624, MPFR_RNDN);
        mpfr_div(r4876626, r4876620, r4876625, MPFR_RNDN);
        mpfr_sqrt(r4876627, r4876626, MPFR_RNDN);
        mpfr_div(r4876628, r4876627, r4876624, MPFR_RNDN);
        mpfr_div(r4876629, r4876627, r4876623, MPFR_RNDN);
        mpfr_mul(r4876630, r4876628, r4876629, MPFR_RNDN);
        return mpfr_get_d(r4876630, MPFR_RNDN);
}

