#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 r18298 = x_re;
        float r18299 = r18298 * r18298;
        float r18300 = x_im;
        float r18301 = r18300 * r18300;
        float r18302 = r18299 - r18301;
        float r18303 = r18302 * r18298;
        float r18304 = r18298 * r18300;
        float r18305 = r18300 * r18298;
        float r18306 = r18304 + r18305;
        float r18307 = r18306 * r18300;
        float r18308 = r18303 - r18307;
        return r18308;
}

double f_id(double x_re, double x_im) {
        double r18309 = x_re;
        double r18310 = r18309 * r18309;
        double r18311 = x_im;
        double r18312 = r18311 * r18311;
        double r18313 = r18310 - r18312;
        double r18314 = r18313 * r18309;
        double r18315 = r18309 * r18311;
        double r18316 = r18311 * r18309;
        double r18317 = r18315 + r18316;
        double r18318 = r18317 * r18311;
        double r18319 = r18314 - r18318;
        return r18319;
}


double f_of(float x_re, float x_im) {
        float r18320 = x_re;
        float r18321 = r18320 * (r18320 * r18320);
        float r18322 = x_im;
        float r18323 = -r18322;
        float r18324 = r18322 + r18322;
        float r18325 = r18323 - r18324;
        float r18326 = r18322 * r18320;
        float r18327 = r18325 * r18326;
        float r18328 = r18321 + r18327;
        return r18328;
}

double f_od(double x_re, double x_im) {
        double r18329 = x_re;
        double r18330 = r18329 * (r18329 * r18329);
        double r18331 = x_im;
        double r18332 = -r18331;
        double r18333 = r18331 + r18331;
        double r18334 = r18332 - r18333;
        double r18335 = r18331 * r18329;
        double r18336 = r18334 * r18335;
        double r18337 = r18330 + r18336;
        return r18337;
}

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 r18338, r18339, r18340, r18341, r18342, r18343, r18344, r18345, r18346, r18347, r18348;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r18338);
        mpfr_init(r18339);
        mpfr_init(r18340);
        mpfr_init(r18341);
        mpfr_init(r18342);
        mpfr_init(r18343);
        mpfr_init(r18344);
        mpfr_init(r18345);
        mpfr_init(r18346);
        mpfr_init(r18347);
        mpfr_init(r18348);
}

double f_im(double x_re, double x_im) {
        mpfr_set_d(r18338, x_re, MPFR_RNDN);
        mpfr_mul(r18339, r18338, r18338, MPFR_RNDN);
        mpfr_set_d(r18340, x_im, MPFR_RNDN);
        mpfr_mul(r18341, r18340, r18340, MPFR_RNDN);
        mpfr_sub(r18342, r18339, r18341, MPFR_RNDN);
        mpfr_mul(r18343, r18342, r18338, MPFR_RNDN);
        mpfr_mul(r18344, r18338, r18340, MPFR_RNDN);
        mpfr_mul(r18345, r18340, r18338, MPFR_RNDN);
        mpfr_add(r18346, r18344, r18345, MPFR_RNDN);
        mpfr_mul(r18347, r18346, r18340, MPFR_RNDN);
        mpfr_sub(r18348, r18343, r18347, MPFR_RNDN);
        return mpfr_get_d(r18348, MPFR_RNDN);
}

static mpfr_t r18349, r18350, r18351, r18352, r18353, r18354, r18355, r18356, r18357;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r18349);
        mpfr_init(r18350);
        mpfr_init(r18351);
        mpfr_init(r18352);
        mpfr_init(r18353);
        mpfr_init(r18354);
        mpfr_init(r18355);
        mpfr_init(r18356);
        mpfr_init(r18357);
}

double f_fm(double x_re, double x_im) {
        mpfr_set_d(r18349, x_re, MPFR_RNDN);
        mpfr_mul(r18350, r18349, r18349, MPFR_RNDN); mpfr_mul(r18350, r18350, r18349, MPFR_RNDN);
        mpfr_set_d(r18351, x_im, MPFR_RNDN);
        mpfr_neg(r18352, r18351, MPFR_RNDN);
        mpfr_add(r18353, r18351, r18351, MPFR_RNDN);
        mpfr_sub(r18354, r18352, r18353, MPFR_RNDN);
        mpfr_mul(r18355, r18351, r18349, MPFR_RNDN);
        mpfr_mul(r18356, r18354, r18355, MPFR_RNDN);
        mpfr_add(r18357, r18350, r18356, MPFR_RNDN);
        return mpfr_get_d(r18357, MPFR_RNDN);
}

static mpfr_t r18358, r18359, r18360, r18361, r18362, r18363, r18364, r18365, r18366;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r18358);
        mpfr_init(r18359);
        mpfr_init(r18360);
        mpfr_init(r18361);
        mpfr_init(r18362);
        mpfr_init(r18363);
        mpfr_init(r18364);
        mpfr_init(r18365);
        mpfr_init(r18366);
}

double f_dm(double x_re, double x_im) {
        mpfr_set_d(r18358, x_re, MPFR_RNDN);
        mpfr_mul(r18359, r18358, r18358, MPFR_RNDN); mpfr_mul(r18359, r18359, r18358, MPFR_RNDN);
        mpfr_set_d(r18360, x_im, MPFR_RNDN);
        mpfr_neg(r18361, r18360, MPFR_RNDN);
        mpfr_add(r18362, r18360, r18360, MPFR_RNDN);
        mpfr_sub(r18363, r18361, r18362, MPFR_RNDN);
        mpfr_mul(r18364, r18360, r18358, MPFR_RNDN);
        mpfr_mul(r18365, r18363, r18364, MPFR_RNDN);
        mpfr_add(r18366, r18359, r18365, MPFR_RNDN);
        return mpfr_get_d(r18366, MPFR_RNDN);
}

