#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 r4941558 = 1.0f;
        float r4941559 = x;
        float r4941560 = sqrt(r4941559);
        float r4941561 = r4941558 / r4941560;
        float r4941562 = r4941559 + r4941558;
        float r4941563 = sqrt(r4941562);
        float r4941564 = r4941558 / r4941563;
        float r4941565 = r4941561 - r4941564;
        return r4941565;
}

double f_id(double x) {
        double r4941566 = 1.0;
        double r4941567 = x;
        double r4941568 = sqrt(r4941567);
        double r4941569 = r4941566 / r4941568;
        double r4941570 = r4941567 + r4941566;
        double r4941571 = sqrt(r4941570);
        double r4941572 = r4941566 / r4941571;
        double r4941573 = r4941569 - r4941572;
        return r4941573;
}


double f_of(float x) {
        float r4941574 = 1.0f;
        float r4941575 = x;
        float r4941576 = r4941574 + r4941575;
        float r4941577 = r4941574 / r4941576;
        float r4941578 = sqrt(r4941575);
        float r4941579 = r4941575 / r4941578;
        float r4941580 = sqrt(r4941576);
        float r4941581 = r4941575 / r4941580;
        float r4941582 = r4941579 + r4941581;
        float r4941583 = r4941577 / r4941582;
        return r4941583;
}

double f_od(double x) {
        double r4941584 = 1.0;
        double r4941585 = x;
        double r4941586 = r4941584 + r4941585;
        double r4941587 = r4941584 / r4941586;
        double r4941588 = sqrt(r4941585);
        double r4941589 = r4941585 / r4941588;
        double r4941590 = sqrt(r4941586);
        double r4941591 = r4941585 / r4941590;
        double r4941592 = r4941589 + r4941591;
        double r4941593 = r4941587 / r4941592;
        return r4941593;
}

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 r4941594, r4941595, r4941596, r4941597, r4941598, r4941599, r4941600, r4941601;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r4941594, "1", 10, MPFR_RNDN);
        mpfr_init(r4941595);
        mpfr_init(r4941596);
        mpfr_init(r4941597);
        mpfr_init(r4941598);
        mpfr_init(r4941599);
        mpfr_init(r4941600);
        mpfr_init(r4941601);
}

double f_im(double x) {
        ;
        mpfr_set_d(r4941595, x, MPFR_RNDN);
        mpfr_sqrt(r4941596, r4941595, MPFR_RNDN);
        mpfr_div(r4941597, r4941594, r4941596, MPFR_RNDN);
        mpfr_add(r4941598, r4941595, r4941594, MPFR_RNDN);
        mpfr_sqrt(r4941599, r4941598, MPFR_RNDN);
        mpfr_div(r4941600, r4941594, r4941599, MPFR_RNDN);
        mpfr_sub(r4941601, r4941597, r4941600, MPFR_RNDN);
        return mpfr_get_d(r4941601, MPFR_RNDN);
}

static mpfr_t r4941602, r4941603, r4941604, r4941605, r4941606, r4941607, r4941608, r4941609, r4941610, r4941611;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r4941602, "1", 10, MPFR_RNDN);
        mpfr_init(r4941603);
        mpfr_init(r4941604);
        mpfr_init(r4941605);
        mpfr_init(r4941606);
        mpfr_init(r4941607);
        mpfr_init(r4941608);
        mpfr_init(r4941609);
        mpfr_init(r4941610);
        mpfr_init(r4941611);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r4941603, x, MPFR_RNDN);
        mpfr_add(r4941604, r4941602, r4941603, MPFR_RNDN);
        mpfr_div(r4941605, r4941602, r4941604, MPFR_RNDN);
        mpfr_sqrt(r4941606, r4941603, MPFR_RNDN);
        mpfr_div(r4941607, r4941603, r4941606, MPFR_RNDN);
        mpfr_sqrt(r4941608, r4941604, MPFR_RNDN);
        mpfr_div(r4941609, r4941603, r4941608, MPFR_RNDN);
        mpfr_add(r4941610, r4941607, r4941609, MPFR_RNDN);
        mpfr_div(r4941611, r4941605, r4941610, MPFR_RNDN);
        return mpfr_get_d(r4941611, MPFR_RNDN);
}

static mpfr_t r4941612, r4941613, r4941614, r4941615, r4941616, r4941617, r4941618, r4941619, r4941620, r4941621;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r4941612, "1", 10, MPFR_RNDN);
        mpfr_init(r4941613);
        mpfr_init(r4941614);
        mpfr_init(r4941615);
        mpfr_init(r4941616);
        mpfr_init(r4941617);
        mpfr_init(r4941618);
        mpfr_init(r4941619);
        mpfr_init(r4941620);
        mpfr_init(r4941621);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r4941613, x, MPFR_RNDN);
        mpfr_add(r4941614, r4941612, r4941613, MPFR_RNDN);
        mpfr_div(r4941615, r4941612, r4941614, MPFR_RNDN);
        mpfr_sqrt(r4941616, r4941613, MPFR_RNDN);
        mpfr_div(r4941617, r4941613, r4941616, MPFR_RNDN);
        mpfr_sqrt(r4941618, r4941614, MPFR_RNDN);
        mpfr_div(r4941619, r4941613, r4941618, MPFR_RNDN);
        mpfr_add(r4941620, r4941617, r4941619, MPFR_RNDN);
        mpfr_div(r4941621, r4941615, r4941620, MPFR_RNDN);
        return mpfr_get_d(r4941621, MPFR_RNDN);
}

