#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 r5182539 = 1.0f;
        float r5182540 = x;
        float r5182541 = sqrt(r5182540);
        float r5182542 = r5182539 / r5182541;
        float r5182543 = r5182540 + r5182539;
        float r5182544 = sqrt(r5182543);
        float r5182545 = r5182539 / r5182544;
        float r5182546 = r5182542 - r5182545;
        return r5182546;
}

double f_id(double x) {
        double r5182547 = 1.0;
        double r5182548 = x;
        double r5182549 = sqrt(r5182548);
        double r5182550 = r5182547 / r5182549;
        double r5182551 = r5182548 + r5182547;
        double r5182552 = sqrt(r5182551);
        double r5182553 = r5182547 / r5182552;
        double r5182554 = r5182550 - r5182553;
        return r5182554;
}


double f_of(float x) {
        float r5182555 = 1.0f;
        float r5182556 = x;
        float r5182557 = r5182555 + r5182556;
        float r5182558 = sqrt(r5182557);
        float r5182559 = sqrt(r5182556);
        float r5182560 = r5182558 + r5182559;
        float r5182561 = r5182555 / r5182560;
        float r5182562 = r5182556 + r5182555;
        float r5182563 = sqrt(r5182562);
        float r5182564 = r5182559 * r5182563;
        float r5182565 = r5182555 / r5182564;
        float r5182566 = r5182561 * r5182565;
        return r5182566;
}

double f_od(double x) {
        double r5182567 = 1.0;
        double r5182568 = x;
        double r5182569 = r5182567 + r5182568;
        double r5182570 = sqrt(r5182569);
        double r5182571 = sqrt(r5182568);
        double r5182572 = r5182570 + r5182571;
        double r5182573 = r5182567 / r5182572;
        double r5182574 = r5182568 + r5182567;
        double r5182575 = sqrt(r5182574);
        double r5182576 = r5182571 * r5182575;
        double r5182577 = r5182567 / r5182576;
        double r5182578 = r5182573 * r5182577;
        return r5182578;
}

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 r5182579, r5182580, r5182581, r5182582, r5182583, r5182584, r5182585, r5182586;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r5182579, "1", 10, MPFR_RNDN);
        mpfr_init(r5182580);
        mpfr_init(r5182581);
        mpfr_init(r5182582);
        mpfr_init(r5182583);
        mpfr_init(r5182584);
        mpfr_init(r5182585);
        mpfr_init(r5182586);
}

double f_im(double x) {
        ;
        mpfr_set_d(r5182580, x, MPFR_RNDN);
        mpfr_sqrt(r5182581, r5182580, MPFR_RNDN);
        mpfr_div(r5182582, r5182579, r5182581, MPFR_RNDN);
        mpfr_add(r5182583, r5182580, r5182579, MPFR_RNDN);
        mpfr_sqrt(r5182584, r5182583, MPFR_RNDN);
        mpfr_div(r5182585, r5182579, r5182584, MPFR_RNDN);
        mpfr_sub(r5182586, r5182582, r5182585, MPFR_RNDN);
        return mpfr_get_d(r5182586, MPFR_RNDN);
}

static mpfr_t r5182587, r5182588, r5182589, r5182590, r5182591, r5182592, r5182593, r5182594, r5182595, r5182596, r5182597, r5182598;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r5182587, "1", 10, MPFR_RNDN);
        mpfr_init(r5182588);
        mpfr_init(r5182589);
        mpfr_init(r5182590);
        mpfr_init(r5182591);
        mpfr_init(r5182592);
        mpfr_init(r5182593);
        mpfr_init(r5182594);
        mpfr_init(r5182595);
        mpfr_init(r5182596);
        mpfr_init(r5182597);
        mpfr_init(r5182598);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r5182588, x, MPFR_RNDN);
        mpfr_add(r5182589, r5182587, r5182588, MPFR_RNDN);
        mpfr_sqrt(r5182590, r5182589, MPFR_RNDN);
        mpfr_sqrt(r5182591, r5182588, MPFR_RNDN);
        mpfr_add(r5182592, r5182590, r5182591, MPFR_RNDN);
        mpfr_div(r5182593, r5182587, r5182592, MPFR_RNDN);
        mpfr_add(r5182594, r5182588, r5182587, MPFR_RNDN);
        mpfr_sqrt(r5182595, r5182594, MPFR_RNDN);
        mpfr_mul(r5182596, r5182591, r5182595, MPFR_RNDN);
        mpfr_div(r5182597, r5182587, r5182596, MPFR_RNDN);
        mpfr_mul(r5182598, r5182593, r5182597, MPFR_RNDN);
        return mpfr_get_d(r5182598, MPFR_RNDN);
}

static mpfr_t r5182599, r5182600, r5182601, r5182602, r5182603, r5182604, r5182605, r5182606, r5182607, r5182608, r5182609, r5182610;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r5182599, "1", 10, MPFR_RNDN);
        mpfr_init(r5182600);
        mpfr_init(r5182601);
        mpfr_init(r5182602);
        mpfr_init(r5182603);
        mpfr_init(r5182604);
        mpfr_init(r5182605);
        mpfr_init(r5182606);
        mpfr_init(r5182607);
        mpfr_init(r5182608);
        mpfr_init(r5182609);
        mpfr_init(r5182610);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r5182600, x, MPFR_RNDN);
        mpfr_add(r5182601, r5182599, r5182600, MPFR_RNDN);
        mpfr_sqrt(r5182602, r5182601, MPFR_RNDN);
        mpfr_sqrt(r5182603, r5182600, MPFR_RNDN);
        mpfr_add(r5182604, r5182602, r5182603, MPFR_RNDN);
        mpfr_div(r5182605, r5182599, r5182604, MPFR_RNDN);
        mpfr_add(r5182606, r5182600, r5182599, MPFR_RNDN);
        mpfr_sqrt(r5182607, r5182606, MPFR_RNDN);
        mpfr_mul(r5182608, r5182603, r5182607, MPFR_RNDN);
        mpfr_div(r5182609, r5182599, r5182608, MPFR_RNDN);
        mpfr_mul(r5182610, r5182605, r5182609, MPFR_RNDN);
        return mpfr_get_d(r5182610, MPFR_RNDN);
}

