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

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

double f_if(float x_re, float x_im) {
        float r8898 = x_re;
        float r8899 = r8898 * r8898;
        float r8900 = x_im;
        float r8901 = r8900 * r8900;
        float r8902 = r8899 - r8901;
        float r8903 = r8902 * r8900;
        float r8904 = r8898 * r8900;
        float r8905 = r8900 * r8898;
        float r8906 = r8904 + r8905;
        float r8907 = r8906 * r8898;
        float r8908 = r8903 + r8907;
        return r8908;
}

double f_id(double x_re, double x_im) {
        double r8909 = x_re;
        double r8910 = r8909 * r8909;
        double r8911 = x_im;
        double r8912 = r8911 * r8911;
        double r8913 = r8910 - r8912;
        double r8914 = r8913 * r8911;
        double r8915 = r8909 * r8911;
        double r8916 = r8911 * r8909;
        double r8917 = r8915 + r8916;
        double r8918 = r8917 * r8909;
        double r8919 = r8914 + r8918;
        return r8919;
}


double f_of(float x_re, float x_im) {
        float r8920 = 3;
        float r8921 = x_im;
        float r8922 = x_re;
        float r8923 = r8921 * r8922;
        float r8924 = r8920 * r8923;
        float r8925 = r8924 * r8922;
        float r8926 = pow(r8921, r8920);
        float r8927 = r8925 - r8926;
        return r8927;
}

double f_od(double x_re, double x_im) {
        double r8928 = 3;
        double r8929 = x_im;
        double r8930 = x_re;
        double r8931 = r8929 * r8930;
        double r8932 = r8928 * r8931;
        double r8933 = r8932 * r8930;
        double r8934 = pow(r8929, r8928);
        double r8935 = r8933 - r8934;
        return r8935;
}

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 r8936, r8937, r8938, r8939, r8940, r8941, r8942, r8943, r8944, r8945, r8946;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r8936);
        mpfr_init(r8937);
        mpfr_init(r8938);
        mpfr_init(r8939);
        mpfr_init(r8940);
        mpfr_init(r8941);
        mpfr_init(r8942);
        mpfr_init(r8943);
        mpfr_init(r8944);
        mpfr_init(r8945);
        mpfr_init(r8946);
}

double f_im(double x_re, double x_im) {
        mpfr_set_d(r8936, x_re, MPFR_RNDN);
        mpfr_mul(r8937, r8936, r8936, MPFR_RNDN);
        mpfr_set_d(r8938, x_im, MPFR_RNDN);
        mpfr_mul(r8939, r8938, r8938, MPFR_RNDN);
        mpfr_sub(r8940, r8937, r8939, MPFR_RNDN);
        mpfr_mul(r8941, r8940, r8938, MPFR_RNDN);
        mpfr_mul(r8942, r8936, r8938, MPFR_RNDN);
        mpfr_mul(r8943, r8938, r8936, MPFR_RNDN);
        mpfr_add(r8944, r8942, r8943, MPFR_RNDN);
        mpfr_mul(r8945, r8944, r8936, MPFR_RNDN);
        mpfr_add(r8946, r8941, r8945, MPFR_RNDN);
        return mpfr_get_d(r8946, MPFR_RNDN);
}

static mpfr_t r8947, r8948, r8949, r8950, r8951, r8952, r8953, r8954;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8947, "3", 10, MPFR_RNDN);
        mpfr_init(r8948);
        mpfr_init(r8949);
        mpfr_init(r8950);
        mpfr_init(r8951);
        mpfr_init(r8952);
        mpfr_init(r8953);
        mpfr_init(r8954);
}

double f_fm(double x_re, double x_im) {
        ;
        mpfr_set_d(r8948, x_im, MPFR_RNDN);
        mpfr_set_d(r8949, x_re, MPFR_RNDN);
        mpfr_mul(r8950, r8948, r8949, MPFR_RNDN);
        mpfr_mul(r8951, r8947, r8950, MPFR_RNDN);
        mpfr_mul(r8952, r8951, r8949, MPFR_RNDN);
        mpfr_pow(r8953, r8948, r8947, MPFR_RNDN);
        mpfr_sub(r8954, r8952, r8953, MPFR_RNDN);
        return mpfr_get_d(r8954, MPFR_RNDN);
}

static mpfr_t r8955, r8956, r8957, r8958, r8959, r8960, r8961, r8962;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8955, "3", 10, MPFR_RNDN);
        mpfr_init(r8956);
        mpfr_init(r8957);
        mpfr_init(r8958);
        mpfr_init(r8959);
        mpfr_init(r8960);
        mpfr_init(r8961);
        mpfr_init(r8962);
}

double f_dm(double x_re, double x_im) {
        ;
        mpfr_set_d(r8956, x_im, MPFR_RNDN);
        mpfr_set_d(r8957, x_re, MPFR_RNDN);
        mpfr_mul(r8958, r8956, r8957, MPFR_RNDN);
        mpfr_mul(r8959, r8955, r8958, MPFR_RNDN);
        mpfr_mul(r8960, r8959, r8957, MPFR_RNDN);
        mpfr_pow(r8961, r8956, r8955, MPFR_RNDN);
        mpfr_sub(r8962, r8960, r8961, MPFR_RNDN);
        return mpfr_get_d(r8962, MPFR_RNDN);
}

