#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 r20392 = x_re;
        float r20393 = r20392 * r20392;
        float r20394 = x_im;
        float r20395 = r20394 * r20394;
        float r20396 = r20393 + r20395;
        float r20397 = sqrt(r20396);
        float r20398 = log(r20397);
        float r20399 = y_re;
        float r20400 = r20398 * r20399;
        float r20401 = atan2(r20394, r20392);
        float r20402 = y_im;
        float r20403 = r20401 * r20402;
        float r20404 = r20400 - r20403;
        float r20405 = exp(r20404);
        float r20406 = r20398 * r20402;
        float r20407 = r20401 * r20399;
        float r20408 = r20406 + r20407;
        float r20409 = cos(r20408);
        float r20410 = r20405 * r20409;
        return r20410;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r20411 = x_re;
        double r20412 = r20411 * r20411;
        double r20413 = x_im;
        double r20414 = r20413 * r20413;
        double r20415 = r20412 + r20414;
        double r20416 = sqrt(r20415);
        double r20417 = log(r20416);
        double r20418 = y_re;
        double r20419 = r20417 * r20418;
        double r20420 = atan2(r20413, r20411);
        double r20421 = y_im;
        double r20422 = r20420 * r20421;
        double r20423 = r20419 - r20422;
        double r20424 = exp(r20423);
        double r20425 = r20417 * r20421;
        double r20426 = r20420 * r20418;
        double r20427 = r20425 + r20426;
        double r20428 = cos(r20427);
        double r20429 = r20424 * r20428;
        return r20429;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r20430 = x_im;
        float r20431 = x_re;
        float r20432 = hypot(r20430, r20431);
        float r20433 = log(r20432);
        float r20434 = y_im;
        float r20435 = atan2(r20430, r20431);
        float r20436 = y_re;
        float r20437 = r20435 * r20436;
        float r20438 = fma(r20433, r20434, r20437);
        float r20439 = cos(r20438);
        float r20440 = exp(r20434);
        float r20441 = cbrt(r20440);
        float r20442 = r20441 * r20441;
        float r20443 = pow(r20442, r20435);
        float r20444 = cbrt(r20443);
        float r20445 = r20444 * r20444;
        float r20446 = r20445 * r20444;
        float r20447 = pow(r20441, r20435);
        float r20448 = r20446 * r20447;
        float r20449 = pow(r20432, r20436);
        float r20450 = r20448 / r20449;
        float r20451 = r20439 / r20450;
        float r20452 = -inf.0;
        bool r20453 = r20451 <= r20452;
        float r20454 = 1;
        float r20455 = r20454 / r20430;
        float r20456 = r20454 / r20431;
        float r20457 = atan2(r20455, r20456);
        float r20458 = r20457 / r20434;
        float r20459 = exp(r20458);
        float r20460 = r20459 / r20449;
        float r20461 = r20439 / r20460;
        float r20462 = r20453 ? r20461 : r20451;
        return r20462;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r20463 = x_im;
        double r20464 = x_re;
        double r20465 = hypot(r20463, r20464);
        double r20466 = log(r20465);
        double r20467 = y_im;
        double r20468 = atan2(r20463, r20464);
        double r20469 = y_re;
        double r20470 = r20468 * r20469;
        double r20471 = fma(r20466, r20467, r20470);
        double r20472 = cos(r20471);
        double r20473 = exp(r20467);
        double r20474 = cbrt(r20473);
        double r20475 = r20474 * r20474;
        double r20476 = pow(r20475, r20468);
        double r20477 = cbrt(r20476);
        double r20478 = r20477 * r20477;
        double r20479 = r20478 * r20477;
        double r20480 = pow(r20474, r20468);
        double r20481 = r20479 * r20480;
        double r20482 = pow(r20465, r20469);
        double r20483 = r20481 / r20482;
        double r20484 = r20472 / r20483;
        double r20485 = -inf.0;
        bool r20486 = r20484 <= r20485;
        double r20487 = 1;
        double r20488 = r20487 / r20463;
        double r20489 = r20487 / r20464;
        double r20490 = atan2(r20488, r20489);
        double r20491 = r20490 / r20467;
        double r20492 = exp(r20491);
        double r20493 = r20492 / r20482;
        double r20494 = r20472 / r20493;
        double r20495 = r20486 ? r20494 : r20484;
        return r20495;
}

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 r20496, r20497, r20498, r20499, r20500, r20501, r20502, r20503, r20504, r20505, r20506, r20507, r20508, r20509, r20510, r20511, r20512, r20513, r20514;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r20496);
        mpfr_init(r20497);
        mpfr_init(r20498);
        mpfr_init(r20499);
        mpfr_init(r20500);
        mpfr_init(r20501);
        mpfr_init(r20502);
        mpfr_init(r20503);
        mpfr_init(r20504);
        mpfr_init(r20505);
        mpfr_init(r20506);
        mpfr_init(r20507);
        mpfr_init(r20508);
        mpfr_init(r20509);
        mpfr_init(r20510);
        mpfr_init(r20511);
        mpfr_init(r20512);
        mpfr_init(r20513);
        mpfr_init(r20514);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r20496, x_re, MPFR_RNDN);
        mpfr_mul(r20497, r20496, r20496, MPFR_RNDN);
        mpfr_set_d(r20498, x_im, MPFR_RNDN);
        mpfr_mul(r20499, r20498, r20498, MPFR_RNDN);
        mpfr_add(r20500, r20497, r20499, MPFR_RNDN);
        mpfr_sqrt(r20501, r20500, MPFR_RNDN);
        mpfr_log(r20502, r20501, MPFR_RNDN);
        mpfr_set_d(r20503, y_re, MPFR_RNDN);
        mpfr_mul(r20504, r20502, r20503, MPFR_RNDN);
        mpfr_atan2(r20505, r20498, r20496, MPFR_RNDN);
        mpfr_set_d(r20506, y_im, MPFR_RNDN);
        mpfr_mul(r20507, r20505, r20506, MPFR_RNDN);
        mpfr_sub(r20508, r20504, r20507, MPFR_RNDN);
        mpfr_exp(r20509, r20508, MPFR_RNDN);
        mpfr_mul(r20510, r20502, r20506, MPFR_RNDN);
        mpfr_mul(r20511, r20505, r20503, MPFR_RNDN);
        mpfr_add(r20512, r20510, r20511, MPFR_RNDN);
        mpfr_cos(r20513, r20512, MPFR_RNDN);
        mpfr_mul(r20514, r20509, r20513, MPFR_RNDN);
        return mpfr_get_d(r20514, MPFR_RNDN);
}

