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

double f_id(double x) {
        double r27546 = 1;
        double r27547 = x;
        double r27548 = sqrt(r27547);
        double r27549 = r27546 / r27548;
        double r27550 = r27547 + r27546;
        double r27551 = sqrt(r27550);
        double r27552 = r27546 / r27551;
        double r27553 = r27549 - r27552;
        return r27553;
}


double f_of(float x) {
        float r27554 = 1;
        float r27555 = x;
        float r27556 = r27555 + r27554;
        float r27557 = sqrt(r27556);
        float r27558 = sqrt(r27555);
        float r27559 = r27557 + r27558;
        float r27560 = r27554 / r27559;
        float r27561 = r27558 * r27557;
        float r27562 = r27560 / r27561;
        return r27562;
}

double f_od(double x) {
        double r27563 = 1;
        double r27564 = x;
        double r27565 = r27564 + r27563;
        double r27566 = sqrt(r27565);
        double r27567 = sqrt(r27564);
        double r27568 = r27566 + r27567;
        double r27569 = r27563 / r27568;
        double r27570 = r27567 * r27566;
        double r27571 = r27569 / r27570;
        return r27571;
}

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 r27572, r27573, r27574, r27575, r27576, r27577, r27578, r27579;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27572, "1", 10, MPFR_RNDN);
        mpfr_init(r27573);
        mpfr_init(r27574);
        mpfr_init(r27575);
        mpfr_init(r27576);
        mpfr_init(r27577);
        mpfr_init(r27578);
        mpfr_init(r27579);
}

double f_im(double x) {
        ;
        mpfr_set_d(r27573, x, MPFR_RNDN);
        mpfr_sqrt(r27574, r27573, MPFR_RNDN);
        mpfr_div(r27575, r27572, r27574, MPFR_RNDN);
        mpfr_add(r27576, r27573, r27572, MPFR_RNDN);
        mpfr_sqrt(r27577, r27576, MPFR_RNDN);
        mpfr_div(r27578, r27572, r27577, MPFR_RNDN);
        mpfr_sub(r27579, r27575, r27578, MPFR_RNDN);
        return mpfr_get_d(r27579, MPFR_RNDN);
}

static mpfr_t r27580, r27581, r27582, r27583, r27584, r27585, r27586, r27587, r27588;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27580, "1", 10, MPFR_RNDN);
        mpfr_init(r27581);
        mpfr_init(r27582);
        mpfr_init(r27583);
        mpfr_init(r27584);
        mpfr_init(r27585);
        mpfr_init(r27586);
        mpfr_init(r27587);
        mpfr_init(r27588);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r27581, x, MPFR_RNDN);
        mpfr_add(r27582, r27581, r27580, MPFR_RNDN);
        mpfr_sqrt(r27583, r27582, MPFR_RNDN);
        mpfr_sqrt(r27584, r27581, MPFR_RNDN);
        mpfr_add(r27585, r27583, r27584, MPFR_RNDN);
        mpfr_div(r27586, r27580, r27585, MPFR_RNDN);
        mpfr_mul(r27587, r27584, r27583, MPFR_RNDN);
        mpfr_div(r27588, r27586, r27587, MPFR_RNDN);
        return mpfr_get_d(r27588, MPFR_RNDN);
}

static mpfr_t r27589, r27590, r27591, r27592, r27593, r27594, r27595, r27596, r27597;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27589, "1", 10, MPFR_RNDN);
        mpfr_init(r27590);
        mpfr_init(r27591);
        mpfr_init(r27592);
        mpfr_init(r27593);
        mpfr_init(r27594);
        mpfr_init(r27595);
        mpfr_init(r27596);
        mpfr_init(r27597);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r27590, x, MPFR_RNDN);
        mpfr_add(r27591, r27590, r27589, MPFR_RNDN);
        mpfr_sqrt(r27592, r27591, MPFR_RNDN);
        mpfr_sqrt(r27593, r27590, MPFR_RNDN);
        mpfr_add(r27594, r27592, r27593, MPFR_RNDN);
        mpfr_div(r27595, r27589, r27594, MPFR_RNDN);
        mpfr_mul(r27596, r27593, r27592, MPFR_RNDN);
        mpfr_div(r27597, r27595, r27596, MPFR_RNDN);
        return mpfr_get_d(r27597, MPFR_RNDN);
}

