#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 r11044 = 1.0f;
        float r11045 = x;
        float r11046 = sqrt(r11045);
        float r11047 = r11044 / r11046;
        float r11048 = r11045 + r11044;
        float r11049 = sqrt(r11048);
        float r11050 = r11044 / r11049;
        float r11051 = r11047 - r11050;
        return r11051;
}

double f_id(double x) {
        double r11052 = 1.0;
        double r11053 = x;
        double r11054 = sqrt(r11053);
        double r11055 = r11052 / r11054;
        double r11056 = r11053 + r11052;
        double r11057 = sqrt(r11056);
        double r11058 = r11052 / r11057;
        double r11059 = r11055 - r11058;
        return r11059;
}


double f_of(float x) {
        float r11060 = 1.0f;
        float r11061 = x;
        float r11062 = sqrt(r11061);
        float r11063 = r11060 / r11062;
        float r11064 = r11061 + r11060;
        float r11065 = sqrt(r11064);
        float r11066 = r11063 / r11065;
        float r11067 = r11065 + r11062;
        float r11068 = r11066 / r11067;
        return r11068;
}

double f_od(double x) {
        double r11069 = 1.0;
        double r11070 = x;
        double r11071 = sqrt(r11070);
        double r11072 = r11069 / r11071;
        double r11073 = r11070 + r11069;
        double r11074 = sqrt(r11073);
        double r11075 = r11072 / r11074;
        double r11076 = r11074 + r11071;
        double r11077 = r11075 / r11076;
        return r11077;
}

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 r11078, r11079, r11080, r11081, r11082, r11083, r11084, r11085;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r11078, "1", 10, MPFR_RNDN);
        mpfr_init(r11079);
        mpfr_init(r11080);
        mpfr_init(r11081);
        mpfr_init(r11082);
        mpfr_init(r11083);
        mpfr_init(r11084);
        mpfr_init(r11085);
}

double f_im(double x) {
        ;
        mpfr_set_d(r11079, x, MPFR_RNDN);
        mpfr_sqrt(r11080, r11079, MPFR_RNDN);
        mpfr_div(r11081, r11078, r11080, MPFR_RNDN);
        mpfr_add(r11082, r11079, r11078, MPFR_RNDN);
        mpfr_sqrt(r11083, r11082, MPFR_RNDN);
        mpfr_div(r11084, r11078, r11083, MPFR_RNDN);
        mpfr_sub(r11085, r11081, r11084, MPFR_RNDN);
        return mpfr_get_d(r11085, MPFR_RNDN);
}

static mpfr_t r11086, r11087, r11088, r11089, r11090, r11091, r11092, r11093, r11094;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r11086, "1", 10, MPFR_RNDN);
        mpfr_init(r11087);
        mpfr_init(r11088);
        mpfr_init(r11089);
        mpfr_init(r11090);
        mpfr_init(r11091);
        mpfr_init(r11092);
        mpfr_init(r11093);
        mpfr_init(r11094);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r11087, x, MPFR_RNDN);
        mpfr_sqrt(r11088, r11087, MPFR_RNDN);
        mpfr_div(r11089, r11086, r11088, MPFR_RNDN);
        mpfr_add(r11090, r11087, r11086, MPFR_RNDN);
        mpfr_sqrt(r11091, r11090, MPFR_RNDN);
        mpfr_div(r11092, r11089, r11091, MPFR_RNDN);
        mpfr_add(r11093, r11091, r11088, MPFR_RNDN);
        mpfr_div(r11094, r11092, r11093, MPFR_RNDN);
        return mpfr_get_d(r11094, MPFR_RNDN);
}

static mpfr_t r11095, r11096, r11097, r11098, r11099, r11100, r11101, r11102, r11103;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r11095, "1", 10, MPFR_RNDN);
        mpfr_init(r11096);
        mpfr_init(r11097);
        mpfr_init(r11098);
        mpfr_init(r11099);
        mpfr_init(r11100);
        mpfr_init(r11101);
        mpfr_init(r11102);
        mpfr_init(r11103);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r11096, x, MPFR_RNDN);
        mpfr_sqrt(r11097, r11096, MPFR_RNDN);
        mpfr_div(r11098, r11095, r11097, MPFR_RNDN);
        mpfr_add(r11099, r11096, r11095, MPFR_RNDN);
        mpfr_sqrt(r11100, r11099, MPFR_RNDN);
        mpfr_div(r11101, r11098, r11100, MPFR_RNDN);
        mpfr_add(r11102, r11100, r11097, MPFR_RNDN);
        mpfr_div(r11103, r11101, r11102, MPFR_RNDN);
        return mpfr_get_d(r11103, MPFR_RNDN);
}

