#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 r10999 = 1;
        float r11000 = x;
        float r11001 = sqrt(r11000);
        float r11002 = r10999 / r11001;
        float r11003 = r11000 + r10999;
        float r11004 = sqrt(r11003);
        float r11005 = r10999 / r11004;
        float r11006 = r11002 - r11005;
        return r11006;
}

double f_id(double x) {
        double r11007 = 1;
        double r11008 = x;
        double r11009 = sqrt(r11008);
        double r11010 = r11007 / r11009;
        double r11011 = r11008 + r11007;
        double r11012 = sqrt(r11011);
        double r11013 = r11007 / r11012;
        double r11014 = r11010 - r11013;
        return r11014;
}


double f_of(float x) {
        float r11015 = 1;
        float r11016 = x;
        float r11017 = sqrt(r11016);
        float r11018 = r11015 / r11017;
        float r11019 = r11016 + r11015;
        float r11020 = sqrt(r11019);
        float r11021 = fma(r11020, r11017, r11019);
        float r11022 = r11015 / r11021;
        float r11023 = r11018 * r11022;
        return r11023;
}

double f_od(double x) {
        double r11024 = 1;
        double r11025 = x;
        double r11026 = sqrt(r11025);
        double r11027 = r11024 / r11026;
        double r11028 = r11025 + r11024;
        double r11029 = sqrt(r11028);
        double r11030 = fma(r11029, r11026, r11028);
        double r11031 = r11024 / r11030;
        double r11032 = r11027 * r11031;
        return r11032;
}

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 r11033, r11034, r11035, r11036, r11037, r11038, r11039, r11040;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r11033, "1", 10, MPFR_RNDN);
        mpfr_init(r11034);
        mpfr_init(r11035);
        mpfr_init(r11036);
        mpfr_init(r11037);
        mpfr_init(r11038);
        mpfr_init(r11039);
        mpfr_init(r11040);
}

double f_im(double x) {
        ;
        mpfr_set_d(r11034, x, MPFR_RNDN);
        mpfr_sqrt(r11035, r11034, MPFR_RNDN);
        mpfr_div(r11036, r11033, r11035, MPFR_RNDN);
        mpfr_add(r11037, r11034, r11033, MPFR_RNDN);
        mpfr_sqrt(r11038, r11037, MPFR_RNDN);
        mpfr_div(r11039, r11033, r11038, MPFR_RNDN);
        mpfr_sub(r11040, r11036, r11039, MPFR_RNDN);
        return mpfr_get_d(r11040, MPFR_RNDN);
}

static mpfr_t r11041, r11042, r11043, r11044, r11045, r11046, r11047, r11048, r11049;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r11041, "1", 10, MPFR_RNDN);
        mpfr_init(r11042);
        mpfr_init(r11043);
        mpfr_init(r11044);
        mpfr_init(r11045);
        mpfr_init(r11046);
        mpfr_init(r11047);
        mpfr_init(r11048);
        mpfr_init(r11049);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r11042, x, MPFR_RNDN);
        mpfr_sqrt(r11043, r11042, MPFR_RNDN);
        mpfr_div(r11044, r11041, r11043, MPFR_RNDN);
        mpfr_add(r11045, r11042, r11041, MPFR_RNDN);
        mpfr_sqrt(r11046, r11045, MPFR_RNDN);
        mpfr_fma(r11047, r11046, r11043, r11045, MPFR_RNDN);
        mpfr_div(r11048, r11041, r11047, MPFR_RNDN);
        mpfr_mul(r11049, r11044, r11048, MPFR_RNDN);
        return mpfr_get_d(r11049, MPFR_RNDN);
}

static mpfr_t r11050, r11051, r11052, r11053, r11054, r11055, r11056, r11057, r11058;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r11050, "1", 10, MPFR_RNDN);
        mpfr_init(r11051);
        mpfr_init(r11052);
        mpfr_init(r11053);
        mpfr_init(r11054);
        mpfr_init(r11055);
        mpfr_init(r11056);
        mpfr_init(r11057);
        mpfr_init(r11058);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r11051, x, MPFR_RNDN);
        mpfr_sqrt(r11052, r11051, MPFR_RNDN);
        mpfr_div(r11053, r11050, r11052, MPFR_RNDN);
        mpfr_add(r11054, r11051, r11050, MPFR_RNDN);
        mpfr_sqrt(r11055, r11054, MPFR_RNDN);
        mpfr_fma(r11056, r11055, r11052, r11054, MPFR_RNDN);
        mpfr_div(r11057, r11050, r11056, MPFR_RNDN);
        mpfr_mul(r11058, r11053, r11057, MPFR_RNDN);
        return mpfr_get_d(r11058, MPFR_RNDN);
}

