#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 r5179800 = 2.0f;
        float r5179801 = x;
        float r5179802 = r5179800 * r5179801;
        float r5179803 = exp(r5179802);
        float r5179804 = 1.0f;
        float r5179805 = r5179803 - r5179804;
        float r5179806 = exp(r5179801);
        float r5179807 = r5179806 - r5179804;
        float r5179808 = r5179805 / r5179807;
        float r5179809 = sqrt(r5179808);
        return r5179809;
}

double f_id(double x) {
        double r5179810 = 2.0;
        double r5179811 = x;
        double r5179812 = r5179810 * r5179811;
        double r5179813 = exp(r5179812);
        double r5179814 = 1.0;
        double r5179815 = r5179813 - r5179814;
        double r5179816 = exp(r5179811);
        double r5179817 = r5179816 - r5179814;
        double r5179818 = r5179815 / r5179817;
        double r5179819 = sqrt(r5179818);
        return r5179819;
}


double f_of(float x) {
        float r5179820 = x;
        float r5179821 = exp(r5179820);
        float r5179822 = 1.0f;
        float r5179823 = r5179821 + r5179822;
        float r5179824 = r5179823 / r5179822;
        float r5179825 = sqrt(r5179824);
        return r5179825;
}

double f_od(double x) {
        double r5179826 = x;
        double r5179827 = exp(r5179826);
        double r5179828 = 1.0;
        double r5179829 = r5179827 + r5179828;
        double r5179830 = r5179829 / r5179828;
        double r5179831 = sqrt(r5179830);
        return r5179831;
}

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 r5179832, r5179833, r5179834, r5179835, r5179836, r5179837, r5179838, r5179839, r5179840, r5179841;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r5179832, "2", 10, MPFR_RNDN);
        mpfr_init(r5179833);
        mpfr_init(r5179834);
        mpfr_init(r5179835);
        mpfr_init_set_str(r5179836, "1", 10, MPFR_RNDN);
        mpfr_init(r5179837);
        mpfr_init(r5179838);
        mpfr_init(r5179839);
        mpfr_init(r5179840);
        mpfr_init(r5179841);
}

double f_im(double x) {
        ;
        mpfr_set_d(r5179833, x, MPFR_RNDN);
        mpfr_mul(r5179834, r5179832, r5179833, MPFR_RNDN);
        mpfr_exp(r5179835, r5179834, MPFR_RNDN);
        ;
        mpfr_sub(r5179837, r5179835, r5179836, MPFR_RNDN);
        mpfr_exp(r5179838, r5179833, MPFR_RNDN);
        mpfr_sub(r5179839, r5179838, r5179836, MPFR_RNDN);
        mpfr_div(r5179840, r5179837, r5179839, MPFR_RNDN);
        mpfr_sqrt(r5179841, r5179840, MPFR_RNDN);
        return mpfr_get_d(r5179841, MPFR_RNDN);
}

static mpfr_t r5179842, r5179843, r5179844, r5179845, r5179846, r5179847;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r5179842);
        mpfr_init(r5179843);
        mpfr_init_set_str(r5179844, "1", 10, MPFR_RNDN);
        mpfr_init(r5179845);
        mpfr_init(r5179846);
        mpfr_init(r5179847);
}

double f_fm(double x) {
        mpfr_set_d(r5179842, x, MPFR_RNDN);
        mpfr_exp(r5179843, r5179842, MPFR_RNDN);
        ;
        mpfr_add(r5179845, r5179843, r5179844, MPFR_RNDN);
        mpfr_div(r5179846, r5179845, r5179844, MPFR_RNDN);
        mpfr_sqrt(r5179847, r5179846, MPFR_RNDN);
        return mpfr_get_d(r5179847, MPFR_RNDN);
}

static mpfr_t r5179848, r5179849, r5179850, r5179851, r5179852, r5179853;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r5179848);
        mpfr_init(r5179849);
        mpfr_init_set_str(r5179850, "1", 10, MPFR_RNDN);
        mpfr_init(r5179851);
        mpfr_init(r5179852);
        mpfr_init(r5179853);
}

double f_dm(double x) {
        mpfr_set_d(r5179848, x, MPFR_RNDN);
        mpfr_exp(r5179849, r5179848, MPFR_RNDN);
        ;
        mpfr_add(r5179851, r5179849, r5179850, MPFR_RNDN);
        mpfr_div(r5179852, r5179851, r5179850, MPFR_RNDN);
        mpfr_sqrt(r5179853, r5179852, MPFR_RNDN);
        return mpfr_get_d(r5179853, MPFR_RNDN);
}

