#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 r57754 = 1;
        float r57755 = x;
        float r57756 = sqrt(r57755);
        float r57757 = r57754 / r57756;
        float r57758 = r57755 + r57754;
        float r57759 = sqrt(r57758);
        float r57760 = r57754 / r57759;
        float r57761 = r57757 - r57760;
        return r57761;
}

double f_id(double x) {
        double r57762 = 1;
        double r57763 = x;
        double r57764 = sqrt(r57763);
        double r57765 = r57762 / r57764;
        double r57766 = r57763 + r57762;
        double r57767 = sqrt(r57766);
        double r57768 = r57762 / r57767;
        double r57769 = r57765 - r57768;
        return r57769;
}


double f_of(float x) {
        float r57770 = 1;
        float r57771 = x;
        float r57772 = r57771 + r57770;
        float r57773 = sqrt(r57772);
        float r57774 = sqrt(r57771);
        float r57775 = r57773 + r57774;
        float r57776 = r57770 / r57775;
        float r57777 = cbrt(r57772);
        float r57778 = fabs(r57777);
        float r57779 = r57778 * r57774;
        float r57780 = sqrt(r57777);
        float r57781 = r57779 * r57780;
        float r57782 = r57776 / r57781;
        return r57782;
}

double f_od(double x) {
        double r57783 = 1;
        double r57784 = x;
        double r57785 = r57784 + r57783;
        double r57786 = sqrt(r57785);
        double r57787 = sqrt(r57784);
        double r57788 = r57786 + r57787;
        double r57789 = r57783 / r57788;
        double r57790 = cbrt(r57785);
        double r57791 = fabs(r57790);
        double r57792 = r57791 * r57787;
        double r57793 = sqrt(r57790);
        double r57794 = r57792 * r57793;
        double r57795 = r57789 / r57794;
        return r57795;
}

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 r57796, r57797, r57798, r57799, r57800, r57801, r57802, r57803;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r57796, "1", 10, MPFR_RNDN);
        mpfr_init(r57797);
        mpfr_init(r57798);
        mpfr_init(r57799);
        mpfr_init(r57800);
        mpfr_init(r57801);
        mpfr_init(r57802);
        mpfr_init(r57803);
}

double f_im(double x) {
        ;
        mpfr_set_d(r57797, x, MPFR_RNDN);
        mpfr_sqrt(r57798, r57797, MPFR_RNDN);
        mpfr_div(r57799, r57796, r57798, MPFR_RNDN);
        mpfr_add(r57800, r57797, r57796, MPFR_RNDN);
        mpfr_sqrt(r57801, r57800, MPFR_RNDN);
        mpfr_div(r57802, r57796, r57801, MPFR_RNDN);
        mpfr_sub(r57803, r57799, r57802, MPFR_RNDN);
        return mpfr_get_d(r57803, MPFR_RNDN);
}

static mpfr_t r57804, r57805, r57806, r57807, r57808, r57809, r57810, r57811, r57812, r57813, r57814, r57815, r57816;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r57804, "1", 10, MPFR_RNDN);
        mpfr_init(r57805);
        mpfr_init(r57806);
        mpfr_init(r57807);
        mpfr_init(r57808);
        mpfr_init(r57809);
        mpfr_init(r57810);
        mpfr_init(r57811);
        mpfr_init(r57812);
        mpfr_init(r57813);
        mpfr_init(r57814);
        mpfr_init(r57815);
        mpfr_init(r57816);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r57805, x, MPFR_RNDN);
        mpfr_add(r57806, r57805, r57804, MPFR_RNDN);
        mpfr_sqrt(r57807, r57806, MPFR_RNDN);
        mpfr_sqrt(r57808, r57805, MPFR_RNDN);
        mpfr_add(r57809, r57807, r57808, MPFR_RNDN);
        mpfr_div(r57810, r57804, r57809, MPFR_RNDN);
        mpfr_cbrt(r57811, r57806, MPFR_RNDN);
        mpfr_abs(r57812, r57811, MPFR_RNDN);
        mpfr_mul(r57813, r57812, r57808, MPFR_RNDN);
        mpfr_sqrt(r57814, r57811, MPFR_RNDN);
        mpfr_mul(r57815, r57813, r57814, MPFR_RNDN);
        mpfr_div(r57816, r57810, r57815, MPFR_RNDN);
        return mpfr_get_d(r57816, MPFR_RNDN);
}

static mpfr_t r57817, r57818, r57819, r57820, r57821, r57822, r57823, r57824, r57825, r57826, r57827, r57828, r57829;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r57817, "1", 10, MPFR_RNDN);
        mpfr_init(r57818);
        mpfr_init(r57819);
        mpfr_init(r57820);
        mpfr_init(r57821);
        mpfr_init(r57822);
        mpfr_init(r57823);
        mpfr_init(r57824);
        mpfr_init(r57825);
        mpfr_init(r57826);
        mpfr_init(r57827);
        mpfr_init(r57828);
        mpfr_init(r57829);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r57818, x, MPFR_RNDN);
        mpfr_add(r57819, r57818, r57817, MPFR_RNDN);
        mpfr_sqrt(r57820, r57819, MPFR_RNDN);
        mpfr_sqrt(r57821, r57818, MPFR_RNDN);
        mpfr_add(r57822, r57820, r57821, MPFR_RNDN);
        mpfr_div(r57823, r57817, r57822, MPFR_RNDN);
        mpfr_cbrt(r57824, r57819, MPFR_RNDN);
        mpfr_abs(r57825, r57824, MPFR_RNDN);
        mpfr_mul(r57826, r57825, r57821, MPFR_RNDN);
        mpfr_sqrt(r57827, r57824, MPFR_RNDN);
        mpfr_mul(r57828, r57826, r57827, MPFR_RNDN);
        mpfr_div(r57829, r57823, r57828, MPFR_RNDN);
        return mpfr_get_d(r57829, MPFR_RNDN);
}