static mpfr_t r20515, r20516, r20517, r20518, r20519, r20520, r20521, r20522, r20523, r20524, r20525, r20526, r20527, r20528, r20529, r20530, r20531, r20532, r20533, r20534, r20535, r20536, r20537, r20538, r20539, r20540, r20541, r20542, r20543, r20544, r20545, r20546, r20547;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r20515);
        mpfr_init(r20516);
        mpfr_init(r20517);
        mpfr_init(r20518);
        mpfr_init(r20519);
        mpfr_init(r20520);
        mpfr_init(r20521);
        mpfr_init(r20522);
        mpfr_init(r20523);
        mpfr_init(r20524);
        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_set_str(r20537, "-inf.0", 10, MPFR_RNDN);
        mpfr_init(r20538);
        mpfr_init_set_str(r20539, "1", 10, MPFR_RNDN);
        mpfr_init(r20540);
        mpfr_init(r20541);
        mpfr_init(r20542);
        mpfr_init(r20543);
        mpfr_init(r20544);
        mpfr_init(r20545);
        mpfr_init(r20546);
        mpfr_init(r20547);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r20515, x_im, MPFR_RNDN);
        mpfr_set_d(r20516, x_re, MPFR_RNDN);
        mpfr_hypot(r20517, r20515, r20516, MPFR_RNDN);
        mpfr_log(r20518, r20517, MPFR_RNDN);
        mpfr_set_d(r20519, y_im, MPFR_RNDN);
        mpfr_atan2(r20520, r20515, r20516, MPFR_RNDN);
        mpfr_set_d(r20521, y_re, MPFR_RNDN);
        mpfr_mul(r20522, r20520, r20521, MPFR_RNDN);
        mpfr_fma(r20523, r20518, r20519, r20522, MPFR_RNDN);
        mpfr_cos(r20524, r20523, MPFR_RNDN);
        mpfr_exp(r20525, r20519, MPFR_RNDN);
        mpfr_cbrt(r20526, r20525, MPFR_RNDN);
        mpfr_mul(r20527, r20526, r20526, MPFR_RNDN);
        mpfr_pow(r20528, r20527, r20520, MPFR_RNDN);
        mpfr_cbrt(r20529, r20528, MPFR_RNDN);
        mpfr_mul(r20530, r20529, r20529, MPFR_RNDN);
        mpfr_mul(r20531, r20530, r20529, MPFR_RNDN);
        mpfr_pow(r20532, r20526, r20520, MPFR_RNDN);
        mpfr_mul(r20533, r20531, r20532, MPFR_RNDN);
        mpfr_pow(r20534, r20517, r20521, MPFR_RNDN);
        mpfr_div(r20535, r20533, r20534, MPFR_RNDN);
        mpfr_div(r20536, r20524, r20535, MPFR_RNDN);
        ;
        mpfr_set_si(r20538, mpfr_cmp(r20536, r20537) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r20540, r20539, r20515, MPFR_RNDN);
        mpfr_div(r20541, r20539, r20516, MPFR_RNDN);
        mpfr_atan2(r20542, r20540, r20541, MPFR_RNDN);
        mpfr_div(r20543, r20542, r20519, MPFR_RNDN);
        mpfr_exp(r20544, r20543, MPFR_RNDN);
        mpfr_div(r20545, r20544, r20534, MPFR_RNDN);
        mpfr_div(r20546, r20524, r20545, MPFR_RNDN);
        if (mpfr_get_si(r20538, MPFR_RNDN)) { mpfr_set(r20547, r20546, MPFR_RNDN); } else { mpfr_set(r20547, r20536, MPFR_RNDN); };
        return mpfr_get_d(r20547, MPFR_RNDN);
}

static mpfr_t 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_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r20548);
        mpfr_init(r20549);
        mpfr_init(r20550);
        mpfr_init(r20551);
        mpfr_init(r20552);
        mpfr_init(r20553);
        mpfr_init(r20554);
        mpfr_init(r20555);
        mpfr_init(r20556);
        mpfr_init(r20557);
        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(r20567);
        mpfr_init(r20568);
        mpfr_init(r20569);
        mpfr_init_set_str(r20570, "-inf.0", 10, MPFR_RNDN);
        mpfr_init(r20571);
        mpfr_init_set_str(r20572, "1", 10, MPFR_RNDN);
        mpfr_init(r20573);
        mpfr_init(r20574);
        mpfr_init(r20575);
        mpfr_init(r20576);
        mpfr_init(r20577);
        mpfr_init(r20578);
        mpfr_init(r20579);
        mpfr_init(r20580);
}

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

