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

char *name = "powComplex, imaginary part";

double f_if(float x_re, float x_im, float y_re, float y_im) {
        float r8291 = x_re;
        float r8292 = r8291 * r8291;
        float r8293 = x_im;
        float r8294 = r8293 * r8293;
        float r8295 = r8292 + r8294;
        float r8296 = sqrt(r8295);
        float r8297 = log(r8296);
        float r8298 = y_re;
        float r8299 = r8297 * r8298;
        float r8300 = atan2(r8293, r8291);
        float r8301 = y_im;
        float r8302 = r8300 * r8301;
        float r8303 = r8299 - r8302;
        float r8304 = exp(r8303);
        float r8305 = r8297 * r8301;
        float r8306 = r8300 * r8298;
        float r8307 = r8305 + r8306;
        float r8308 = sin(r8307);
        float r8309 = r8304 * r8308;
        return r8309;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r8310 = x_re;
        double r8311 = r8310 * r8310;
        double r8312 = x_im;
        double r8313 = r8312 * r8312;
        double r8314 = r8311 + r8313;
        double r8315 = sqrt(r8314);
        double r8316 = log(r8315);
        double r8317 = y_re;
        double r8318 = r8316 * r8317;
        double r8319 = atan2(r8312, r8310);
        double r8320 = y_im;
        double r8321 = r8319 * r8320;
        double r8322 = r8318 - r8321;
        double r8323 = exp(r8322);
        double r8324 = r8316 * r8320;
        double r8325 = r8319 * r8317;
        double r8326 = r8324 + r8325;
        double r8327 = sin(r8326);
        double r8328 = r8323 * r8327;
        return r8328;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r8329 = y_im;
        float r8330 = x_re;
        float r8331 = x_im;
        float r8332 = hypot(r8330, r8331);
        float r8333 = log(r8332);
        float r8334 = y_re;
        float r8335 = atan2(r8331, r8330);
        float r8336 = r8334 * r8335;
        float r8337 = fma(r8329, r8333, r8336);
        float r8338 = sin(r8337);
        float r8339 = pow(r8332, r8334);
        float r8340 = r8335 * r8329;
        float r8341 = 1/2;
        float r8342 = 2;
        float r8343 = pow(r8335, r8342);
        float r8344 = pow(r8329, r8342);
        float r8345 = r8343 * r8344;
        float r8346 = r8341 * r8345;
        float r8347 = 1;
        float r8348 = r8346 + r8347;
        float r8349 = r8340 + r8348;
        float r8350 = r8339 / r8349;
        float r8351 = r8338 * r8350;
        float r8352 = -3.7995546046766e-310;
        bool r8353 = r8351 <= r8352;
        float r8354 = exp(r8329);
        float r8355 = cbrt(r8354);
        float r8356 = r8355 * r8355;
        float r8357 = pow(r8356, r8335);
        float r8358 = log1p(r8357);
        float r8359 = expm1(r8358);
        float r8360 = pow(r8355, r8335);
        float r8361 = log1p(r8360);
        float r8362 = expm1(r8361);
        float r8363 = r8359 * r8362;
        float r8364 = r8339 / r8363;
        float r8365 = r8338 * r8364;
        float r8366 = 5.04453420843053e-310;
        bool r8367 = r8351 <= r8366;
        float r8368 = 1.783646651545512e+308;
        bool r8369 = r8351 <= r8368;
        float r8370 = r8330 * r8330;
        float r8371 = r8331 * r8331;
        float r8372 = r8370 + r8371;
        float r8373 = sqrt(r8372);
        float r8374 = log(r8373);
        float r8375 = r8374 * r8334;
        float r8376 = r8375 - r8340;
        float r8377 = exp(r8376);
        float r8378 = r8374 * r8329;
        float r8379 = r8335 * r8334;
        float r8380 = r8378 + r8379;
        float r8381 = sin(r8380);
        float r8382 = r8377 * r8381;
        float r8383 = r8369 ? r8365 : r8382;
        float r8384 = r8367 ? r8351 : r8383;
        float r8385 = r8353 ? r8365 : r8384;
        return r8385;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r8386 = y_im;
        double r8387 = x_re;
        double r8388 = x_im;
        double r8389 = hypot(r8387, r8388);
        double r8390 = log(r8389);
        double r8391 = y_re;
        double r8392 = atan2(r8388, r8387);
        double r8393 = r8391 * r8392;
        double r8394 = fma(r8386, r8390, r8393);
        double r8395 = sin(r8394);
        double r8396 = pow(r8389, r8391);
        double r8397 = r8392 * r8386;
        double r8398 = 1/2;
        double r8399 = 2;
        double r8400 = pow(r8392, r8399);
        double r8401 = pow(r8386, r8399);
        double r8402 = r8400 * r8401;
        double r8403 = r8398 * r8402;
        double r8404 = 1;
        double r8405 = r8403 + r8404;
        double r8406 = r8397 + r8405;
        double r8407 = r8396 / r8406;
        double r8408 = r8395 * r8407;
        double r8409 = -3.7995546046766e-310;
        bool r8410 = r8408 <= r8409;
        double r8411 = exp(r8386);
        double r8412 = cbrt(r8411);
        double r8413 = r8412 * r8412;
        double r8414 = pow(r8413, r8392);
        double r8415 = log1p(r8414);
        double r8416 = expm1(r8415);
        double r8417 = pow(r8412, r8392);
        double r8418 = log1p(r8417);
        double r8419 = expm1(r8418);
        double r8420 = r8416 * r8419;
        double r8421 = r8396 / r8420;
        double r8422 = r8395 * r8421;
        double r8423 = 5.04453420843053e-310;
        bool r8424 = r8408 <= r8423;
        double r8425 = 1.783646651545512e+308;
        bool r8426 = r8408 <= r8425;
        double r8427 = r8387 * r8387;
        double r8428 = r8388 * r8388;
        double r8429 = r8427 + r8428;
        double r8430 = sqrt(r8429);
        double r8431 = log(r8430);
        double r8432 = r8431 * r8391;
        double r8433 = r8432 - r8397;
        double r8434 = exp(r8433);
        double r8435 = r8431 * r8386;
        double r8436 = r8392 * r8391;
        double r8437 = r8435 + r8436;
        double r8438 = sin(r8437);
        double r8439 = r8434 * r8438;
        double r8440 = r8426 ? r8422 : r8439;
        double r8441 = r8424 ? r8408 : r8440;
        double r8442 = r8410 ? r8422 : r8441;
        return r8442;
}

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 r8443, r8444, r8445, r8446, r8447, r8448, r8449, r8450, r8451, r8452, r8453, r8454, r8455, r8456, r8457, r8458, r8459, r8460, r8461;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2128);
        mpfr_init(r8443);
        mpfr_init(r8444);
        mpfr_init(r8445);
        mpfr_init(r8446);
        mpfr_init(r8447);
        mpfr_init(r8448);
        mpfr_init(r8449);
        mpfr_init(r8450);
        mpfr_init(r8451);
        mpfr_init(r8452);
        mpfr_init(r8453);
        mpfr_init(r8454);
        mpfr_init(r8455);
        mpfr_init(r8456);
        mpfr_init(r8457);
        mpfr_init(r8458);
        mpfr_init(r8459);
        mpfr_init(r8460);
        mpfr_init(r8461);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r8443, x_re, MPFR_RNDN);
        mpfr_mul(r8444, r8443, r8443, MPFR_RNDN);
        mpfr_set_d(r8445, x_im, MPFR_RNDN);
        mpfr_mul(r8446, r8445, r8445, MPFR_RNDN);
        mpfr_add(r8447, r8444, r8446, MPFR_RNDN);
        mpfr_sqrt(r8448, r8447, MPFR_RNDN);
        mpfr_log(r8449, r8448, MPFR_RNDN);
        mpfr_set_d(r8450, y_re, MPFR_RNDN);
        mpfr_mul(r8451, r8449, r8450, MPFR_RNDN);
        mpfr_atan2(r8452, r8445, r8443, MPFR_RNDN);
        mpfr_set_d(r8453, y_im, MPFR_RNDN);
        mpfr_mul(r8454, r8452, r8453, MPFR_RNDN);
        mpfr_sub(r8455, r8451, r8454, MPFR_RNDN);
        mpfr_exp(r8456, r8455, MPFR_RNDN);
        mpfr_mul(r8457, r8449, r8453, MPFR_RNDN);
        mpfr_mul(r8458, r8452, r8450, MPFR_RNDN);
        mpfr_add(r8459, r8457, r8458, MPFR_RNDN);
        mpfr_sin(r8460, r8459, MPFR_RNDN);
        mpfr_mul(r8461, r8456, r8460, MPFR_RNDN);
        return mpfr_get_d(r8461, MPFR_RNDN);
}

