#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 r27535 = 1;
        float r27536 = x;
        float r27537 = sqrt(r27536);
        float r27538 = r27535 / r27537;
        float r27539 = r27536 + r27535;
        float r27540 = sqrt(r27539);
        float r27541 = r27535 / r27540;
        float r27542 = r27538 - r27541;
        return r27542;
}

double f_id(double x) {
        double r27543 = 1;
        double r27544 = x;
        double r27545 = sqrt(r27544);
        double r27546 = r27543 / r27545;
        double r27547 = r27544 + r27543;
        double r27548 = sqrt(r27547);
        double r27549 = r27543 / r27548;
        double r27550 = r27546 - r27549;
        return r27550;
}


double f_of(float x) {
        float r27551 = 1;
        float r27552 = x;
        float r27553 = r27552 + r27551;
        float r27554 = sqrt(r27553);
        float r27555 = sqrt(r27552);
        float r27556 = r27554 + r27555;
        float r27557 = r27551 / r27556;
        float r27558 = r27557 / r27555;
        float r27559 = r27558 / r27554;
        return r27559;
}

double f_od(double x) {
        double r27560 = 1;
        double r27561 = x;
        double r27562 = r27561 + r27560;
        double r27563 = sqrt(r27562);
        double r27564 = sqrt(r27561);
        double r27565 = r27563 + r27564;
        double r27566 = r27560 / r27565;
        double r27567 = r27566 / r27564;
        double r27568 = r27567 / r27563;
        return r27568;
}

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 r27569, r27570, r27571, r27572, r27573, r27574, r27575, r27576;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27569, "1", 10, MPFR_RNDN);
        mpfr_init(r27570);
        mpfr_init(r27571);
        mpfr_init(r27572);
        mpfr_init(r27573);
        mpfr_init(r27574);
        mpfr_init(r27575);
        mpfr_init(r27576);
}

double f_im(double x) {
        ;
        mpfr_set_d(r27570, x, MPFR_RNDN);
        mpfr_sqrt(r27571, r27570, MPFR_RNDN);
        mpfr_div(r27572, r27569, r27571, MPFR_RNDN);
        mpfr_add(r27573, r27570, r27569, MPFR_RNDN);
        mpfr_sqrt(r27574, r27573, MPFR_RNDN);
        mpfr_div(r27575, r27569, r27574, MPFR_RNDN);
        mpfr_sub(r27576, r27572, r27575, MPFR_RNDN);
        return mpfr_get_d(r27576, MPFR_RNDN);
}

static mpfr_t r27577, r27578, r27579, r27580, r27581, r27582, r27583, r27584, r27585;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27577, "1", 10, MPFR_RNDN);
        mpfr_init(r27578);
        mpfr_init(r27579);
        mpfr_init(r27580);
        mpfr_init(r27581);
        mpfr_init(r27582);
        mpfr_init(r27583);
        mpfr_init(r27584);
        mpfr_init(r27585);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r27578, x, MPFR_RNDN);
        mpfr_add(r27579, r27578, r27577, MPFR_RNDN);
        mpfr_sqrt(r27580, r27579, MPFR_RNDN);
        mpfr_sqrt(r27581, r27578, MPFR_RNDN);
        mpfr_add(r27582, r27580, r27581, MPFR_RNDN);
        mpfr_div(r27583, r27577, r27582, MPFR_RNDN);
        mpfr_div(r27584, r27583, r27581, MPFR_RNDN);
        mpfr_div(r27585, r27584, r27580, MPFR_RNDN);
        return mpfr_get_d(r27585, MPFR_RNDN);
}

static mpfr_t r27586, r27587, r27588, r27589, r27590, r27591, r27592, r27593, r27594;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27586, "1", 10, MPFR_RNDN);
        mpfr_init(r27587);
        mpfr_init(r27588);
        mpfr_init(r27589);
        mpfr_init(r27590);
        mpfr_init(r27591);
        mpfr_init(r27592);
        mpfr_init(r27593);
        mpfr_init(r27594);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r27587, x, MPFR_RNDN);
        mpfr_add(r27588, r27587, r27586, MPFR_RNDN);
        mpfr_sqrt(r27589, r27588, MPFR_RNDN);
        mpfr_sqrt(r27590, r27587, MPFR_RNDN);
        mpfr_add(r27591, r27589, r27590, MPFR_RNDN);
        mpfr_div(r27592, r27586, r27591, MPFR_RNDN);
        mpfr_div(r27593, r27592, r27590, MPFR_RNDN);
        mpfr_div(r27594, r27593, r27589, MPFR_RNDN);
        return mpfr_get_d(r27594, MPFR_RNDN);
}

