#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 r20413 = x_re;
        float r20414 = r20413 * r20413;
        float r20415 = x_im;
        float r20416 = r20415 * r20415;
        float r20417 = r20414 + r20416;
        float r20418 = sqrt(r20417);
        float r20419 = log(r20418);
        float r20420 = y_re;
        float r20421 = r20419 * r20420;
        float r20422 = atan2(r20415, r20413);
        float r20423 = y_im;
        float r20424 = r20422 * r20423;
        float r20425 = r20421 - r20424;
        float r20426 = exp(r20425);
        float r20427 = r20419 * r20423;
        float r20428 = r20422 * r20420;
        float r20429 = r20427 + r20428;
        float r20430 = cos(r20429);
        float r20431 = r20426 * r20430;
        return r20431;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r20432 = x_re;
        double r20433 = r20432 * r20432;
        double r20434 = x_im;
        double r20435 = r20434 * r20434;
        double r20436 = r20433 + r20435;
        double r20437 = sqrt(r20436);
        double r20438 = log(r20437);
        double r20439 = y_re;
        double r20440 = r20438 * r20439;
        double r20441 = atan2(r20434, r20432);
        double r20442 = y_im;
        double r20443 = r20441 * r20442;
        double r20444 = r20440 - r20443;
        double r20445 = exp(r20444);
        double r20446 = r20438 * r20442;
        double r20447 = r20441 * r20439;
        double r20448 = r20446 + r20447;
        double r20449 = cos(r20448);
        double r20450 = r20445 * r20449;
        return r20450;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r20451 = x_im;
        float r20452 = x_re;
        float r20453 = hypot(r20451, r20452);
        float r20454 = log(r20453);
        float r20455 = y_im;
        float r20456 = atan2(r20451, r20452);
        float r20457 = y_re;
        float r20458 = r20456 * r20457;
        float r20459 = fma(r20454, r20455, r20458);
        float r20460 = cos(r20459);
        float r20461 = r20456 * r20455;
        float r20462 = 1;
        float r20463 = 1/2;
        float r20464 = 2;
        float r20465 = pow(r20456, r20464);
        float r20466 = pow(r20455, r20464);
        float r20467 = r20465 * r20466;
        float r20468 = r20463 * r20467;
        float r20469 = r20462 + r20468;
        float r20470 = r20461 + r20469;
        float r20471 = pow(r20453, r20457);
        float r20472 = r20470 / r20471;
        float r20473 = r20460 / r20472;
        float r20474 = -3.0656959711371403e-308;
        bool r20475 = r20473 <= r20474;
        float r20476 = cbrt(r20459);
        float r20477 = r20476 * r20476;
        float r20478 = r20477 * r20476;
        float r20479 = cos(r20478);
        float r20480 = r20455 * r20456;
        float r20481 = exp(r20480);
        float r20482 = r20481 / r20471;
        float r20483 = r20479 / r20482;
        float r20484 = 0.0;
        bool r20485 = r20473 <= r20484;
        float r20486 = r20485 ? r20473 : r20483;
        float r20487 = r20475 ? r20483 : r20486;
        return r20487;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r20488 = x_im;
        double r20489 = x_re;
        double r20490 = hypot(r20488, r20489);
        double r20491 = log(r20490);
        double r20492 = y_im;
        double r20493 = atan2(r20488, r20489);
        double r20494 = y_re;
        double r20495 = r20493 * r20494;
        double r20496 = fma(r20491, r20492, r20495);
        double r20497 = cos(r20496);
        double r20498 = r20493 * r20492;
        double r20499 = 1;
        double r20500 = 1/2;
        double r20501 = 2;
        double r20502 = pow(r20493, r20501);
        double r20503 = pow(r20492, r20501);
        double r20504 = r20502 * r20503;
        double r20505 = r20500 * r20504;
        double r20506 = r20499 + r20505;
        double r20507 = r20498 + r20506;
        double r20508 = pow(r20490, r20494);
        double r20509 = r20507 / r20508;
        double r20510 = r20497 / r20509;
        double r20511 = -3.0656959711371403e-308;
        bool r20512 = r20510 <= r20511;
        double r20513 = cbrt(r20496);
        double r20514 = r20513 * r20513;
        double r20515 = r20514 * r20513;
        double r20516 = cos(r20515);
        double r20517 = r20492 * r20493;
        double r20518 = exp(r20517);
        double r20519 = r20518 / r20508;
        double r20520 = r20516 / r20519;
        double r20521 = 0.0;
        bool r20522 = r20510 <= r20521;
        double r20523 = r20522 ? r20510 : r20520;
        double r20524 = r20512 ? r20520 : r20523;
        return r20524;
}

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 r20525, r20526, r20527, r20528, r20529, r20530, r20531, r20532, r20533, r20534, r20535, r20536, r20537, r20538, r20539, r20540, r20541, r20542, r20543;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r20525);
        mpfr_init(r20526);
        mpfr_init(r20527);
        mpfr_init(r20528);
        mpfr_init(r20529);
        mpfr_init(r20530);
        mpfr_init(r20531);
        mpfr_init(r20532);
        mpfr_init(r20533);
        mpfr_init(r20534);
        mpfr_init(r20535);
        mpfr_init(r20536);
        mpfr_init(r20537);
        mpfr_init(r20538);
        mpfr_init(r20539);
        mpfr_init(r20540);
        mpfr_init(r20541);
        mpfr_init(r20542);
        mpfr_init(r20543);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r20525, x_re, MPFR_RNDN);
        mpfr_mul(r20526, r20525, r20525, MPFR_RNDN);
        mpfr_set_d(r20527, x_im, MPFR_RNDN);
        mpfr_mul(r20528, r20527, r20527, MPFR_RNDN);
        mpfr_add(r20529, r20526, r20528, MPFR_RNDN);
        mpfr_sqrt(r20530, r20529, MPFR_RNDN);
        mpfr_log(r20531, r20530, MPFR_RNDN);
        mpfr_set_d(r20532, y_re, MPFR_RNDN);
        mpfr_mul(r20533, r20531, r20532, MPFR_RNDN);
        mpfr_atan2(r20534, r20527, r20525, MPFR_RNDN);
        mpfr_set_d(r20535, y_im, MPFR_RNDN);
        mpfr_mul(r20536, r20534, r20535, MPFR_RNDN);
        mpfr_sub(r20537, r20533, r20536, MPFR_RNDN);
        mpfr_exp(r20538, r20537, MPFR_RNDN);
        mpfr_mul(r20539, r20531, r20535, MPFR_RNDN);
        mpfr_mul(r20540, r20534, r20532, MPFR_RNDN);
        mpfr_add(r20541, r20539, r20540, MPFR_RNDN);
        mpfr_cos(r20542, r20541, MPFR_RNDN);
        mpfr_mul(r20543, r20538, r20542, MPFR_RNDN);
        return mpfr_get_d(r20543, MPFR_RNDN);
}

