#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 r11231 = 1;
        float r11232 = x;
        float r11233 = sqrt(r11232);
        float r11234 = r11231 / r11233;
        float r11235 = r11232 + r11231;
        float r11236 = sqrt(r11235);
        float r11237 = r11231 / r11236;
        float r11238 = r11234 - r11237;
        return r11238;
}

double f_id(double x) {
        double r11239 = 1;
        double r11240 = x;
        double r11241 = sqrt(r11240);
        double r11242 = r11239 / r11241;
        double r11243 = r11240 + r11239;
        double r11244 = sqrt(r11243);
        double r11245 = r11239 / r11244;
        double r11246 = r11242 - r11245;
        return r11246;
}


double f_of(float x) {
        float r11247 = 1;
        float r11248 = x;
        float r11249 = sqrt(r11248);
        float r11250 = r11247 / r11249;
        float r11251 = r11248 + r11247;
        float r11252 = sqrt(r11251);
        float r11253 = r11252 + r11249;
        float r11254 = r11247 / r11253;
        float r11255 = r11254 / r11252;
        float r11256 = r11250 * r11255;
        return r11256;
}

double f_od(double x) {
        double r11257 = 1;
        double r11258 = x;
        double r11259 = sqrt(r11258);
        double r11260 = r11257 / r11259;
        double r11261 = r11258 + r11257;
        double r11262 = sqrt(r11261);
        double r11263 = r11262 + r11259;
        double r11264 = r11257 / r11263;
        double r11265 = r11264 / r11262;
        double r11266 = r11260 * r11265;
        return r11266;
}

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 r11267, r11268, r11269, r11270, r11271, r11272, r11273, r11274;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r11267, "1", 10, MPFR_RNDN);
        mpfr_init(r11268);
        mpfr_init(r11269);
        mpfr_init(r11270);
        mpfr_init(r11271);
        mpfr_init(r11272);
        mpfr_init(r11273);
        mpfr_init(r11274);
}

double f_im(double x) {
        ;
        mpfr_set_d(r11268, x, MPFR_RNDN);
        mpfr_sqrt(r11269, r11268, MPFR_RNDN);
        mpfr_div(r11270, r11267, r11269, MPFR_RNDN);
        mpfr_add(r11271, r11268, r11267, MPFR_RNDN);
        mpfr_sqrt(r11272, r11271, MPFR_RNDN);
        mpfr_div(r11273, r11267, r11272, MPFR_RNDN);
        mpfr_sub(r11274, r11270, r11273, MPFR_RNDN);
        return mpfr_get_d(r11274, MPFR_RNDN);
}

static mpfr_t r11275, r11276, r11277, r11278, r11279, r11280, r11281, r11282, r11283, r11284;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r11275, "1", 10, MPFR_RNDN);
        mpfr_init(r11276);
        mpfr_init(r11277);
        mpfr_init(r11278);
        mpfr_init(r11279);
        mpfr_init(r11280);
        mpfr_init(r11281);
        mpfr_init(r11282);
        mpfr_init(r11283);
        mpfr_init(r11284);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r11276, x, MPFR_RNDN);
        mpfr_sqrt(r11277, r11276, MPFR_RNDN);
        mpfr_div(r11278, r11275, r11277, MPFR_RNDN);
        mpfr_add(r11279, r11276, r11275, MPFR_RNDN);
        mpfr_sqrt(r11280, r11279, MPFR_RNDN);
        mpfr_add(r11281, r11280, r11277, MPFR_RNDN);
        mpfr_div(r11282, r11275, r11281, MPFR_RNDN);
        mpfr_div(r11283, r11282, r11280, MPFR_RNDN);
        mpfr_mul(r11284, r11278, r11283, MPFR_RNDN);
        return mpfr_get_d(r11284, MPFR_RNDN);
}

static mpfr_t r11285, r11286, r11287, r11288, r11289, r11290, r11291, r11292, r11293, r11294;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r11285, "1", 10, MPFR_RNDN);
        mpfr_init(r11286);
        mpfr_init(r11287);
        mpfr_init(r11288);
        mpfr_init(r11289);
        mpfr_init(r11290);
        mpfr_init(r11291);
        mpfr_init(r11292);
        mpfr_init(r11293);
        mpfr_init(r11294);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r11286, x, MPFR_RNDN);
        mpfr_sqrt(r11287, r11286, MPFR_RNDN);
        mpfr_div(r11288, r11285, r11287, MPFR_RNDN);
        mpfr_add(r11289, r11286, r11285, MPFR_RNDN);
        mpfr_sqrt(r11290, r11289, MPFR_RNDN);
        mpfr_add(r11291, r11290, r11287, MPFR_RNDN);
        mpfr_div(r11292, r11285, r11291, MPFR_RNDN);
        mpfr_div(r11293, r11292, r11290, MPFR_RNDN);
        mpfr_mul(r11294, r11288, r11293, MPFR_RNDN);
        return mpfr_get_d(r11294, MPFR_RNDN);
}

