#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 r33255 = x;
        float r33256 = 1.0f;
        float r33257 = r33255 + r33256;
        float r33258 = 3.0f;
        float r33259 = r33256 / r33258;
        float r33260 = pow(r33257, r33259);
        float r33261 = pow(r33255, r33259);
        float r33262 = r33260 - r33261;
        return r33262;
}

double f_id(double x) {
        double r33263 = x;
        double r33264 = 1.0;
        double r33265 = r33263 + r33264;
        double r33266 = 3.0;
        double r33267 = r33264 / r33266;
        double r33268 = pow(r33265, r33267);
        double r33269 = pow(r33263, r33267);
        double r33270 = r33268 - r33269;
        return r33270;
}


double f_of(float x) {
        float r33271 = 1.0f;
        float r33272 = x;
        float r33273 = r33272 + r33271;
        float r33274 = 3.0f;
        float r33275 = r33271 / r33274;
        float r33276 = pow(r33273, r33275);
        float r33277 = r33276 * r33276;
        float r33278 = log(r33272);
        float r33279 = r33278 / r33274;
        float r33280 = exp(r33279);
        float r33281 = pow(r33272, r33275);
        float r33282 = r33276 + r33281;
        float r33283 = r33280 * r33282;
        float r33284 = r33277 + r33283;
        float r33285 = r33271 / r33284;
        return r33285;
}

double f_od(double x) {
        double r33286 = 1.0;
        double r33287 = x;
        double r33288 = r33287 + r33286;
        double r33289 = 3.0;
        double r33290 = r33286 / r33289;
        double r33291 = pow(r33288, r33290);
        double r33292 = r33291 * r33291;
        double r33293 = log(r33287);
        double r33294 = r33293 / r33289;
        double r33295 = exp(r33294);
        double r33296 = pow(r33287, r33290);
        double r33297 = r33291 + r33296;
        double r33298 = r33295 * r33297;
        double r33299 = r33292 + r33298;
        double r33300 = r33286 / r33299;
        return r33300;
}

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 r33301, r33302, r33303, r33304, r33305, r33306, r33307, r33308;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r33301);
        mpfr_init_set_str(r33302, "1", 10, MPFR_RNDN);
        mpfr_init(r33303);
        mpfr_init_set_str(r33304, "3", 10, MPFR_RNDN);
        mpfr_init(r33305);
        mpfr_init(r33306);
        mpfr_init(r33307);
        mpfr_init(r33308);
}

double f_im(double x) {
        mpfr_set_d(r33301, x, MPFR_RNDN);
        ;
        mpfr_add(r33303, r33301, r33302, MPFR_RNDN);
        ;
        mpfr_div(r33305, r33302, r33304, MPFR_RNDN);
        mpfr_pow(r33306, r33303, r33305, MPFR_RNDN);
        mpfr_pow(r33307, r33301, r33305, MPFR_RNDN);
        mpfr_sub(r33308, r33306, r33307, MPFR_RNDN);
        return mpfr_get_d(r33308, MPFR_RNDN);
}

static mpfr_t r33309, r33310, r33311, r33312, r33313, r33314, r33315, r33316, r33317, r33318, r33319, r33320, r33321, r33322, r33323;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r33309, "1", 10, MPFR_RNDN);
        mpfr_init(r33310);
        mpfr_init(r33311);
        mpfr_init_set_str(r33312, "3", 10, MPFR_RNDN);
        mpfr_init(r33313);
        mpfr_init(r33314);
        mpfr_init(r33315);
        mpfr_init(r33316);
        mpfr_init(r33317);
        mpfr_init(r33318);
        mpfr_init(r33319);
        mpfr_init(r33320);
        mpfr_init(r33321);
        mpfr_init(r33322);
        mpfr_init(r33323);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r33310, x, MPFR_RNDN);
        mpfr_add(r33311, r33310, r33309, MPFR_RNDN);
        ;
        mpfr_div(r33313, r33309, r33312, MPFR_RNDN);
        mpfr_pow(r33314, r33311, r33313, MPFR_RNDN);
        mpfr_sqr(r33315, r33314, MPFR_RNDN);
        mpfr_log(r33316, r33310, MPFR_RNDN);
        mpfr_div(r33317, r33316, r33312, MPFR_RNDN);
        mpfr_exp(r33318, r33317, MPFR_RNDN);
        mpfr_pow(r33319, r33310, r33313, MPFR_RNDN);
        mpfr_add(r33320, r33314, r33319, MPFR_RNDN);
        mpfr_mul(r33321, r33318, r33320, MPFR_RNDN);
        mpfr_add(r33322, r33315, r33321, MPFR_RNDN);
        mpfr_div(r33323, r33309, r33322, MPFR_RNDN);
        return mpfr_get_d(r33323, MPFR_RNDN);
}

static mpfr_t r33324, r33325, r33326, r33327, r33328, r33329, r33330, r33331, r33332, r33333, r33334, r33335, r33336, r33337, r33338;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r33324, "1", 10, MPFR_RNDN);
        mpfr_init(r33325);
        mpfr_init(r33326);
        mpfr_init_set_str(r33327, "3", 10, MPFR_RNDN);
        mpfr_init(r33328);
        mpfr_init(r33329);
        mpfr_init(r33330);
        mpfr_init(r33331);
        mpfr_init(r33332);
        mpfr_init(r33333);
        mpfr_init(r33334);
        mpfr_init(r33335);
        mpfr_init(r33336);
        mpfr_init(r33337);
        mpfr_init(r33338);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r33325, x, MPFR_RNDN);
        mpfr_add(r33326, r33325, r33324, MPFR_RNDN);
        ;
        mpfr_div(r33328, r33324, r33327, MPFR_RNDN);
        mpfr_pow(r33329, r33326, r33328, MPFR_RNDN);
        mpfr_sqr(r33330, r33329, MPFR_RNDN);
        mpfr_log(r33331, r33325, MPFR_RNDN);
        mpfr_div(r33332, r33331, r33327, MPFR_RNDN);
        mpfr_exp(r33333, r33332, MPFR_RNDN);
        mpfr_pow(r33334, r33325, r33328, MPFR_RNDN);
        mpfr_add(r33335, r33329, r33334, MPFR_RNDN);
        mpfr_mul(r33336, r33333, r33335, MPFR_RNDN);
        mpfr_add(r33337, r33330, r33336, MPFR_RNDN);
        mpfr_div(r33338, r33324, r33337, MPFR_RNDN);
        return mpfr_get_d(r33338, MPFR_RNDN);
}

