#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 r27932 = 1;
        float r27933 = x;
        float r27934 = sqrt(r27933);
        float r27935 = r27932 / r27934;
        float r27936 = r27933 + r27932;
        float r27937 = sqrt(r27936);
        float r27938 = r27932 / r27937;
        float r27939 = r27935 - r27938;
        return r27939;
}

double f_id(double x) {
        double r27940 = 1;
        double r27941 = x;
        double r27942 = sqrt(r27941);
        double r27943 = r27940 / r27942;
        double r27944 = r27941 + r27940;
        double r27945 = sqrt(r27944);
        double r27946 = r27940 / r27945;
        double r27947 = r27943 - r27946;
        return r27947;
}


double f_of(float x) {
        float r27948 = 1;
        float r27949 = x;
        float r27950 = r27949 + r27948;
        float r27951 = sqrt(r27950);
        float r27952 = sqrt(r27949);
        float r27953 = r27951 + r27952;
        float r27954 = r27948 / r27953;
        float r27955 = r27952 * r27951;
        float r27956 = r27954 / r27955;
        return r27956;
}

double f_od(double x) {
        double r27957 = 1;
        double r27958 = x;
        double r27959 = r27958 + r27957;
        double r27960 = sqrt(r27959);
        double r27961 = sqrt(r27958);
        double r27962 = r27960 + r27961;
        double r27963 = r27957 / r27962;
        double r27964 = r27961 * r27960;
        double r27965 = r27963 / r27964;
        return r27965;
}

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 r27966, r27967, r27968, r27969, r27970, r27971, r27972, r27973;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27966, "1", 10, MPFR_RNDN);
        mpfr_init(r27967);
        mpfr_init(r27968);
        mpfr_init(r27969);
        mpfr_init(r27970);
        mpfr_init(r27971);
        mpfr_init(r27972);
        mpfr_init(r27973);
}

double f_im(double x) {
        ;
        mpfr_set_d(r27967, x, MPFR_RNDN);
        mpfr_sqrt(r27968, r27967, MPFR_RNDN);
        mpfr_div(r27969, r27966, r27968, MPFR_RNDN);
        mpfr_add(r27970, r27967, r27966, MPFR_RNDN);
        mpfr_sqrt(r27971, r27970, MPFR_RNDN);
        mpfr_div(r27972, r27966, r27971, MPFR_RNDN);
        mpfr_sub(r27973, r27969, r27972, MPFR_RNDN);
        return mpfr_get_d(r27973, MPFR_RNDN);
}

static mpfr_t r27974, r27975, r27976, r27977, r27978, r27979, r27980, r27981, r27982;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27974, "1", 10, MPFR_RNDN);
        mpfr_init(r27975);
        mpfr_init(r27976);
        mpfr_init(r27977);
        mpfr_init(r27978);
        mpfr_init(r27979);
        mpfr_init(r27980);
        mpfr_init(r27981);
        mpfr_init(r27982);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r27975, x, MPFR_RNDN);
        mpfr_add(r27976, r27975, r27974, MPFR_RNDN);
        mpfr_sqrt(r27977, r27976, MPFR_RNDN);
        mpfr_sqrt(r27978, r27975, MPFR_RNDN);
        mpfr_add(r27979, r27977, r27978, MPFR_RNDN);
        mpfr_div(r27980, r27974, r27979, MPFR_RNDN);
        mpfr_mul(r27981, r27978, r27977, MPFR_RNDN);
        mpfr_div(r27982, r27980, r27981, MPFR_RNDN);
        return mpfr_get_d(r27982, MPFR_RNDN);
}

static mpfr_t r27983, r27984, r27985, r27986, r27987, r27988, r27989, r27990, r27991;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27983, "1", 10, MPFR_RNDN);
        mpfr_init(r27984);
        mpfr_init(r27985);
        mpfr_init(r27986);
        mpfr_init(r27987);
        mpfr_init(r27988);
        mpfr_init(r27989);
        mpfr_init(r27990);
        mpfr_init(r27991);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r27984, x, MPFR_RNDN);
        mpfr_add(r27985, r27984, r27983, MPFR_RNDN);
        mpfr_sqrt(r27986, r27985, MPFR_RNDN);
        mpfr_sqrt(r27987, r27984, MPFR_RNDN);
        mpfr_add(r27988, r27986, r27987, MPFR_RNDN);
        mpfr_div(r27989, r27983, r27988, MPFR_RNDN);
        mpfr_mul(r27990, r27987, r27986, MPFR_RNDN);
        mpfr_div(r27991, r27989, r27990, MPFR_RNDN);
        return mpfr_get_d(r27991, MPFR_RNDN);
}

