#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_re;
        float r7482 = x_re;
        float r7483 = log(r7482);
        float r7484 = r7481 * r7483;
        float r7485 = x_im;
        float r7486 = atan2(r7485, r7482);
        float r7487 = y_im;
        float r7488 = r7486 * r7487;
        float r7489 = r7484 - r7488;
        float r7490 = 0.006846928995038972f;
        bool r7491 = r7489 <= r7490;
        float r7492 = exp(r7489);
        float r7493 = 2.2385344274819007e+287f;
        bool r7494 = r7489 <= r7493;
        float r7495 = r7487 * r7483;
        float r7496 = r7481 * r7486;
        float r7497 = r7495 + r7496;
        float r7498 = cos(r7497);
        float r7499 = r7485 * r7485;
        float r7500 = r7482 * r7482;
        float r7501 = r7499 + r7500;
        float r7502 = sqrt(r7501);
        float r7503 = log(r7502);
        float r7504 = r7481 * r7503;
        float r7505 = r7504 - r7488;
        float r7506 = exp(r7505);
        float r7507 = r7498 * r7506;
        float r7508 = -r7482;
        float r7509 = log(r7508);
        float r7510 = r7481 * r7509;
        float r7511 = r7510 - r7488;
        float r7512 = exp(r7511);
        float r7513 = r7494 ? r7507 : r7512;
        float r7514 = r7491 ? r7492 : r7513;
        return r7514;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r7515 = y_re;
        double r7516 = x_re;
        double r7517 = log(r7516);
        double r7518 = r7515 * r7517;
        double r7519 = x_im;
        double r7520 = atan2(r7519, r7516);
        double r7521 = y_im;
        double r7522 = r7520 * r7521;
        double r7523 = r7518 - r7522;
        double r7524 = 0.006846928995038972;
        bool r7525 = r7523 <= r7524;
        double r7526 = exp(r7523);
        double r7527 = 2.2385344274819007e+287;
        bool r7528 = r7523 <= r7527;
        double r7529 = r7521 * r7517;
        double r7530 = r7515 * r7520;
        double r7531 = r7529 + r7530;
        double r7532 = cos(r7531);
        double r7533 = r7519 * r7519;
        double r7534 = r7516 * r7516;
        double r7535 = r7533 + r7534;
        double r7536 = sqrt(r7535);
        double r7537 = log(r7536);
        double r7538 = r7515 * r7537;
        double r7539 = r7538 - r7522;
        double r7540 = exp(r7539);
        double r7541 = r7532 * r7540;
        double r7542 = -r7516;
        double r7543 = log(r7542);
        double r7544 = r7515 * r7543;
        double r7545 = r7544 - r7522;
        double r7546 = exp(r7545);
        double r7547 = r7528 ? r7541 : r7546;
        double r7548 = r7525 ? r7526 : r7547;
        return r7548;
}

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 r7549, r7550, r7551, r7552, r7553, r7554, r7555, r7556, r7557, r7558, r7559, r7560, r7561, r7562, r7563, r7564, r7565, r7566, r7567;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        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);
        mpfr_init(r7560);
        mpfr_init(r7561);
        mpfr_init(r7562);
        mpfr_init(r7563);
        mpfr_init(r7564);
        mpfr_init(r7565);
        mpfr_init(r7566);
        mpfr_init(r7567);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7549, x_re, MPFR_RNDN);
        mpfr_mul(r7550, r7549, r7549, MPFR_RNDN);
        mpfr_set_d(r7551, x_im, MPFR_RNDN);
        mpfr_mul(r7552, r7551, r7551, MPFR_RNDN);
        mpfr_add(r7553, r7550, r7552, MPFR_RNDN);
        mpfr_sqrt(r7554, r7553, MPFR_RNDN);
        mpfr_log(r7555, r7554, MPFR_RNDN);
        mpfr_set_d(r7556, y_re, MPFR_RNDN);
        mpfr_mul(r7557, r7555, r7556, MPFR_RNDN);
        mpfr_atan2(r7558, r7551, r7549, MPFR_RNDN);
        mpfr_set_d(r7559, y_im, MPFR_RNDN);
        mpfr_mul(r7560, r7558, r7559, MPFR_RNDN);
        mpfr_sub(r7561, r7557, r7560, MPFR_RNDN);
        mpfr_exp(r7562, r7561, MPFR_RNDN);
        mpfr_mul(r7563, r7555, r7559, MPFR_RNDN);
        mpfr_mul(r7564, r7558, r7556, MPFR_RNDN);
        mpfr_add(r7565, r7563, r7564, MPFR_RNDN);
        mpfr_cos(r7566, r7565, MPFR_RNDN);
        mpfr_mul(r7567, r7562, r7566, MPFR_RNDN);
        return mpfr_get_d(r7567, MPFR_RNDN);
}