static mpfr_t r8462, r8463, r8464, r8465, r8466, r8467, r8468, r8469, r8470, r8471, r8472, r8473, r8474, r8475, r8476, r8477, r8478, r8479, r8480, r8481, r8482, r8483, r8484, r8485, r8486, r8487, r8488, r8489, r8490, r8491, r8492, r8493, r8494, r8495, r8496, r8497, r8498, r8499, r8500, r8501, r8502, r8503, r8504, r8505, r8506, r8507, r8508, r8509, r8510, r8511, r8512, r8513, r8514, r8515, r8516, r8517, r8518;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2128);
        mpfr_init(r8462);
        mpfr_init(r8463);
        mpfr_init(r8464);
        mpfr_init(r8465);
        mpfr_init(r8466);
        mpfr_init(r8467);
        mpfr_init(r8468);
        mpfr_init(r8469);
        mpfr_init(r8470);
        mpfr_init(r8471);
        mpfr_init(r8472);
        mpfr_init(r8473);
        mpfr_init_set_str(r8474, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8475, "2", 10, MPFR_RNDN);
        mpfr_init(r8476);
        mpfr_init(r8477);
        mpfr_init(r8478);
        mpfr_init(r8479);
        mpfr_init_set_str(r8480, "1", 10, MPFR_RNDN);
        mpfr_init(r8481);
        mpfr_init(r8482);
        mpfr_init(r8483);
        mpfr_init(r8484);
        mpfr_init_set_str(r8485, "-3.7995546046766e-310", 10, MPFR_RNDN);
        mpfr_init(r8486);
        mpfr_init(r8487);
        mpfr_init(r8488);
        mpfr_init(r8489);
        mpfr_init(r8490);
        mpfr_init(r8491);
        mpfr_init(r8492);
        mpfr_init(r8493);
        mpfr_init(r8494);
        mpfr_init(r8495);
        mpfr_init(r8496);
        mpfr_init(r8497);
        mpfr_init(r8498);
        mpfr_init_set_str(r8499, "5.04453420843053e-310", 10, MPFR_RNDN);
        mpfr_init(r8500);
        mpfr_init_set_str(r8501, "1.783646651545512e+308", 10, MPFR_RNDN);
        mpfr_init(r8502);
        mpfr_init(r8503);
        mpfr_init(r8504);
        mpfr_init(r8505);
        mpfr_init(r8506);
        mpfr_init(r8507);
        mpfr_init(r8508);
        mpfr_init(r8509);
        mpfr_init(r8510);
        mpfr_init(r8511);
        mpfr_init(r8512);
        mpfr_init(r8513);
        mpfr_init(r8514);
        mpfr_init(r8515);
        mpfr_init(r8516);
        mpfr_init(r8517);
        mpfr_init(r8518);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r8462, y_im, MPFR_RNDN);
        mpfr_set_d(r8463, x_re, MPFR_RNDN);
        mpfr_set_d(r8464, x_im, MPFR_RNDN);
        mpfr_hypot(r8465, r8463, r8464, MPFR_RNDN);
        mpfr_log(r8466, r8465, MPFR_RNDN);
        mpfr_set_d(r8467, y_re, MPFR_RNDN);
        mpfr_atan2(r8468, r8464, r8463, MPFR_RNDN);
        mpfr_mul(r8469, r8467, r8468, MPFR_RNDN);
        mpfr_fma(r8470, r8462, r8466, r8469, MPFR_RNDN);
        mpfr_sin(r8471, r8470, MPFR_RNDN);
        mpfr_pow(r8472, r8465, r8467, MPFR_RNDN);
        mpfr_mul(r8473, r8468, r8462, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8476, r8468, r8475, MPFR_RNDN);
        mpfr_pow(r8477, r8462, r8475, MPFR_RNDN);
        mpfr_mul(r8478, r8476, r8477, MPFR_RNDN);
        mpfr_mul(r8479, r8474, r8478, MPFR_RNDN);
        ;
        mpfr_add(r8481, r8479, r8480, MPFR_RNDN);
        mpfr_add(r8482, r8473, r8481, MPFR_RNDN);
        mpfr_div(r8483, r8472, r8482, MPFR_RNDN);
        mpfr_mul(r8484, r8471, r8483, MPFR_RNDN);
        ;
        mpfr_set_si(r8486, mpfr_cmp(r8484, r8485) <= 0, MPFR_RNDN);
        mpfr_exp(r8487, r8462, MPFR_RNDN);
        mpfr_cbrt(r8488, r8487, MPFR_RNDN);
        mpfr_mul(r8489, r8488, r8488, MPFR_RNDN);
        mpfr_pow(r8490, r8489, r8468, MPFR_RNDN);
        mpfr_log1p(r8491, r8490, MPFR_RNDN);
        mpfr_expm1(r8492, r8491, MPFR_RNDN);
        mpfr_pow(r8493, r8488, r8468, MPFR_RNDN);
        mpfr_log1p(r8494, r8493, MPFR_RNDN);
        mpfr_expm1(r8495, r8494, MPFR_RNDN);
        mpfr_mul(r8496, r8492, r8495, MPFR_RNDN);
        mpfr_div(r8497, r8472, r8496, MPFR_RNDN);
        mpfr_mul(r8498, r8471, r8497, MPFR_RNDN);
        ;
        mpfr_set_si(r8500, mpfr_cmp(r8484, r8499) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r8502, mpfr_cmp(r8484, r8501) <= 0, MPFR_RNDN);
        mpfr_mul(r8503, r8463, r8463, MPFR_RNDN);
        mpfr_mul(r8504, r8464, r8464, MPFR_RNDN);
        mpfr_add(r8505, r8503, r8504, MPFR_RNDN);
        mpfr_sqrt(r8506, r8505, MPFR_RNDN);
        mpfr_log(r8507, r8506, MPFR_RNDN);
        mpfr_mul(r8508, r8507, r8467, MPFR_RNDN);
        mpfr_sub(r8509, r8508, r8473, MPFR_RNDN);
        mpfr_exp(r8510, r8509, MPFR_RNDN);
        mpfr_mul(r8511, r8507, r8462, MPFR_RNDN);
        mpfr_mul(r8512, r8468, r8467, MPFR_RNDN);
        mpfr_add(r8513, r8511, r8512, MPFR_RNDN);
        mpfr_sin(r8514, r8513, MPFR_RNDN);
        mpfr_mul(r8515, r8510, r8514, MPFR_RNDN);
        if (mpfr_get_si(r8502, MPFR_RNDN)) { mpfr_set(r8516, r8498, MPFR_RNDN); } else { mpfr_set(r8516, r8515, MPFR_RNDN); };
        if (mpfr_get_si(r8500, MPFR_RNDN)) { mpfr_set(r8517, r8484, MPFR_RNDN); } else { mpfr_set(r8517, r8516, MPFR_RNDN); };
        if (mpfr_get_si(r8486, MPFR_RNDN)) { mpfr_set(r8518, r8498, MPFR_RNDN); } else { mpfr_set(r8518, r8517, MPFR_RNDN); };
        return mpfr_get_d(r8518, MPFR_RNDN);
}

