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

char *name = "powComplex, real part";

double f_if(float x_re, float x_im, float y_re, float y_im) {
        float r7443 = x_re;
        float r7444 = r7443 * r7443;
        float r7445 = x_im;
        float r7446 = r7445 * r7445;
        float r7447 = r7444 + r7446;
        float r7448 = sqrt(r7447);
        float r7449 = log(r7448);
        float r7450 = y_re;
        float r7451 = r7449 * r7450;
        float r7452 = atan2(r7445, r7443);
        float r7453 = y_im;
        float r7454 = r7452 * r7453;
        float r7455 = r7451 - r7454;
        float r7456 = exp(r7455);
        float r7457 = r7449 * r7453;
        float r7458 = r7452 * r7450;
        float r7459 = r7457 + r7458;
        float r7460 = cos(r7459);
        float r7461 = r7456 * r7460;
        return r7461;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r7462 = x_re;
        double r7463 = r7462 * r7462;
        double r7464 = x_im;
        double r7465 = r7464 * r7464;
        double r7466 = r7463 + r7465;
        double r7467 = sqrt(r7466);
        double r7468 = log(r7467);
        double r7469 = y_re;
        double r7470 = r7468 * r7469;
        double r7471 = atan2(r7464, r7462);
        double r7472 = y_im;
        double r7473 = r7471 * r7472;
        double r7474 = r7470 - r7473;
        double r7475 = exp(r7474);
        double r7476 = r7468 * r7472;
        double r7477 = r7471 * r7469;
        double r7478 = r7476 + r7477;
        double r7479 = cos(r7478);
        double r7480 = r7475 * r7479;
        return r7480;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r7481 = y_im;
        float r7482 = x_re;
        float r7483 = x_im;
        float r7484 = hypot(r7482, r7483);
        float r7485 = log(r7484);
        float r7486 = atan2(r7483, r7482);
        float r7487 = y_re;
        float r7488 = r7486 * r7487;
        float r7489 = fma(r7481, r7485, r7488);
        float r7490 = cos(r7489);
        float r7491 = r7486 * r7481;
        float r7492 = r7487 * r7485;
        float r7493 = r7491 - r7492;
        float r7494 = exp(r7493);
        float r7495 = r7490 / r7494;
        return r7495;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r7496 = y_im;
        double r7497 = x_re;
        double r7498 = x_im;
        double r7499 = hypot(r7497, r7498);
        double r7500 = log(r7499);
        double r7501 = atan2(r7498, r7497);
        double r7502 = y_re;
        double r7503 = r7501 * r7502;
        double r7504 = fma(r7496, r7500, r7503);
        double r7505 = cos(r7504);
        double r7506 = r7501 * r7496;
        double r7507 = r7502 * r7500;
        double r7508 = r7506 - r7507;
        double r7509 = exp(r7508);
        double r7510 = r7505 / r7509;
        return r7510;
}

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 r7511, r7512, r7513, r7514, r7515, r7516, r7517, r7518, r7519, r7520, r7521, r7522, r7523, r7524, r7525, r7526, r7527, r7528, r7529;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r7511);
        mpfr_init(r7512);
        mpfr_init(r7513);
        mpfr_init(r7514);
        mpfr_init(r7515);
        mpfr_init(r7516);
        mpfr_init(r7517);
        mpfr_init(r7518);
        mpfr_init(r7519);
        mpfr_init(r7520);
        mpfr_init(r7521);
        mpfr_init(r7522);
        mpfr_init(r7523);
        mpfr_init(r7524);
        mpfr_init(r7525);
        mpfr_init(r7526);
        mpfr_init(r7527);
        mpfr_init(r7528);
        mpfr_init(r7529);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7511, x_re, MPFR_RNDN);
        mpfr_mul(r7512, r7511, r7511, MPFR_RNDN);
        mpfr_set_d(r7513, x_im, MPFR_RNDN);
        mpfr_mul(r7514, r7513, r7513, MPFR_RNDN);
        mpfr_add(r7515, r7512, r7514, MPFR_RNDN);
        mpfr_sqrt(r7516, r7515, MPFR_RNDN);
        mpfr_log(r7517, r7516, MPFR_RNDN);
        mpfr_set_d(r7518, y_re, MPFR_RNDN);
        mpfr_mul(r7519, r7517, r7518, MPFR_RNDN);
        mpfr_atan2(r7520, r7513, r7511, MPFR_RNDN);
        mpfr_set_d(r7521, y_im, MPFR_RNDN);
        mpfr_mul(r7522, r7520, r7521, MPFR_RNDN);
        mpfr_sub(r7523, r7519, r7522, MPFR_RNDN);
        mpfr_exp(r7524, r7523, MPFR_RNDN);
        mpfr_mul(r7525, r7517, r7521, MPFR_RNDN);
        mpfr_mul(r7526, r7520, r7518, MPFR_RNDN);
        mpfr_add(r7527, r7525, r7526, MPFR_RNDN);
        mpfr_cos(r7528, r7527, MPFR_RNDN);
        mpfr_mul(r7529, r7524, r7528, MPFR_RNDN);
        return mpfr_get_d(r7529, MPFR_RNDN);
}