static mpfr_t r7568, r7569, r7570, r7571, r7572, r7573, r7574, r7575, r7576, r7577, r7578, r7579, r7580, r7581, r7582, r7583, r7584, r7585, r7586, r7587, r7588, r7589, r7590, r7591, r7592, r7593, r7594, r7595, r7596, r7597, r7598, r7599, r7600, r7601;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r7568);
        mpfr_init(r7569);
        mpfr_init(r7570);
        mpfr_init(r7571);
        mpfr_init(r7572);
        mpfr_init(r7573);
        mpfr_init(r7574);
        mpfr_init(r7575);
        mpfr_init(r7576);
        mpfr_init_set_str(r7577, "0.006846928995038972", 10, MPFR_RNDN);
        mpfr_init(r7578);
        mpfr_init(r7579);
        mpfr_init_set_str(r7580, "2.2385344274819007e+287", 10, MPFR_RNDN);
        mpfr_init(r7581);
        mpfr_init(r7582);
        mpfr_init(r7583);
        mpfr_init(r7584);
        mpfr_init(r7585);
        mpfr_init(r7586);
        mpfr_init(r7587);
        mpfr_init(r7588);
        mpfr_init(r7589);
        mpfr_init(r7590);
        mpfr_init(r7591);
        mpfr_init(r7592);
        mpfr_init(r7593);
        mpfr_init(r7594);
        mpfr_init(r7595);
        mpfr_init(r7596);
        mpfr_init(r7597);
        mpfr_init(r7598);
        mpfr_init(r7599);
        mpfr_init(r7600);
        mpfr_init(r7601);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7568, y_re, MPFR_RNDN);
        mpfr_set_d(r7569, x_re, MPFR_RNDN);
        mpfr_log(r7570, r7569, MPFR_RNDN);
        mpfr_mul(r7571, r7568, r7570, MPFR_RNDN);
        mpfr_set_d(r7572, x_im, MPFR_RNDN);
        mpfr_atan2(r7573, r7572, r7569, MPFR_RNDN);
        mpfr_set_d(r7574, y_im, MPFR_RNDN);
        mpfr_mul(r7575, r7573, r7574, MPFR_RNDN);
        mpfr_sub(r7576, r7571, r7575, MPFR_RNDN);
        ;
        mpfr_set_si(r7578, mpfr_cmp(r7576, r7577) <= 0, MPFR_RNDN);
        mpfr_exp(r7579, r7576, MPFR_RNDN);
        ;
        mpfr_set_si(r7581, mpfr_cmp(r7576, r7580) <= 0, MPFR_RNDN);
        mpfr_mul(r7582, r7574, r7570, MPFR_RNDN);
        mpfr_mul(r7583, r7568, r7573, MPFR_RNDN);
        mpfr_add(r7584, r7582, r7583, MPFR_RNDN);
        mpfr_cos(r7585, r7584, MPFR_RNDN);
        mpfr_mul(r7586, r7572, r7572, MPFR_RNDN);
        mpfr_mul(r7587, r7569, r7569, MPFR_RNDN);
        mpfr_add(r7588, r7586, r7587, MPFR_RNDN);
        mpfr_sqrt(r7589, r7588, MPFR_RNDN);
        mpfr_log(r7590, r7589, MPFR_RNDN);
        mpfr_mul(r7591, r7568, r7590, MPFR_RNDN);
        mpfr_sub(r7592, r7591, r7575, MPFR_RNDN);
        mpfr_exp(r7593, r7592, MPFR_RNDN);
        mpfr_mul(r7594, r7585, r7593, MPFR_RNDN);
        mpfr_neg(r7595, r7569, MPFR_RNDN);
        mpfr_log(r7596, r7595, MPFR_RNDN);
        mpfr_mul(r7597, r7568, r7596, MPFR_RNDN);
        mpfr_sub(r7598, r7597, r7575, MPFR_RNDN);
        mpfr_exp(r7599, r7598, MPFR_RNDN);
        if (mpfr_get_si(r7581, MPFR_RNDN)) { mpfr_set(r7600, r7594, MPFR_RNDN); } else { mpfr_set(r7600, r7599, MPFR_RNDN); };
        if (mpfr_get_si(r7578, MPFR_RNDN)) { mpfr_set(r7601, r7579, MPFR_RNDN); } else { mpfr_set(r7601, r7600, MPFR_RNDN); };
        return mpfr_get_d(r7601, MPFR_RNDN);
}