static mpfr_t r8519, r8520, r8521, r8522, r8523, r8524, r8525, r8526, r8527, r8528, r8529, r8530, r8531, r8532, r8533, r8534, r8535, r8536, r8537, r8538, r8539, r8540, r8541, r8542, r8543, r8544, r8545, r8546, r8547, r8548, r8549, r8550, r8551, r8552, r8553, r8554, r8555, r8556, r8557, r8558, r8559, r8560, r8561, r8562, r8563, r8564, r8565, r8566, r8567, r8568, r8569, r8570, r8571, r8572, r8573, r8574, r8575;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2128);
        mpfr_init(r8519);
        mpfr_init(r8520);
        mpfr_init(r8521);
        mpfr_init(r8522);
        mpfr_init(r8523);
        mpfr_init(r8524);
        mpfr_init(r8525);
        mpfr_init(r8526);
        mpfr_init(r8527);
        mpfr_init(r8528);
        mpfr_init(r8529);
        mpfr_init(r8530);
        mpfr_init_set_str(r8531, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8532, "2", 10, MPFR_RNDN);
        mpfr_init(r8533);
        mpfr_init(r8534);
        mpfr_init(r8535);
        mpfr_init(r8536);
        mpfr_init_set_str(r8537, "1", 10, MPFR_RNDN);
        mpfr_init(r8538);
        mpfr_init(r8539);
        mpfr_init(r8540);
        mpfr_init(r8541);
        mpfr_init_set_str(r8542, "-3.7995546046766e-310", 10, MPFR_RNDN);
        mpfr_init(r8543);
        mpfr_init(r8544);
        mpfr_init(r8545);
        mpfr_init(r8546);
        mpfr_init(r8547);
        mpfr_init(r8548);
        mpfr_init(r8549);
        mpfr_init(r8550);
        mpfr_init(r8551);
        mpfr_init(r8552);
        mpfr_init(r8553);
        mpfr_init(r8554);
        mpfr_init(r8555);
        mpfr_init_set_str(r8556, "5.04453420843053e-310", 10, MPFR_RNDN);
        mpfr_init(r8557);
        mpfr_init_set_str(r8558, "1.783646651545512e+308", 10, MPFR_RNDN);
        mpfr_init(r8559);
        mpfr_init(r8560);
        mpfr_init(r8561);
        mpfr_init(r8562);
        mpfr_init(r8563);
        mpfr_init(r8564);
        mpfr_init(r8565);
        mpfr_init(r8566);
        mpfr_init(r8567);
        mpfr_init(r8568);
        mpfr_init(r8569);
        mpfr_init(r8570);
        mpfr_init(r8571);
        mpfr_init(r8572);
        mpfr_init(r8573);
        mpfr_init(r8574);
        mpfr_init(r8575);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r8519, y_im, MPFR_RNDN);
        mpfr_set_d(r8520, x_re, MPFR_RNDN);
        mpfr_set_d(r8521, x_im, MPFR_RNDN);
        mpfr_hypot(r8522, r8520, r8521, MPFR_RNDN);
        mpfr_log(r8523, r8522, MPFR_RNDN);
        mpfr_set_d(r8524, y_re, MPFR_RNDN);
        mpfr_atan2(r8525, r8521, r8520, MPFR_RNDN);
        mpfr_mul(r8526, r8524, r8525, MPFR_RNDN);
        mpfr_fma(r8527, r8519, r8523, r8526, MPFR_RNDN);
        mpfr_sin(r8528, r8527, MPFR_RNDN);
        mpfr_pow(r8529, r8522, r8524, MPFR_RNDN);
        mpfr_mul(r8530, r8525, r8519, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8533, r8525, r8532, MPFR_RNDN);
        mpfr_pow(r8534, r8519, r8532, MPFR_RNDN);
        mpfr_mul(r8535, r8533, r8534, MPFR_RNDN);
        mpfr_mul(r8536, r8531, r8535, MPFR_RNDN);
        ;
        mpfr_add(r8538, r8536, r8537, MPFR_RNDN);
        mpfr_add(r8539, r8530, r8538, MPFR_RNDN);
        mpfr_div(r8540, r8529, r8539, MPFR_RNDN);
        mpfr_mul(r8541, r8528, r8540, MPFR_RNDN);
        ;
        mpfr_set_si(r8543, mpfr_cmp(r8541, r8542) <= 0, MPFR_RNDN);
        mpfr_exp(r8544, r8519, MPFR_RNDN);
        mpfr_cbrt(r8545, r8544, MPFR_RNDN);
        mpfr_mul(r8546, r8545, r8545, MPFR_RNDN);
        mpfr_pow(r8547, r8546, r8525, MPFR_RNDN);
        mpfr_log1p(r8548, r8547, MPFR_RNDN);
        mpfr_expm1(r8549, r8548, MPFR_RNDN);
        mpfr_pow(r8550, r8545, r8525, MPFR_RNDN);
        mpfr_log1p(r8551, r8550, MPFR_RNDN);
        mpfr_expm1(r8552, r8551, MPFR_RNDN);
        mpfr_mul(r8553, r8549, r8552, MPFR_RNDN);
        mpfr_div(r8554, r8529, r8553, MPFR_RNDN);
        mpfr_mul(r8555, r8528, r8554, MPFR_RNDN);
        ;
        mpfr_set_si(r8557, mpfr_cmp(r8541, r8556) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r8559, mpfr_cmp(r8541, r8558) <= 0, MPFR_RNDN);
        mpfr_mul(r8560, r8520, r8520, MPFR_RNDN);
        mpfr_mul(r8561, r8521, r8521, MPFR_RNDN);
        mpfr_add(r8562, r8560, r8561, MPFR_RNDN);
        mpfr_sqrt(r8563, r8562, MPFR_RNDN);
        mpfr_log(r8564, r8563, MPFR_RNDN);
        mpfr_mul(r8565, r8564, r8524, MPFR_RNDN);
        mpfr_sub(r8566, r8565, r8530, MPFR_RNDN);
        mpfr_exp(r8567, r8566, MPFR_RNDN);
        mpfr_mul(r8568, r8564, r8519, MPFR_RNDN);
        mpfr_mul(r8569, r8525, r8524, MPFR_RNDN);
        mpfr_add(r8570, r8568, r8569, MPFR_RNDN);
        mpfr_sin(r8571, r8570, MPFR_RNDN);
        mpfr_mul(r8572, r8567, r8571, MPFR_RNDN);
        if (mpfr_get_si(r8559, MPFR_RNDN)) { mpfr_set(r8573, r8555, MPFR_RNDN); } else { mpfr_set(r8573, r8572, MPFR_RNDN); };
        if (mpfr_get_si(r8557, MPFR_RNDN)) { mpfr_set(r8574, r8541, MPFR_RNDN); } else { mpfr_set(r8574, r8573, MPFR_RNDN); };
        if (mpfr_get_si(r8543, MPFR_RNDN)) { mpfr_set(r8575, r8555, MPFR_RNDN); } else { mpfr_set(r8575, r8574, MPFR_RNDN); };
        return mpfr_get_d(r8575, MPFR_RNDN);
}