static mpfr_t r20544, r20545, r20546, r20547, r20548, r20549, r20550, r20551, r20552, r20553, r20554, r20555, r20556, r20557, r20558, r20559, r20560, r20561, r20562, r20563, r20564, r20565, r20566, r20567, r20568, r20569, r20570, r20571, r20572, r20573, r20574, r20575, r20576, r20577, r20578, r20579, r20580;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r20544);
        mpfr_init(r20545);
        mpfr_init(r20546);
        mpfr_init(r20547);
        mpfr_init(r20548);
        mpfr_init(r20549);
        mpfr_init(r20550);
        mpfr_init(r20551);
        mpfr_init(r20552);
        mpfr_init(r20553);
        mpfr_init(r20554);
        mpfr_init_set_str(r20555, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r20556, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r20557, "2", 10, MPFR_RNDN);
        mpfr_init(r20558);
        mpfr_init(r20559);
        mpfr_init(r20560);
        mpfr_init(r20561);
        mpfr_init(r20562);
        mpfr_init(r20563);
        mpfr_init(r20564);
        mpfr_init(r20565);
        mpfr_init(r20566);
        mpfr_init_set_str(r20567, "-3.0656959711371403e-308", 10, MPFR_RNDN);
        mpfr_init(r20568);
        mpfr_init(r20569);
        mpfr_init(r20570);
        mpfr_init(r20571);
        mpfr_init(r20572);
        mpfr_init(r20573);
        mpfr_init(r20574);
        mpfr_init(r20575);
        mpfr_init(r20576);
        mpfr_init_set_str(r20577, "0.0", 10, MPFR_RNDN);
        mpfr_init(r20578);
        mpfr_init(r20579);
        mpfr_init(r20580);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r20544, x_im, MPFR_RNDN);
        mpfr_set_d(r20545, x_re, MPFR_RNDN);
        mpfr_hypot(r20546, r20544, r20545, MPFR_RNDN);
        mpfr_log(r20547, r20546, MPFR_RNDN);
        mpfr_set_d(r20548, y_im, MPFR_RNDN);
        mpfr_atan2(r20549, r20544, r20545, MPFR_RNDN);
        mpfr_set_d(r20550, y_re, MPFR_RNDN);
        mpfr_mul(r20551, r20549, r20550, MPFR_RNDN);
        mpfr_fma(r20552, r20547, r20548, r20551, MPFR_RNDN);
        mpfr_cos(r20553, r20552, MPFR_RNDN);
        mpfr_mul(r20554, r20549, r20548, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r20558, r20549, r20557, MPFR_RNDN);
        mpfr_pow(r20559, r20548, r20557, MPFR_RNDN);
        mpfr_mul(r20560, r20558, r20559, MPFR_RNDN);
        mpfr_mul(r20561, r20556, r20560, MPFR_RNDN);
        mpfr_add(r20562, r20555, r20561, MPFR_RNDN);
        mpfr_add(r20563, r20554, r20562, MPFR_RNDN);
        mpfr_pow(r20564, r20546, r20550, MPFR_RNDN);
        mpfr_div(r20565, r20563, r20564, MPFR_RNDN);
        mpfr_div(r20566, r20553, r20565, MPFR_RNDN);
        ;
        mpfr_set_si(r20568, mpfr_cmp(r20566, r20567) <= 0, MPFR_RNDN);
        mpfr_cbrt(r20569, r20552, MPFR_RNDN);
        mpfr_mul(r20570, r20569, r20569, MPFR_RNDN);
        mpfr_mul(r20571, r20570, r20569, MPFR_RNDN);
        mpfr_cos(r20572, r20571, MPFR_RNDN);
        mpfr_mul(r20573, r20548, r20549, MPFR_RNDN);
        mpfr_exp(r20574, r20573, MPFR_RNDN);
        mpfr_div(r20575, r20574, r20564, MPFR_RNDN);
        mpfr_div(r20576, r20572, r20575, MPFR_RNDN);
        ;
        mpfr_set_si(r20578, mpfr_cmp(r20566, r20577) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r20578, MPFR_RNDN)) { mpfr_set(r20579, r20566, MPFR_RNDN); } else { mpfr_set(r20579, r20576, MPFR_RNDN); };
        if (mpfr_get_si(r20568, MPFR_RNDN)) { mpfr_set(r20580, r20576, MPFR_RNDN); } else { mpfr_set(r20580, r20579, MPFR_RNDN); };
        return mpfr_get_d(r20580, MPFR_RNDN);
}

