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

char *name = "math.cube on complex, real part";

double f_if(float x_re, float x_im) {
        float r8833 = x_re;
        float r8834 = r8833 * r8833;
        float r8835 = x_im;
        float r8836 = r8835 * r8835;
        float r8837 = r8834 - r8836;
        float r8838 = r8837 * r8833;
        float r8839 = r8833 * r8835;
        float r8840 = r8835 * r8833;
        float r8841 = r8839 + r8840;
        float r8842 = r8841 * r8835;
        float r8843 = r8838 - r8842;
        return r8843;
}

double f_id(double x_re, double x_im) {
        double r8844 = x_re;
        double r8845 = r8844 * r8844;
        double r8846 = x_im;
        double r8847 = r8846 * r8846;
        double r8848 = r8845 - r8847;
        double r8849 = r8848 * r8844;
        double r8850 = r8844 * r8846;
        double r8851 = r8846 * r8844;
        double r8852 = r8850 + r8851;
        double r8853 = r8852 * r8846;
        double r8854 = r8849 - r8853;
        return r8854;
}


double f_of(float x_re, float x_im) {
        float r8855 = x_re;
        float r8856 = 3;
        float r8857 = pow(r8855, r8856);
        float r8858 = x_im;
        float r8859 = r8856 * r8858;
        float r8860 = r8858 * r8855;
        float r8861 = r8859 * r8860;
        float r8862 = r8857 - r8861;
        return r8862;
}

double f_od(double x_re, double x_im) {
        double r8863 = x_re;
        double r8864 = 3;
        double r8865 = pow(r8863, r8864);
        double r8866 = x_im;
        double r8867 = r8864 * r8866;
        double r8868 = r8866 * r8863;
        double r8869 = r8867 * r8868;
        double r8870 = r8865 - r8869;
        return r8870;
}

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 r8871, r8872, r8873, r8874, r8875, r8876, r8877, r8878, r8879, r8880, r8881;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8871);
        mpfr_init(r8872);
        mpfr_init(r8873);
        mpfr_init(r8874);
        mpfr_init(r8875);
        mpfr_init(r8876);
        mpfr_init(r8877);
        mpfr_init(r8878);
        mpfr_init(r8879);
        mpfr_init(r8880);
        mpfr_init(r8881);
}

double f_im(double x_re, double x_im) {
        mpfr_set_d(r8871, x_re, MPFR_RNDN);
        mpfr_mul(r8872, r8871, r8871, MPFR_RNDN);
        mpfr_set_d(r8873, x_im, MPFR_RNDN);
        mpfr_mul(r8874, r8873, r8873, MPFR_RNDN);
        mpfr_sub(r8875, r8872, r8874, MPFR_RNDN);
        mpfr_mul(r8876, r8875, r8871, MPFR_RNDN);
        mpfr_mul(r8877, r8871, r8873, MPFR_RNDN);
        mpfr_mul(r8878, r8873, r8871, MPFR_RNDN);
        mpfr_add(r8879, r8877, r8878, MPFR_RNDN);
        mpfr_mul(r8880, r8879, r8873, MPFR_RNDN);
        mpfr_sub(r8881, r8876, r8880, MPFR_RNDN);
        return mpfr_get_d(r8881, MPFR_RNDN);
}

static mpfr_t r8882, r8883, r8884, r8885, r8886, r8887, r8888, r8889;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8882);
        mpfr_init_set_str(r8883, "3", 10, MPFR_RNDN);
        mpfr_init(r8884);
        mpfr_init(r8885);
        mpfr_init(r8886);
        mpfr_init(r8887);
        mpfr_init(r8888);
        mpfr_init(r8889);
}

double f_fm(double x_re, double x_im) {
        mpfr_set_d(r8882, x_re, MPFR_RNDN);
        ;
        mpfr_pow(r8884, r8882, r8883, MPFR_RNDN);
        mpfr_set_d(r8885, x_im, MPFR_RNDN);
        mpfr_mul(r8886, r8883, r8885, MPFR_RNDN);
        mpfr_mul(r8887, r8885, r8882, MPFR_RNDN);
        mpfr_mul(r8888, r8886, r8887, MPFR_RNDN);
        mpfr_sub(r8889, r8884, r8888, MPFR_RNDN);
        return mpfr_get_d(r8889, MPFR_RNDN);
}

static mpfr_t r8890, r8891, r8892, r8893, r8894, r8895, r8896, r8897;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8890);
        mpfr_init_set_str(r8891, "3", 10, MPFR_RNDN);
        mpfr_init(r8892);
        mpfr_init(r8893);
        mpfr_init(r8894);
        mpfr_init(r8895);
        mpfr_init(r8896);
        mpfr_init(r8897);
}

double f_dm(double x_re, double x_im) {
        mpfr_set_d(r8890, x_re, MPFR_RNDN);
        ;
        mpfr_pow(r8892, r8890, r8891, MPFR_RNDN);
        mpfr_set_d(r8893, x_im, MPFR_RNDN);
        mpfr_mul(r8894, r8891, r8893, MPFR_RNDN);
        mpfr_mul(r8895, r8893, r8890, MPFR_RNDN);
        mpfr_mul(r8896, r8894, r8895, MPFR_RNDN);
        mpfr_sub(r8897, r8892, r8896, MPFR_RNDN);
        return mpfr_get_d(r8897, MPFR_RNDN);
}

