#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 r9642 = x;
        float r9643 = 1;
        float r9644 = r9642 + r9643;
        float r9645 = cbrt(r9644);
        float r9646 = cbrt(r9642);
        float r9647 = r9645 - r9646;
        return r9647;
}

double f_id(double x) {
        double r9648 = x;
        double r9649 = 1;
        double r9650 = r9648 + r9649;
        double r9651 = cbrt(r9650);
        double r9652 = cbrt(r9648);
        double r9653 = r9651 - r9652;
        return r9653;
}


double f_of(float x) {
        float r9654 = 1;
        float r9655 = x;
        float r9656 = r9654 + r9655;
        float r9657 = cbrt(r9656);
        float r9658 = cbrt(r9655);
        float r9659 = r9657 + r9658;
        float r9660 = r9657 * r9657;
        float r9661 = fma(r9659, r9658, r9660);
        float r9662 = r9654 / r9661;
        return r9662;
}

double f_od(double x) {
        double r9663 = 1;
        double r9664 = x;
        double r9665 = r9663 + r9664;
        double r9666 = cbrt(r9665);
        double r9667 = cbrt(r9664);
        double r9668 = r9666 + r9667;
        double r9669 = r9666 * r9666;
        double r9670 = fma(r9668, r9667, r9669);
        double r9671 = r9663 / r9670;
        return r9671;
}

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 r9672, r9673, r9674, r9675, r9676, r9677;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9672);
        mpfr_init_set_str(r9673, "1", 10, MPFR_RNDN);
        mpfr_init(r9674);
        mpfr_init(r9675);
        mpfr_init(r9676);
        mpfr_init(r9677);
}

double f_im(double x) {
        mpfr_set_d(r9672, x, MPFR_RNDN);
        ;
        mpfr_add(r9674, r9672, r9673, MPFR_RNDN);
        mpfr_cbrt(r9675, r9674, MPFR_RNDN);
        mpfr_cbrt(r9676, r9672, MPFR_RNDN);
        mpfr_sub(r9677, r9675, r9676, MPFR_RNDN);
        return mpfr_get_d(r9677, MPFR_RNDN);
}

static mpfr_t r9678, r9679, r9680, r9681, r9682, r9683, r9684, r9685, r9686;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r9678, "1", 10, MPFR_RNDN);
        mpfr_init(r9679);
        mpfr_init(r9680);
        mpfr_init(r9681);
        mpfr_init(r9682);
        mpfr_init(r9683);
        mpfr_init(r9684);
        mpfr_init(r9685);
        mpfr_init(r9686);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r9679, x, MPFR_RNDN);
        mpfr_add(r9680, r9678, r9679, MPFR_RNDN);
        mpfr_cbrt(r9681, r9680, MPFR_RNDN);
        mpfr_cbrt(r9682, r9679, MPFR_RNDN);
        mpfr_add(r9683, r9681, r9682, MPFR_RNDN);
        mpfr_mul(r9684, r9681, r9681, MPFR_RNDN);
        mpfr_fma(r9685, r9683, r9682, r9684, MPFR_RNDN);
        mpfr_div(r9686, r9678, r9685, MPFR_RNDN);
        return mpfr_get_d(r9686, MPFR_RNDN);
}

static mpfr_t r9687, r9688, r9689, r9690, r9691, r9692, r9693, r9694, r9695;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r9687, "1", 10, MPFR_RNDN);
        mpfr_init(r9688);
        mpfr_init(r9689);
        mpfr_init(r9690);
        mpfr_init(r9691);
        mpfr_init(r9692);
        mpfr_init(r9693);
        mpfr_init(r9694);
        mpfr_init(r9695);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r9688, x, MPFR_RNDN);
        mpfr_add(r9689, r9687, r9688, MPFR_RNDN);
        mpfr_cbrt(r9690, r9689, MPFR_RNDN);
        mpfr_cbrt(r9691, r9688, MPFR_RNDN);
        mpfr_add(r9692, r9690, r9691, MPFR_RNDN);
        mpfr_mul(r9693, r9690, r9690, MPFR_RNDN);
        mpfr_fma(r9694, r9692, r9691, r9693, MPFR_RNDN);
        mpfr_div(r9695, r9687, r9694, MPFR_RNDN);
        return mpfr_get_d(r9695, MPFR_RNDN);
}