static mpfr_t r7530, r7531, r7532, r7533, r7534, r7535, r7536, r7537, r7538, r7539, r7540, r7541, r7542, r7543, r7544;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r7530);
        mpfr_init(r7531);
        mpfr_init(r7532);
        mpfr_init(r7533);
        mpfr_init(r7534);
        mpfr_init(r7535);
        mpfr_init(r7536);
        mpfr_init(r7537);
        mpfr_init(r7538);
        mpfr_init(r7539);
        mpfr_init(r7540);
        mpfr_init(r7541);
        mpfr_init(r7542);
        mpfr_init(r7543);
        mpfr_init(r7544);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7530, y_im, MPFR_RNDN);
        mpfr_set_d(r7531, x_re, MPFR_RNDN);
        mpfr_set_d(r7532, x_im, MPFR_RNDN);
        mpfr_hypot(r7533, r7531, r7532, MPFR_RNDN);
        mpfr_log(r7534, r7533, MPFR_RNDN);
        mpfr_atan2(r7535, r7532, r7531, MPFR_RNDN);
        mpfr_set_d(r7536, y_re, MPFR_RNDN);
        mpfr_mul(r7537, r7535, r7536, MPFR_RNDN);
        mpfr_fma(r7538, r7530, r7534, r7537, MPFR_RNDN);
        mpfr_cos(r7539, r7538, MPFR_RNDN);
        mpfr_mul(r7540, r7535, r7530, MPFR_RNDN);
        mpfr_mul(r7541, r7536, r7534, MPFR_RNDN);
        mpfr_sub(r7542, r7540, r7541, MPFR_RNDN);
        mpfr_exp(r7543, r7542, MPFR_RNDN);
        mpfr_div(r7544, r7539, r7543, MPFR_RNDN);
        return mpfr_get_d(r7544, MPFR_RNDN);
}

static mpfr_t r7545, r7546, r7547, r7548, r7549, r7550, r7551, r7552, r7553, r7554, r7555, r7556, r7557, r7558, r7559;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r7545);
        mpfr_init(r7546);
        mpfr_init(r7547);
        mpfr_init(r7548);
        mpfr_init(r7549);
        mpfr_init(r7550);
        mpfr_init(r7551);
        mpfr_init(r7552);
        mpfr_init(r7553);
        mpfr_init(r7554);
        mpfr_init(r7555);
        mpfr_init(r7556);
        mpfr_init(r7557);
        mpfr_init(r7558);
        mpfr_init(r7559);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7545, y_im, MPFR_RNDN);
        mpfr_set_d(r7546, x_re, MPFR_RNDN);
        mpfr_set_d(r7547, x_im, MPFR_RNDN);
        mpfr_hypot(r7548, r7546, r7547, MPFR_RNDN);
        mpfr_log(r7549, r7548, MPFR_RNDN);
        mpfr_atan2(r7550, r7547, r7546, MPFR_RNDN);
        mpfr_set_d(r7551, y_re, MPFR_RNDN);
        mpfr_mul(r7552, r7550, r7551, MPFR_RNDN);
        mpfr_fma(r7553, r7545, r7549, r7552, MPFR_RNDN);
        mpfr_cos(r7554, r7553, MPFR_RNDN);
        mpfr_mul(r7555, r7550, r7545, MPFR_RNDN);
        mpfr_mul(r7556, r7551, r7549, MPFR_RNDN);
        mpfr_sub(r7557, r7555, r7556, MPFR_RNDN);
        mpfr_exp(r7558, r7557, MPFR_RNDN);
        mpfr_div(r7559, r7554, r7558, MPFR_RNDN);
        return mpfr_get_d(r7559, MPFR_RNDN);
}

