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

char *name = "2cbrt (problem 3.3.4)";

double f_if(float x) {
        float r4940011 = x;
        float r4940012 = 1.0f;
        float r4940013 = r4940011 + r4940012;
        float r4940014 = 3.0f;
        float r4940015 = r4940012 / r4940014;
        float r4940016 = pow(r4940013, r4940015);
        float r4940017 = pow(r4940011, r4940015);
        float r4940018 = r4940016 - r4940017;
        return r4940018;
}

double f_id(double x) {
        double r4940019 = x;
        double r4940020 = 1.0;
        double r4940021 = r4940019 + r4940020;
        double r4940022 = 3.0;
        double r4940023 = r4940020 / r4940022;
        double r4940024 = pow(r4940021, r4940023);
        double r4940025 = pow(r4940019, r4940023);
        double r4940026 = r4940024 - r4940025;
        return r4940026;
}


double f_of(float x) {
        float r4940027 = x;
        float r4940028 = 1.0f;
        float r4940029 = r4940027 + r4940028;
        float r4940030 = 3.0f;
        float r4940031 = r4940028 / r4940030;
        float r4940032 = pow(r4940029, r4940031);
        float r4940033 = r4940032 * (r4940032 * r4940032);
        float r4940034 = pow(r4940027, r4940031);
        float r4940035 = r4940034 * (r4940034 * r4940034);
        float r4940036 = sqrt(r4940035);
        float r4940037 = r4940036 * r4940036;
        float r4940038 = r4940033 - r4940037;
        float r4940039 = r4940032 * r4940032;
        float r4940040 = log(r4940027);
        float r4940041 = r4940040 / r4940030;
        float r4940042 = exp(r4940041);
        float r4940043 = r4940042 * r4940042;
        float r4940044 = r4940032 * r4940034;
        float r4940045 = r4940043 + r4940044;
        float r4940046 = r4940039 + r4940045;
        float r4940047 = r4940038 / r4940046;
        return r4940047;
}

double f_od(double x) {
        double r4940048 = x;
        double r4940049 = 1.0;
        double r4940050 = r4940048 + r4940049;
        double r4940051 = 3.0;
        double r4940052 = r4940049 / r4940051;
        double r4940053 = pow(r4940050, r4940052);
        double r4940054 = r4940053 * (r4940053 * r4940053);
        double r4940055 = pow(r4940048, r4940052);
        double r4940056 = r4940055 * (r4940055 * r4940055);
        double r4940057 = sqrt(r4940056);
        double r4940058 = r4940057 * r4940057;
        double r4940059 = r4940054 - r4940058;
        double r4940060 = r4940053 * r4940053;
        double r4940061 = log(r4940048);
        double r4940062 = r4940061 / r4940051;
        double r4940063 = exp(r4940062);
        double r4940064 = r4940063 * r4940063;
        double r4940065 = r4940053 * r4940055;
        double r4940066 = r4940064 + r4940065;
        double r4940067 = r4940060 + r4940066;
        double r4940068 = r4940059 / r4940067;
        return r4940068;
}

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 r4940069, r4940070, r4940071, r4940072, r4940073, r4940074, r4940075, r4940076;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4940069);
        mpfr_init_set_str(r4940070, "1", 10, MPFR_RNDN);
        mpfr_init(r4940071);
        mpfr_init_set_str(r4940072, "3", 10, MPFR_RNDN);
        mpfr_init(r4940073);
        mpfr_init(r4940074);
        mpfr_init(r4940075);
        mpfr_init(r4940076);
}

double f_im(double x) {
        mpfr_set_d(r4940069, x, MPFR_RNDN);
        ;
        mpfr_add(r4940071, r4940069, r4940070, MPFR_RNDN);
        ;
        mpfr_div(r4940073, r4940070, r4940072, MPFR_RNDN);
        mpfr_pow(r4940074, r4940071, r4940073, MPFR_RNDN);
        mpfr_pow(r4940075, r4940069, r4940073, MPFR_RNDN);
        mpfr_sub(r4940076, r4940074, r4940075, MPFR_RNDN);
        return mpfr_get_d(r4940076, MPFR_RNDN);
}

static mpfr_t r4940077, r4940078, r4940079, r4940080, r4940081, r4940082, r4940083, r4940084, r4940085, r4940086, r4940087, r4940088, r4940089, r4940090, r4940091, r4940092, r4940093, r4940094, r4940095, r4940096, r4940097;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4940077);
        mpfr_init_set_str(r4940078, "1", 10, MPFR_RNDN);
        mpfr_init(r4940079);
        mpfr_init_set_str(r4940080, "3", 10, MPFR_RNDN);
        mpfr_init(r4940081);
        mpfr_init(r4940082);
        mpfr_init(r4940083);
        mpfr_init(r4940084);
        mpfr_init(r4940085);
        mpfr_init(r4940086);
        mpfr_init(r4940087);
        mpfr_init(r4940088);
        mpfr_init(r4940089);
        mpfr_init(r4940090);
        mpfr_init(r4940091);
        mpfr_init(r4940092);
        mpfr_init(r4940093);
        mpfr_init(r4940094);
        mpfr_init(r4940095);
        mpfr_init(r4940096);
        mpfr_init(r4940097);
}