static mpfr_t r20581, r20582, r20583, r20584, r20585, r20586, r20587, r20588, r20589, r20590, r20591, r20592, r20593, r20594, r20595, r20596, r20597, r20598, r20599, r20600, r20601, r20602, r20603, r20604, r20605, r20606, r20607, r20608, r20609, r20610, r20611, r20612, r20613, r20614, r20615, r20616, r20617;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r20581);
        mpfr_init(r20582);
        mpfr_init(r20583);
        mpfr_init(r20584);
        mpfr_init(r20585);
        mpfr_init(r20586);
        mpfr_init(r20587);
        mpfr_init(r20588);
        mpfr_init(r20589);
        mpfr_init(r20590);
        mpfr_init(r20591);
        mpfr_init_set_str(r20592, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r20593, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r20594, "2", 10, MPFR_RNDN);
        mpfr_init(r20595);
        mpfr_init(r20596);
        mpfr_init(r20597);
        mpfr_init(r20598);
        mpfr_init(r20599);
        mpfr_init(r20600);
        mpfr_init(r20601);
        mpfr_init(r20602);
        mpfr_init(r20603);
        mpfr_init_set_str(r20604, "-3.0656959711371403e-308", 10, MPFR_RNDN);
        mpfr_init(r20605);
        mpfr_init(r20606);
        mpfr_init(r20607);
        mpfr_init(r20608);
        mpfr_init(r20609);
        mpfr_init(r20610);
        mpfr_init(r20611);
        mpfr_init(r20612);
        mpfr_init(r20613);
        mpfr_init_set_str(r20614, "0.0", 10, MPFR_RNDN);
        mpfr_init(r20615);
        mpfr_init(r20616);
        mpfr_init(r20617);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r20581, x_im, MPFR_RNDN);
        mpfr_set_d(r20582, x_re, MPFR_RNDN);
        mpfr_hypot(r20583, r20581, r20582, MPFR_RNDN);
        mpfr_log(r20584, r20583, MPFR_RNDN);
        mpfr_set_d(r20585, y_im, MPFR_RNDN);
        mpfr_atan2(r20586, r20581, r20582, MPFR_RNDN);
        mpfr_set_d(r20587, y_re, MPFR_RNDN);
        mpfr_mul(r20588, r20586, r20587, MPFR_RNDN);
        mpfr_fma(r20589, r20584, r20585, r20588, MPFR_RNDN);
        mpfr_cos(r20590, r20589, MPFR_RNDN);
        mpfr_mul(r20591, r20586, r20585, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r20595, r20586, r20594, MPFR_RNDN);
        mpfr_pow(r20596, r20585, r20594, MPFR_RNDN);
        mpfr_mul(r20597, r20595, r20596, MPFR_RNDN);
        mpfr_mul(r20598, r20593, r20597, MPFR_RNDN);
        mpfr_add(r20599, r20592, r20598, MPFR_RNDN);
        mpfr_add(r20600, r20591, r20599, MPFR_RNDN);
        mpfr_pow(r20601, r20583, r20587, MPFR_RNDN);
        mpfr_div(r20602, r20600, r20601, MPFR_RNDN);
        mpfr_div(r20603, r20590, r20602, MPFR_RNDN);
        ;
        mpfr_set_si(r20605, mpfr_cmp(r20603, r20604) <= 0, MPFR_RNDN);
        mpfr_cbrt(r20606, r20589, MPFR_RNDN);
        mpfr_mul(r20607, r20606, r20606, MPFR_RNDN);
        mpfr_mul(r20608, r20607, r20606, MPFR_RNDN);
        mpfr_cos(r20609, r20608, MPFR_RNDN);
        mpfr_mul(r20610, r20585, r20586, MPFR_RNDN);
        mpfr_exp(r20611, r20610, MPFR_RNDN);
        mpfr_div(r20612, r20611, r20601, MPFR_RNDN);
        mpfr_div(r20613, r20609, r20612, MPFR_RNDN);
        ;
        mpfr_set_si(r20615, mpfr_cmp(r20603, r20614) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r20615, MPFR_RNDN)) { mpfr_set(r20616, r20603, MPFR_RNDN); } else { mpfr_set(r20616, r20613, MPFR_RNDN); };
        if (mpfr_get_si(r20605, MPFR_RNDN)) { mpfr_set(r20617, r20613, MPFR_RNDN); } else { mpfr_set(r20617, r20616, MPFR_RNDN); };
        return mpfr_get_d(r20617, MPFR_RNDN);
}

