#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 r18034 = 2.0f;
        float r18035 = x;
        float r18036 = r18034 * r18035;
        float r18037 = exp(r18036);
        float r18038 = 1.0f;
        float r18039 = r18037 - r18038;
        float r18040 = exp(r18035);
        float r18041 = r18040 - r18038;
        float r18042 = r18039 / r18041;
        float r18043 = sqrt(r18042);
        return r18043;
}

double f_id(double x) {
        double r18044 = 2.0;
        double r18045 = x;
        double r18046 = r18044 * r18045;
        double r18047 = exp(r18046);
        double r18048 = 1.0;
        double r18049 = r18047 - r18048;
        double r18050 = exp(r18045);
        double r18051 = r18050 - r18048;
        double r18052 = r18049 / r18051;
        double r18053 = sqrt(r18052);
        return r18053;
}


double f_of(float x) {
        float r18054 = 1.0f;
        float r18055 = x;
        float r18056 = exp(r18055);
        float r18057 = r18054 + r18056;
        float r18058 = r18057 / r18054;
        float r18059 = sqrt(r18058);
        float r18060 = log(r18059);
        float r18061 = exp(r18060);
        return r18061;
}

double f_od(double x) {
        double r18062 = 1.0;
        double r18063 = x;
        double r18064 = exp(r18063);
        double r18065 = r18062 + r18064;
        double r18066 = r18065 / r18062;
        double r18067 = sqrt(r18066);
        double r18068 = log(r18067);
        double r18069 = exp(r18068);
        return r18069;
}

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 r18070, r18071, r18072, r18073, r18074, r18075, r18076, r18077, r18078, r18079;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r18070, "2", 10, MPFR_RNDN);
        mpfr_init(r18071);
        mpfr_init(r18072);
        mpfr_init(r18073);
        mpfr_init_set_str(r18074, "1", 10, MPFR_RNDN);
        mpfr_init(r18075);
        mpfr_init(r18076);
        mpfr_init(r18077);
        mpfr_init(r18078);
        mpfr_init(r18079);
}

double f_im(double x) {
        ;
        mpfr_set_d(r18071, x, MPFR_RNDN);
        mpfr_mul(r18072, r18070, r18071, MPFR_RNDN);
        mpfr_exp(r18073, r18072, MPFR_RNDN);
        ;
        mpfr_sub(r18075, r18073, r18074, MPFR_RNDN);
        mpfr_exp(r18076, r18071, MPFR_RNDN);
        mpfr_sub(r18077, r18076, r18074, MPFR_RNDN);
        mpfr_div(r18078, r18075, r18077, MPFR_RNDN);
        mpfr_sqrt(r18079, r18078, MPFR_RNDN);
        return mpfr_get_d(r18079, MPFR_RNDN);
}

static mpfr_t r18080, r18081, r18082, r18083, r18084, r18085, r18086, r18087;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r18080, "1", 10, MPFR_RNDN);
        mpfr_init(r18081);
        mpfr_init(r18082);
        mpfr_init(r18083);
        mpfr_init(r18084);
        mpfr_init(r18085);
        mpfr_init(r18086);
        mpfr_init(r18087);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r18081, x, MPFR_RNDN);
        mpfr_exp(r18082, r18081, MPFR_RNDN);
        mpfr_add(r18083, r18080, r18082, MPFR_RNDN);
        mpfr_div(r18084, r18083, r18080, MPFR_RNDN);
        mpfr_sqrt(r18085, r18084, MPFR_RNDN);
        mpfr_log(r18086, r18085, MPFR_RNDN);
        mpfr_exp(r18087, r18086, MPFR_RNDN);
        return mpfr_get_d(r18087, MPFR_RNDN);
}

static mpfr_t r18088, r18089, r18090, r18091, r18092, r18093, r18094, r18095;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r18088, "1", 10, MPFR_RNDN);
        mpfr_init(r18089);
        mpfr_init(r18090);
        mpfr_init(r18091);
        mpfr_init(r18092);
        mpfr_init(r18093);
        mpfr_init(r18094);
        mpfr_init(r18095);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r18089, x, MPFR_RNDN);
        mpfr_exp(r18090, r18089, MPFR_RNDN);
        mpfr_add(r18091, r18088, r18090, MPFR_RNDN);
        mpfr_div(r18092, r18091, r18088, MPFR_RNDN);
        mpfr_sqrt(r18093, r18092, MPFR_RNDN);
        mpfr_log(r18094, r18093, MPFR_RNDN);
        mpfr_exp(r18095, r18094, MPFR_RNDN);
        return mpfr_get_d(r18095, MPFR_RNDN);
}

