#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 r18454 = 2.0f;
        float r18455 = x;
        float r18456 = r18454 * r18455;
        float r18457 = exp(r18456);
        float r18458 = 1.0f;
        float r18459 = r18457 - r18458;
        float r18460 = exp(r18455);
        float r18461 = r18460 - r18458;
        float r18462 = r18459 / r18461;
        float r18463 = sqrt(r18462);
        return r18463;
}

double f_id(double x) {
        double r18464 = 2.0;
        double r18465 = x;
        double r18466 = r18464 * r18465;
        double r18467 = exp(r18466);
        double r18468 = 1.0;
        double r18469 = r18467 - r18468;
        double r18470 = exp(r18465);
        double r18471 = r18470 - r18468;
        double r18472 = r18469 / r18471;
        double r18473 = sqrt(r18472);
        return r18473;
}


double f_of(float x) {
        float r18474 = 1.0f;
        float r18475 = x;
        float r18476 = exp(r18475);
        float r18477 = r18474 + r18476;
        float r18478 = r18477 / r18474;
        float r18479 = sqrt(r18478);
        return r18479;
}

double f_od(double x) {
        double r18480 = 1.0;
        double r18481 = x;
        double r18482 = exp(r18481);
        double r18483 = r18480 + r18482;
        double r18484 = r18483 / r18480;
        double r18485 = sqrt(r18484);
        return r18485;
}

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 r18486, r18487, r18488, r18489, r18490, r18491, r18492, r18493, r18494, r18495;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r18486, "2", 10, MPFR_RNDN);
        mpfr_init(r18487);
        mpfr_init(r18488);
        mpfr_init(r18489);
        mpfr_init_set_str(r18490, "1", 10, MPFR_RNDN);
        mpfr_init(r18491);
        mpfr_init(r18492);
        mpfr_init(r18493);
        mpfr_init(r18494);
        mpfr_init(r18495);
}

double f_im(double x) {
        ;
        mpfr_set_d(r18487, x, MPFR_RNDN);
        mpfr_mul(r18488, r18486, r18487, MPFR_RNDN);
        mpfr_exp(r18489, r18488, MPFR_RNDN);
        ;
        mpfr_sub(r18491, r18489, r18490, MPFR_RNDN);
        mpfr_exp(r18492, r18487, MPFR_RNDN);
        mpfr_sub(r18493, r18492, r18490, MPFR_RNDN);
        mpfr_div(r18494, r18491, r18493, MPFR_RNDN);
        mpfr_sqrt(r18495, r18494, MPFR_RNDN);
        return mpfr_get_d(r18495, MPFR_RNDN);
}

static mpfr_t r18496, r18497, r18498, r18499, r18500, r18501;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r18496, "1", 10, MPFR_RNDN);
        mpfr_init(r18497);
        mpfr_init(r18498);
        mpfr_init(r18499);
        mpfr_init(r18500);
        mpfr_init(r18501);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r18497, x, MPFR_RNDN);
        mpfr_exp(r18498, r18497, MPFR_RNDN);
        mpfr_add(r18499, r18496, r18498, MPFR_RNDN);
        mpfr_div(r18500, r18499, r18496, MPFR_RNDN);
        mpfr_sqrt(r18501, r18500, MPFR_RNDN);
        return mpfr_get_d(r18501, MPFR_RNDN);
}

static mpfr_t r18502, r18503, r18504, r18505, r18506, r18507;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r18502, "1", 10, MPFR_RNDN);
        mpfr_init(r18503);
        mpfr_init(r18504);
        mpfr_init(r18505);
        mpfr_init(r18506);
        mpfr_init(r18507);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r18503, x, MPFR_RNDN);
        mpfr_exp(r18504, r18503, MPFR_RNDN);
        mpfr_add(r18505, r18502, r18504, MPFR_RNDN);
        mpfr_div(r18506, r18505, r18502, MPFR_RNDN);
        mpfr_sqrt(r18507, r18506, MPFR_RNDN);
        return mpfr_get_d(r18507, MPFR_RNDN);
}