static mpfr_t r7602, r7603, r7604, r7605, r7606, r7607, r7608, r7609, r7610, r7611, r7612, r7613, r7614, r7615, r7616, r7617, r7618, r7619, r7620, r7621, r7622, r7623, r7624, r7625, r7626, r7627, r7628, r7629, r7630, r7631, r7632, r7633, r7634, r7635;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r7602);
        mpfr_init(r7603);
        mpfr_init(r7604);
        mpfr_init(r7605);
        mpfr_init(r7606);
        mpfr_init(r7607);
        mpfr_init(r7608);
        mpfr_init(r7609);
        mpfr_init(r7610);
        mpfr_init_set_str(r7611, "0.006846928995038972", 10, MPFR_RNDN);
        mpfr_init(r7612);
        mpfr_init(r7613);
        mpfr_init_set_str(r7614, "2.2385344274819007e+287", 10, MPFR_RNDN);
        mpfr_init(r7615);
        mpfr_init(r7616);
        mpfr_init(r7617);
        mpfr_init(r7618);
        mpfr_init(r7619);
        mpfr_init(r7620);
        mpfr_init(r7621);
        mpfr_init(r7622);
        mpfr_init(r7623);
        mpfr_init(r7624);
        mpfr_init(r7625);
        mpfr_init(r7626);
        mpfr_init(r7627);
        mpfr_init(r7628);
        mpfr_init(r7629);
        mpfr_init(r7630);
        mpfr_init(r7631);
        mpfr_init(r7632);
        mpfr_init(r7633);
        mpfr_init(r7634);
        mpfr_init(r7635);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7602, y_re, MPFR_RNDN);
        mpfr_set_d(r7603, x_re, MPFR_RNDN);
        mpfr_log(r7604, r7603, MPFR_RNDN);
        mpfr_mul(r7605, r7602, r7604, MPFR_RNDN);
        mpfr_set_d(r7606, x_im, MPFR_RNDN);
        mpfr_atan2(r7607, r7606, r7603, MPFR_RNDN);
        mpfr_set_d(r7608, y_im, MPFR_RNDN);
        mpfr_mul(r7609, r7607, r7608, MPFR_RNDN);
        mpfr_sub(r7610, r7605, r7609, MPFR_RNDN);
        ;
        mpfr_set_si(r7612, mpfr_cmp(r7610, r7611) <= 0, MPFR_RNDN);
        mpfr_exp(r7613, r7610, MPFR_RNDN);
        ;
        mpfr_set_si(r7615, mpfr_cmp(r7610, r7614) <= 0, MPFR_RNDN);
        mpfr_mul(r7616, r7608, r7604, MPFR_RNDN);
        mpfr_mul(r7617, r7602, r7607, MPFR_RNDN);
        mpfr_add(r7618, r7616, r7617, MPFR_RNDN);
        mpfr_cos(r7619, r7618, MPFR_RNDN);
        mpfr_mul(r7620, r7606, r7606, MPFR_RNDN);
        mpfr_mul(r7621, r7603, r7603, MPFR_RNDN);
        mpfr_add(r7622, r7620, r7621, MPFR_RNDN);
        mpfr_sqrt(r7623, r7622, MPFR_RNDN);
        mpfr_log(r7624, r7623, MPFR_RNDN);
        mpfr_mul(r7625, r7602, r7624, MPFR_RNDN);
        mpfr_sub(r7626, r7625, r7609, MPFR_RNDN);
        mpfr_exp(r7627, r7626, MPFR_RNDN);
        mpfr_mul(r7628, r7619, r7627, MPFR_RNDN);
        mpfr_neg(r7629, r7603, MPFR_RNDN);
        mpfr_log(r7630, r7629, MPFR_RNDN);
        mpfr_mul(r7631, r7602, r7630, MPFR_RNDN);
        mpfr_sub(r7632, r7631, r7609, MPFR_RNDN);
        mpfr_exp(r7633, r7632, MPFR_RNDN);
        if (mpfr_get_si(r7615, MPFR_RNDN)) { mpfr_set(r7634, r7628, MPFR_RNDN); } else { mpfr_set(r7634, r7633, MPFR_RNDN); };
        if (mpfr_get_si(r7612, MPFR_RNDN)) { mpfr_set(r7635, r7613, MPFR_RNDN); } else { mpfr_set(r7635, r7634, MPFR_RNDN); };
        return mpfr_get_d(r7635, MPFR_RNDN);
}

