#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 r4939039 = 2.0f;
        float r4939040 = x;
        float r4939041 = r4939039 * r4939040;
        float r4939042 = exp(r4939041);
        float r4939043 = 1.0f;
        float r4939044 = r4939042 - r4939043;
        float r4939045 = exp(r4939040);
        float r4939046 = r4939045 - r4939043;
        float r4939047 = r4939044 / r4939046;
        float r4939048 = sqrt(r4939047);
        return r4939048;
}

double f_id(double x) {
        double r4939049 = 2.0;
        double r4939050 = x;
        double r4939051 = r4939049 * r4939050;
        double r4939052 = exp(r4939051);
        double r4939053 = 1.0;
        double r4939054 = r4939052 - r4939053;
        double r4939055 = exp(r4939050);
        double r4939056 = r4939055 - r4939053;
        double r4939057 = r4939054 / r4939056;
        double r4939058 = sqrt(r4939057);
        return r4939058;
}


double f_of(float x) {
        float r4939059 = x;
        float r4939060 = exp(r4939059);
        float r4939061 = 1.0f;
        float r4939062 = r4939060 + r4939061;
        float r4939063 = r4939062 / r4939061;
        float r4939064 = sqrt(r4939063);
        return r4939064;
}

double f_od(double x) {
        double r4939065 = x;
        double r4939066 = exp(r4939065);
        double r4939067 = 1.0;
        double r4939068 = r4939066 + r4939067;
        double r4939069 = r4939068 / r4939067;
        double r4939070 = sqrt(r4939069);
        return r4939070;
}

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 r4939071, r4939072, r4939073, r4939074, r4939075, r4939076, r4939077, r4939078, r4939079, r4939080;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r4939071, "2", 10, MPFR_RNDN);
        mpfr_init(r4939072);
        mpfr_init(r4939073);
        mpfr_init(r4939074);
        mpfr_init_set_str(r4939075, "1", 10, MPFR_RNDN);
        mpfr_init(r4939076);
        mpfr_init(r4939077);
        mpfr_init(r4939078);
        mpfr_init(r4939079);
        mpfr_init(r4939080);
}

double f_im(double x) {
        ;
        mpfr_set_d(r4939072, x, MPFR_RNDN);
        mpfr_mul(r4939073, r4939071, r4939072, MPFR_RNDN);
        mpfr_exp(r4939074, r4939073, MPFR_RNDN);
        ;
        mpfr_sub(r4939076, r4939074, r4939075, MPFR_RNDN);
        mpfr_exp(r4939077, r4939072, MPFR_RNDN);
        mpfr_sub(r4939078, r4939077, r4939075, MPFR_RNDN);
        mpfr_div(r4939079, r4939076, r4939078, MPFR_RNDN);
        mpfr_sqrt(r4939080, r4939079, MPFR_RNDN);
        return mpfr_get_d(r4939080, MPFR_RNDN);
}

static mpfr_t r4939081, r4939082, r4939083, r4939084, r4939085, r4939086;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4939081);
        mpfr_init(r4939082);
        mpfr_init_set_str(r4939083, "1", 10, MPFR_RNDN);
        mpfr_init(r4939084);
        mpfr_init(r4939085);
        mpfr_init(r4939086);
}

double f_fm(double x) {
        mpfr_set_d(r4939081, x, MPFR_RNDN);
        mpfr_exp(r4939082, r4939081, MPFR_RNDN);
        ;
        mpfr_add(r4939084, r4939082, r4939083, MPFR_RNDN);
        mpfr_div(r4939085, r4939084, r4939083, MPFR_RNDN);
        mpfr_sqrt(r4939086, r4939085, MPFR_RNDN);
        return mpfr_get_d(r4939086, MPFR_RNDN);
}

static mpfr_t r4939087, r4939088, r4939089, r4939090, r4939091, r4939092;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4939087);
        mpfr_init(r4939088);
        mpfr_init_set_str(r4939089, "1", 10, MPFR_RNDN);
        mpfr_init(r4939090);
        mpfr_init(r4939091);
        mpfr_init(r4939092);
}

double f_dm(double x) {
        mpfr_set_d(r4939087, x, MPFR_RNDN);
        mpfr_exp(r4939088, r4939087, MPFR_RNDN);
        ;
        mpfr_add(r4939090, r4939088, r4939089, MPFR_RNDN);
        mpfr_div(r4939091, r4939090, r4939089, MPFR_RNDN);
        mpfr_sqrt(r4939092, r4939091, MPFR_RNDN);
        return mpfr_get_d(r4939092, MPFR_RNDN);
}

