#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 r20634 = x;
        float r20635 = 1;
        float r20636 = r20634 + r20635;
        float r20637 = cbrt(r20636);
        float r20638 = cbrt(r20634);
        float r20639 = r20637 - r20638;
        return r20639;
}

double f_id(double x) {
        double r20640 = x;
        double r20641 = 1;
        double r20642 = r20640 + r20641;
        double r20643 = cbrt(r20642);
        double r20644 = cbrt(r20640);
        double r20645 = r20643 - r20644;
        return r20645;
}


double f_of(float x) {
        float r20646 = 1;
        float r20647 = x;
        float r20648 = r20646 + r20647;
        float r20649 = cbrt(r20648);
        float r20650 = r20649 * r20649;
        float r20651 = cbrt(r20647);
        float r20652 = r20651 + r20649;
        float r20653 = r20652 * r20651;
        float r20654 = r20650 + r20653;
        float r20655 = r20646 / r20654;
        return r20655;
}

double f_od(double x) {
        double r20656 = 1;
        double r20657 = x;
        double r20658 = r20656 + r20657;
        double r20659 = cbrt(r20658);
        double r20660 = r20659 * r20659;
        double r20661 = cbrt(r20657);
        double r20662 = r20661 + r20659;
        double r20663 = r20662 * r20661;
        double r20664 = r20660 + r20663;
        double r20665 = r20656 / r20664;
        return r20665;
}

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 r20666, r20667, r20668, r20669, r20670, r20671;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r20666);
        mpfr_init_set_str(r20667, "1", 10, MPFR_RNDN);
        mpfr_init(r20668);
        mpfr_init(r20669);
        mpfr_init(r20670);
        mpfr_init(r20671);
}

double f_im(double x) {
        mpfr_set_d(r20666, x, MPFR_RNDN);
        ;
        mpfr_add(r20668, r20666, r20667, MPFR_RNDN);
        mpfr_cbrt(r20669, r20668, MPFR_RNDN);
        mpfr_cbrt(r20670, r20666, MPFR_RNDN);
        mpfr_sub(r20671, r20669, r20670, MPFR_RNDN);
        return mpfr_get_d(r20671, MPFR_RNDN);
}

static mpfr_t r20672, r20673, r20674, r20675, r20676, r20677, r20678, r20679, r20680, r20681;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r20672, "1", 10, MPFR_RNDN);
        mpfr_init(r20673);
        mpfr_init(r20674);
        mpfr_init(r20675);
        mpfr_init(r20676);
        mpfr_init(r20677);
        mpfr_init(r20678);
        mpfr_init(r20679);
        mpfr_init(r20680);
        mpfr_init(r20681);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r20673, x, MPFR_RNDN);
        mpfr_add(r20674, r20672, r20673, MPFR_RNDN);
        mpfr_cbrt(r20675, r20674, MPFR_RNDN);
        mpfr_mul(r20676, r20675, r20675, MPFR_RNDN);
        mpfr_cbrt(r20677, r20673, MPFR_RNDN);
        mpfr_add(r20678, r20677, r20675, MPFR_RNDN);
        mpfr_mul(r20679, r20678, r20677, MPFR_RNDN);
        mpfr_add(r20680, r20676, r20679, MPFR_RNDN);
        mpfr_div(r20681, r20672, r20680, MPFR_RNDN);
        return mpfr_get_d(r20681, MPFR_RNDN);
}

static mpfr_t r20682, r20683, r20684, r20685, r20686, r20687, r20688, r20689, r20690, r20691;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r20682, "1", 10, MPFR_RNDN);
        mpfr_init(r20683);
        mpfr_init(r20684);
        mpfr_init(r20685);
        mpfr_init(r20686);
        mpfr_init(r20687);
        mpfr_init(r20688);
        mpfr_init(r20689);
        mpfr_init(r20690);
        mpfr_init(r20691);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r20683, x, MPFR_RNDN);
        mpfr_add(r20684, r20682, r20683, MPFR_RNDN);
        mpfr_cbrt(r20685, r20684, MPFR_RNDN);
        mpfr_mul(r20686, r20685, r20685, MPFR_RNDN);
        mpfr_cbrt(r20687, r20683, MPFR_RNDN);
        mpfr_add(r20688, r20687, r20685, MPFR_RNDN);
        mpfr_mul(r20689, r20688, r20687, MPFR_RNDN);
        mpfr_add(r20690, r20686, r20689, MPFR_RNDN);
        mpfr_div(r20691, r20682, r20690, MPFR_RNDN);
        return mpfr_get_d(r20691, MPFR_RNDN);
}

