#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 r59037 = 1;
        float r59038 = x;
        float r59039 = sqrt(r59038);
        float r59040 = r59037 / r59039;
        float r59041 = r59038 + r59037;
        float r59042 = sqrt(r59041);
        float r59043 = r59037 / r59042;
        float r59044 = r59040 - r59043;
        return r59044;
}

double f_id(double x) {
        double r59045 = 1;
        double r59046 = x;
        double r59047 = sqrt(r59046);
        double r59048 = r59045 / r59047;
        double r59049 = r59046 + r59045;
        double r59050 = sqrt(r59049);
        double r59051 = r59045 / r59050;
        double r59052 = r59048 - r59051;
        return r59052;
}


double f_of(float x) {
        float r59053 = 1;
        float r59054 = x;
        float r59055 = r59054 + r59053;
        float r59056 = sqrt(r59055);
        float r59057 = sqrt(r59054);
        float r59058 = r59056 + r59057;
        float r59059 = r59053 / r59058;
        float r59060 = cbrt(r59055);
        float r59061 = fabs(r59060);
        float r59062 = r59061 * r59057;
        float r59063 = sqrt(r59060);
        float r59064 = r59062 * r59063;
        float r59065 = r59059 / r59064;
        return r59065;
}

double f_od(double x) {
        double r59066 = 1;
        double r59067 = x;
        double r59068 = r59067 + r59066;
        double r59069 = sqrt(r59068);
        double r59070 = sqrt(r59067);
        double r59071 = r59069 + r59070;
        double r59072 = r59066 / r59071;
        double r59073 = cbrt(r59068);
        double r59074 = fabs(r59073);
        double r59075 = r59074 * r59070;
        double r59076 = sqrt(r59073);
        double r59077 = r59075 * r59076;
        double r59078 = r59072 / r59077;
        return r59078;
}

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 r59079, r59080, r59081, r59082, r59083, r59084, r59085, r59086;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r59079, "1", 10, MPFR_RNDN);
        mpfr_init(r59080);
        mpfr_init(r59081);
        mpfr_init(r59082);
        mpfr_init(r59083);
        mpfr_init(r59084);
        mpfr_init(r59085);
        mpfr_init(r59086);
}

double f_im(double x) {
        ;
        mpfr_set_d(r59080, x, MPFR_RNDN);
        mpfr_sqrt(r59081, r59080, MPFR_RNDN);
        mpfr_div(r59082, r59079, r59081, MPFR_RNDN);
        mpfr_add(r59083, r59080, r59079, MPFR_RNDN);
        mpfr_sqrt(r59084, r59083, MPFR_RNDN);
        mpfr_div(r59085, r59079, r59084, MPFR_RNDN);
        mpfr_sub(r59086, r59082, r59085, MPFR_RNDN);
        return mpfr_get_d(r59086, MPFR_RNDN);
}

static mpfr_t r59087, r59088, r59089, r59090, r59091, r59092, r59093, r59094, r59095, r59096, r59097, r59098, r59099;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r59087, "1", 10, MPFR_RNDN);
        mpfr_init(r59088);
        mpfr_init(r59089);
        mpfr_init(r59090);
        mpfr_init(r59091);
        mpfr_init(r59092);
        mpfr_init(r59093);
        mpfr_init(r59094);
        mpfr_init(r59095);
        mpfr_init(r59096);
        mpfr_init(r59097);
        mpfr_init(r59098);
        mpfr_init(r59099);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r59088, x, MPFR_RNDN);
        mpfr_add(r59089, r59088, r59087, MPFR_RNDN);
        mpfr_sqrt(r59090, r59089, MPFR_RNDN);
        mpfr_sqrt(r59091, r59088, MPFR_RNDN);
        mpfr_add(r59092, r59090, r59091, MPFR_RNDN);
        mpfr_div(r59093, r59087, r59092, MPFR_RNDN);
        mpfr_cbrt(r59094, r59089, MPFR_RNDN);
        mpfr_abs(r59095, r59094, MPFR_RNDN);
        mpfr_mul(r59096, r59095, r59091, MPFR_RNDN);
        mpfr_sqrt(r59097, r59094, MPFR_RNDN);
        mpfr_mul(r59098, r59096, r59097, MPFR_RNDN);
        mpfr_div(r59099, r59093, r59098, MPFR_RNDN);
        return mpfr_get_d(r59099, MPFR_RNDN);
}

static mpfr_t r59100, r59101, r59102, r59103, r59104, r59105, r59106, r59107, r59108, r59109, r59110, r59111, r59112;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r59100, "1", 10, MPFR_RNDN);
        mpfr_init(r59101);
        mpfr_init(r59102);
        mpfr_init(r59103);
        mpfr_init(r59104);
        mpfr_init(r59105);
        mpfr_init(r59106);
        mpfr_init(r59107);
        mpfr_init(r59108);
        mpfr_init(r59109);
        mpfr_init(r59110);
        mpfr_init(r59111);
        mpfr_init(r59112);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r59101, x, MPFR_RNDN);
        mpfr_add(r59102, r59101, r59100, MPFR_RNDN);
        mpfr_sqrt(r59103, r59102, MPFR_RNDN);
        mpfr_sqrt(r59104, r59101, MPFR_RNDN);
        mpfr_add(r59105, r59103, r59104, MPFR_RNDN);
        mpfr_div(r59106, r59100, r59105, MPFR_RNDN);
        mpfr_cbrt(r59107, r59102, MPFR_RNDN);
        mpfr_abs(r59108, r59107, MPFR_RNDN);
        mpfr_mul(r59109, r59108, r59104, MPFR_RNDN);
        mpfr_sqrt(r59110, r59107, MPFR_RNDN);
        mpfr_mul(r59111, r59109, r59110, MPFR_RNDN);
        mpfr_div(r59112, r59106, r59111, MPFR_RNDN);
        return mpfr_get_d(r59112, MPFR_RNDN);
}

