#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 r58891 = 1;
        float r58892 = x;
        float r58893 = sqrt(r58892);
        float r58894 = r58891 / r58893;
        float r58895 = r58892 + r58891;
        float r58896 = sqrt(r58895);
        float r58897 = r58891 / r58896;
        float r58898 = r58894 - r58897;
        return r58898;
}

double f_id(double x) {
        double r58899 = 1;
        double r58900 = x;
        double r58901 = sqrt(r58900);
        double r58902 = r58899 / r58901;
        double r58903 = r58900 + r58899;
        double r58904 = sqrt(r58903);
        double r58905 = r58899 / r58904;
        double r58906 = r58902 - r58905;
        return r58906;
}


double f_of(float x) {
        float r58907 = 1;
        float r58908 = x;
        float r58909 = r58908 + r58907;
        float r58910 = sqrt(r58909);
        float r58911 = sqrt(r58908);
        float r58912 = r58910 + r58911;
        float r58913 = r58907 / r58912;
        float r58914 = cbrt(r58909);
        float r58915 = fabs(r58914);
        float r58916 = r58915 * r58911;
        float r58917 = sqrt(r58914);
        float r58918 = r58916 * r58917;
        float r58919 = r58913 / r58918;
        return r58919;
}

double f_od(double x) {
        double r58920 = 1;
        double r58921 = x;
        double r58922 = r58921 + r58920;
        double r58923 = sqrt(r58922);
        double r58924 = sqrt(r58921);
        double r58925 = r58923 + r58924;
        double r58926 = r58920 / r58925;
        double r58927 = cbrt(r58922);
        double r58928 = fabs(r58927);
        double r58929 = r58928 * r58924;
        double r58930 = sqrt(r58927);
        double r58931 = r58929 * r58930;
        double r58932 = r58926 / r58931;
        return r58932;
}

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 r58933, r58934, r58935, r58936, r58937, r58938, r58939, r58940;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r58933, "1", 10, MPFR_RNDN);
        mpfr_init(r58934);
        mpfr_init(r58935);
        mpfr_init(r58936);
        mpfr_init(r58937);
        mpfr_init(r58938);
        mpfr_init(r58939);
        mpfr_init(r58940);
}

double f_im(double x) {
        ;
        mpfr_set_d(r58934, x, MPFR_RNDN);
        mpfr_sqrt(r58935, r58934, MPFR_RNDN);
        mpfr_div(r58936, r58933, r58935, MPFR_RNDN);
        mpfr_add(r58937, r58934, r58933, MPFR_RNDN);
        mpfr_sqrt(r58938, r58937, MPFR_RNDN);
        mpfr_div(r58939, r58933, r58938, MPFR_RNDN);
        mpfr_sub(r58940, r58936, r58939, MPFR_RNDN);
        return mpfr_get_d(r58940, MPFR_RNDN);
}

static mpfr_t r58941, r58942, r58943, r58944, r58945, r58946, r58947, r58948, r58949, r58950, r58951, r58952, r58953;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r58941, "1", 10, MPFR_RNDN);
        mpfr_init(r58942);
        mpfr_init(r58943);
        mpfr_init(r58944);
        mpfr_init(r58945);
        mpfr_init(r58946);
        mpfr_init(r58947);
        mpfr_init(r58948);
        mpfr_init(r58949);
        mpfr_init(r58950);
        mpfr_init(r58951);
        mpfr_init(r58952);
        mpfr_init(r58953);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r58942, x, MPFR_RNDN);
        mpfr_add(r58943, r58942, r58941, MPFR_RNDN);
        mpfr_sqrt(r58944, r58943, MPFR_RNDN);
        mpfr_sqrt(r58945, r58942, MPFR_RNDN);
        mpfr_add(r58946, r58944, r58945, MPFR_RNDN);
        mpfr_div(r58947, r58941, r58946, MPFR_RNDN);
        mpfr_cbrt(r58948, r58943, MPFR_RNDN);
        mpfr_abs(r58949, r58948, MPFR_RNDN);
        mpfr_mul(r58950, r58949, r58945, MPFR_RNDN);
        mpfr_sqrt(r58951, r58948, MPFR_RNDN);
        mpfr_mul(r58952, r58950, r58951, MPFR_RNDN);
        mpfr_div(r58953, r58947, r58952, MPFR_RNDN);
        return mpfr_get_d(r58953, MPFR_RNDN);
}

static mpfr_t r58954, r58955, r58956, r58957, r58958, r58959, r58960, r58961, r58962, r58963, r58964, r58965, r58966;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r58954, "1", 10, MPFR_RNDN);
        mpfr_init(r58955);
        mpfr_init(r58956);
        mpfr_init(r58957);
        mpfr_init(r58958);
        mpfr_init(r58959);
        mpfr_init(r58960);
        mpfr_init(r58961);
        mpfr_init(r58962);
        mpfr_init(r58963);
        mpfr_init(r58964);
        mpfr_init(r58965);
        mpfr_init(r58966);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r58955, x, MPFR_RNDN);
        mpfr_add(r58956, r58955, r58954, MPFR_RNDN);
        mpfr_sqrt(r58957, r58956, MPFR_RNDN);
        mpfr_sqrt(r58958, r58955, MPFR_RNDN);
        mpfr_add(r58959, r58957, r58958, MPFR_RNDN);
        mpfr_div(r58960, r58954, r58959, MPFR_RNDN);
        mpfr_cbrt(r58961, r58956, MPFR_RNDN);
        mpfr_abs(r58962, r58961, MPFR_RNDN);
        mpfr_mul(r58963, r58962, r58958, MPFR_RNDN);
        mpfr_sqrt(r58964, r58961, MPFR_RNDN);
        mpfr_mul(r58965, r58963, r58964, MPFR_RNDN);
        mpfr_div(r58966, r58960, r58965, MPFR_RNDN);
        return mpfr_get_d(r58966, MPFR_RNDN);
}