double f_fm(double x) {
        mpfr_set_d(r4940077, x, MPFR_RNDN);
        ;
        mpfr_add(r4940079, r4940077, r4940078, MPFR_RNDN);
        ;
        mpfr_div(r4940081, r4940078, r4940080, MPFR_RNDN);
        mpfr_pow(r4940082, r4940079, r4940081, MPFR_RNDN);
        mpfr_mul(r4940083, r4940082, r4940082, MPFR_RNDN); mpfr_mul(r4940083, r4940083, r4940082, MPFR_RNDN);
        mpfr_pow(r4940084, r4940077, r4940081, MPFR_RNDN);
        mpfr_mul(r4940085, r4940084, r4940084, MPFR_RNDN); mpfr_mul(r4940085, r4940085, r4940084, MPFR_RNDN);
        mpfr_sqrt(r4940086, r4940085, MPFR_RNDN);
        mpfr_sqr(r4940087, r4940086, MPFR_RNDN);
        mpfr_sub(r4940088, r4940083, r4940087, MPFR_RNDN);
        mpfr_sqr(r4940089, r4940082, MPFR_RNDN);
        mpfr_log(r4940090, r4940077, MPFR_RNDN);
        mpfr_div(r4940091, r4940090, r4940080, MPFR_RNDN);
        mpfr_exp(r4940092, r4940091, MPFR_RNDN);
        mpfr_sqr(r4940093, r4940092, MPFR_RNDN);
        mpfr_mul(r4940094, r4940082, r4940084, MPFR_RNDN);
        mpfr_add(r4940095, r4940093, r4940094, MPFR_RNDN);
        mpfr_add(r4940096, r4940089, r4940095, MPFR_RNDN);
        mpfr_div(r4940097, r4940088, r4940096, MPFR_RNDN);
        return mpfr_get_d(r4940097, MPFR_RNDN);
}

static mpfr_t r4940098, r4940099, r4940100, r4940101, r4940102, r4940103, r4940104, r4940105, r4940106, r4940107, r4940108, r4940109, r4940110, r4940111, r4940112, r4940113, r4940114, r4940115, r4940116, r4940117, r4940118;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4940098);
        mpfr_init_set_str(r4940099, "1", 10, MPFR_RNDN);
        mpfr_init(r4940100);
        mpfr_init_set_str(r4940101, "3", 10, MPFR_RNDN);
        mpfr_init(r4940102);
        mpfr_init(r4940103);
        mpfr_init(r4940104);
        mpfr_init(r4940105);
        mpfr_init(r4940106);
        mpfr_init(r4940107);
        mpfr_init(r4940108);
        mpfr_init(r4940109);
        mpfr_init(r4940110);
        mpfr_init(r4940111);
        mpfr_init(r4940112);
        mpfr_init(r4940113);
        mpfr_init(r4940114);
        mpfr_init(r4940115);
        mpfr_init(r4940116);
        mpfr_init(r4940117);
        mpfr_init(r4940118);
}

double f_dm(double x) {
        mpfr_set_d(r4940098, x, MPFR_RNDN);
        ;
        mpfr_add(r4940100, r4940098, r4940099, MPFR_RNDN);
        ;
        mpfr_div(r4940102, r4940099, r4940101, MPFR_RNDN);
        mpfr_pow(r4940103, r4940100, r4940102, MPFR_RNDN);
        mpfr_mul(r4940104, r4940103, r4940103, MPFR_RNDN); mpfr_mul(r4940104, r4940104, r4940103, MPFR_RNDN);
        mpfr_pow(r4940105, r4940098, r4940102, MPFR_RNDN);
        mpfr_mul(r4940106, r4940105, r4940105, MPFR_RNDN); mpfr_mul(r4940106, r4940106, r4940105, MPFR_RNDN);
        mpfr_sqrt(r4940107, r4940106, MPFR_RNDN);
        mpfr_sqr(r4940108, r4940107, MPFR_RNDN);
        mpfr_sub(r4940109, r4940104, r4940108, MPFR_RNDN);
        mpfr_sqr(r4940110, r4940103, MPFR_RNDN);
        mpfr_log(r4940111, r4940098, MPFR_RNDN);
        mpfr_div(r4940112, r4940111, r4940101, MPFR_RNDN);
        mpfr_exp(r4940113, r4940112, MPFR_RNDN);
        mpfr_sqr(r4940114, r4940113, MPFR_RNDN);
        mpfr_mul(r4940115, r4940103, r4940105, MPFR_RNDN);
        mpfr_add(r4940116, r4940114, r4940115, MPFR_RNDN);
        mpfr_add(r4940117, r4940110, r4940116, MPFR_RNDN);
        mpfr_div(r4940118, r4940109, r4940117, MPFR_RNDN);
        return mpfr_get_d(r4940118, MPFR_RNDN);
}

