#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 r5180820 = x;
        float r5180821 = 1.0f;
        float r5180822 = r5180820 + r5180821;
        float r5180823 = 3.0f;
        float r5180824 = r5180821 / r5180823;
        float r5180825 = pow(r5180822, r5180824);
        float r5180826 = pow(r5180820, r5180824);
        float r5180827 = r5180825 - r5180826;
        return r5180827;
}

double f_id(double x) {
        double r5180828 = x;
        double r5180829 = 1.0;
        double r5180830 = r5180828 + r5180829;
        double r5180831 = 3.0;
        double r5180832 = r5180829 / r5180831;
        double r5180833 = pow(r5180830, r5180832);
        double r5180834 = pow(r5180828, r5180832);
        double r5180835 = r5180833 - r5180834;
        return r5180835;
}


double f_of(float x) {
        float r5180836 = 1.0f;
        float r5180837 = x;
        float r5180838 = 3.0f;
        float r5180839 = r5180836 / r5180838;
        float r5180840 = pow(r5180837, r5180839);
        float r5180841 = r5180837 + r5180836;
        float r5180842 = cbrt(r5180841);
        float r5180843 = r5180840 + r5180842;
        float r5180844 = r5180843 * r5180842;
        float r5180845 = r5180840 * r5180840;
        float r5180846 = r5180844 + r5180845;
        float r5180847 = r5180836 / r5180846;
        return r5180847;
}

double f_od(double x) {
        double r5180848 = 1.0;
        double r5180849 = x;
        double r5180850 = 3.0;
        double r5180851 = r5180848 / r5180850;
        double r5180852 = pow(r5180849, r5180851);
        double r5180853 = r5180849 + r5180848;
        double r5180854 = cbrt(r5180853);
        double r5180855 = r5180852 + r5180854;
        double r5180856 = r5180855 * r5180854;
        double r5180857 = r5180852 * r5180852;
        double r5180858 = r5180856 + r5180857;
        double r5180859 = r5180848 / r5180858;
        return r5180859;
}

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 r5180860, r5180861, r5180862, r5180863, r5180864, r5180865, r5180866, r5180867;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r5180860);
        mpfr_init_set_str(r5180861, "1", 10, MPFR_RNDN);
        mpfr_init(r5180862);
        mpfr_init_set_str(r5180863, "3", 10, MPFR_RNDN);
        mpfr_init(r5180864);
        mpfr_init(r5180865);
        mpfr_init(r5180866);
        mpfr_init(r5180867);
}

double f_im(double x) {
        mpfr_set_d(r5180860, x, MPFR_RNDN);
        ;
        mpfr_add(r5180862, r5180860, r5180861, MPFR_RNDN);
        ;
        mpfr_div(r5180864, r5180861, r5180863, MPFR_RNDN);
        mpfr_pow(r5180865, r5180862, r5180864, MPFR_RNDN);
        mpfr_pow(r5180866, r5180860, r5180864, MPFR_RNDN);
        mpfr_sub(r5180867, r5180865, r5180866, MPFR_RNDN);
        return mpfr_get_d(r5180867, MPFR_RNDN);
}

static mpfr_t r5180868, r5180869, r5180870, r5180871, r5180872, r5180873, r5180874, r5180875, r5180876, r5180877, r5180878, r5180879;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r5180868, "1", 10, MPFR_RNDN);
        mpfr_init(r5180869);
        mpfr_init_set_str(r5180870, "3", 10, MPFR_RNDN);
        mpfr_init(r5180871);
        mpfr_init(r5180872);
        mpfr_init(r5180873);
        mpfr_init(r5180874);
        mpfr_init(r5180875);
        mpfr_init(r5180876);
        mpfr_init(r5180877);
        mpfr_init(r5180878);
        mpfr_init(r5180879);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r5180869, x, MPFR_RNDN);
        ;
        mpfr_div(r5180871, r5180868, r5180870, MPFR_RNDN);
        mpfr_pow(r5180872, r5180869, r5180871, MPFR_RNDN);
        mpfr_add(r5180873, r5180869, r5180868, MPFR_RNDN);
        mpfr_cbrt(r5180874, r5180873, MPFR_RNDN);
        mpfr_add(r5180875, r5180872, r5180874, MPFR_RNDN);
        mpfr_mul(r5180876, r5180875, r5180874, MPFR_RNDN);
        mpfr_sqr(r5180877, r5180872, MPFR_RNDN);
        mpfr_add(r5180878, r5180876, r5180877, MPFR_RNDN);
        mpfr_div(r5180879, r5180868, r5180878, MPFR_RNDN);
        return mpfr_get_d(r5180879, MPFR_RNDN);
}

static mpfr_t r5180880, r5180881, r5180882, r5180883, r5180884, r5180885, r5180886, r5180887, r5180888, r5180889, r5180890, r5180891;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r5180880, "1", 10, MPFR_RNDN);
        mpfr_init(r5180881);
        mpfr_init_set_str(r5180882, "3", 10, MPFR_RNDN);
        mpfr_init(r5180883);
        mpfr_init(r5180884);
        mpfr_init(r5180885);
        mpfr_init(r5180886);
        mpfr_init(r5180887);
        mpfr_init(r5180888);
        mpfr_init(r5180889);
        mpfr_init(r5180890);
        mpfr_init(r5180891);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r5180881, x, MPFR_RNDN);
        ;
        mpfr_div(r5180883, r5180880, r5180882, MPFR_RNDN);
        mpfr_pow(r5180884, r5180881, r5180883, MPFR_RNDN);
        mpfr_add(r5180885, r5180881, r5180880, MPFR_RNDN);
        mpfr_cbrt(r5180886, r5180885, MPFR_RNDN);
        mpfr_add(r5180887, r5180884, r5180886, MPFR_RNDN);
        mpfr_mul(r5180888, r5180887, r5180886, MPFR_RNDN);
        mpfr_sqr(r5180889, r5180884, MPFR_RNDN);
        mpfr_add(r5180890, r5180888, r5180889, MPFR_RNDN);
        mpfr_div(r5180891, r5180880, r5180890, MPFR_RNDN);
        return mpfr_get_d(r5180891, MPFR_RNDN);
}

