#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "sqrtexp (problem 3.4.4)";

double f_if(float x) {
        float r4873938 = 2.0f;
        float r4873939 = x;
        float r4873940 = r4873938 * r4873939;
        float r4873941 = exp(r4873940);
        float r4873942 = 1.0f;
        float r4873943 = r4873941 - r4873942;
        float r4873944 = exp(r4873939);
        float r4873945 = r4873944 - r4873942;
        float r4873946 = r4873943 / r4873945;
        float r4873947 = sqrt(r4873946);
        return r4873947;
}

double f_id(double x) {
        double r4873948 = 2.0;
        double r4873949 = x;
        double r4873950 = r4873948 * r4873949;
        double r4873951 = exp(r4873950);
        double r4873952 = 1.0;
        double r4873953 = r4873951 - r4873952;
        double r4873954 = exp(r4873949);
        double r4873955 = r4873954 - r4873952;
        double r4873956 = r4873953 / r4873955;
        double r4873957 = sqrt(r4873956);
        return r4873957;
}


double f_of(float x) {
        float r4873958 = 1.0f;
        float r4873959 = x;
        float r4873960 = exp(r4873959);
        float r4873961 = r4873958 + r4873960;
        float r4873962 = r4873961 / r4873958;
        float r4873963 = sqrt(r4873962);
        return r4873963;
}

double f_od(double x) {
        double r4873964 = 1.0;
        double r4873965 = x;
        double r4873966 = exp(r4873965);
        double r4873967 = r4873964 + r4873966;
        double r4873968 = r4873967 / r4873964;
        double r4873969 = sqrt(r4873968);
        return r4873969;
}

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 r4873970, r4873971, r4873972, r4873973, r4873974, r4873975, r4873976, r4873977, r4873978, r4873979;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r4873970, "2", 10, MPFR_RNDN);
        mpfr_init(r4873971);
        mpfr_init(r4873972);
        mpfr_init(r4873973);
        mpfr_init_set_str(r4873974, "1", 10, MPFR_RNDN);
        mpfr_init(r4873975);
        mpfr_init(r4873976);
        mpfr_init(r4873977);
        mpfr_init(r4873978);
        mpfr_init(r4873979);
}

double f_im(double x) {
        ;
        mpfr_set_d(r4873971, x, MPFR_RNDN);
        mpfr_mul(r4873972, r4873970, r4873971, MPFR_RNDN);
        mpfr_exp(r4873973, r4873972, MPFR_RNDN);
        ;
        mpfr_sub(r4873975, r4873973, r4873974, MPFR_RNDN);
        mpfr_exp(r4873976, r4873971, MPFR_RNDN);
        mpfr_sub(r4873977, r4873976, r4873974, MPFR_RNDN);
        mpfr_div(r4873978, r4873975, r4873977, MPFR_RNDN);
        mpfr_sqrt(r4873979, r4873978, MPFR_RNDN);
        return mpfr_get_d(r4873979, MPFR_RNDN);
}

static mpfr_t r4873980, r4873981, r4873982, r4873983, r4873984, r4873985;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r4873980, "1", 10, MPFR_RNDN);
        mpfr_init(r4873981);
        mpfr_init(r4873982);
        mpfr_init(r4873983);
        mpfr_init(r4873984);
        mpfr_init(r4873985);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r4873981, x, MPFR_RNDN);
        mpfr_exp(r4873982, r4873981, MPFR_RNDN);
        mpfr_add(r4873983, r4873980, r4873982, MPFR_RNDN);
        mpfr_div(r4873984, r4873983, r4873980, MPFR_RNDN);
        mpfr_sqrt(r4873985, r4873984, MPFR_RNDN);
        return mpfr_get_d(r4873985, MPFR_RNDN);
}

static mpfr_t r4873986, r4873987, r4873988, r4873989, r4873990, r4873991;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r4873986, "1", 10, MPFR_RNDN);
        mpfr_init(r4873987);
        mpfr_init(r4873988);
        mpfr_init(r4873989);
        mpfr_init(r4873990);
        mpfr_init(r4873991);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r4873987, x, MPFR_RNDN);
        mpfr_exp(r4873988, r4873987, MPFR_RNDN);
        mpfr_add(r4873989, r4873986, r4873988, MPFR_RNDN);
        mpfr_div(r4873990, r4873989, r4873986, MPFR_RNDN);
        mpfr_sqrt(r4873991, r4873990, MPFR_RNDN);
        return mpfr_get_d(r4873991, MPFR_RNDN);
}

