#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 r8006 = x_re;
        float r8007 = r8006 * r8006;
        float r8008 = x_im;
        float r8009 = r8008 * r8008;
        float r8010 = r8007 + r8009;
        float r8011 = sqrt(r8010);
        float r8012 = log(r8011);
        float r8013 = y_re;
        float r8014 = r8012 * r8013;
        float r8015 = atan2(r8008, r8006);
        float r8016 = y_im;
        float r8017 = r8015 * r8016;
        float r8018 = r8014 - r8017;
        float r8019 = exp(r8018);
        float r8020 = r8012 * r8016;
        float r8021 = r8015 * r8013;
        float r8022 = r8020 + r8021;
        float r8023 = cos(r8022);
        float r8024 = r8019 * r8023;
        return r8024;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r8025 = x_re;
        double r8026 = r8025 * r8025;
        double r8027 = x_im;
        double r8028 = r8027 * r8027;
        double r8029 = r8026 + r8028;
        double r8030 = sqrt(r8029);
        double r8031 = log(r8030);
        double r8032 = y_re;
        double r8033 = r8031 * r8032;
        double r8034 = atan2(r8027, r8025);
        double r8035 = y_im;
        double r8036 = r8034 * r8035;
        double r8037 = r8033 - r8036;
        double r8038 = exp(r8037);
        double r8039 = r8031 * r8035;
        double r8040 = r8034 * r8032;
        double r8041 = r8039 + r8040;
        double r8042 = cos(r8041);
        double r8043 = r8038 * r8042;
        return r8043;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r8044 = y_im;
        float r8045 = x_re;
        float r8046 = x_im;
        float r8047 = hypot(r8045, r8046);
        float r8048 = log(r8047);
        float r8049 = y_re;
        float r8050 = atan2(r8046, r8045);
        float r8051 = r8049 * r8050;
        float r8052 = fma(r8044, r8048, r8051);
        float r8053 = cos(r8052);
        float r8054 = pow(r8047, r8049);
        float r8055 = r8050 * r8044;
        float r8056 = 1/2;
        float r8057 = 2;
        float r8058 = pow(r8050, r8057);
        float r8059 = pow(r8044, r8057);
        float r8060 = r8058 * r8059;
        float r8061 = r8056 * r8060;
        float r8062 = 1;
        float r8063 = r8061 + r8062;
        float r8064 = r8055 + r8063;
        float r8065 = r8054 / r8064;
        float r8066 = r8053 * r8065;
        float r8067 = -6.6319782670508e-310;
        bool r8068 = r8066 <= r8067;
        float r8069 = cbrt(r8053);
        float r8070 = r8069 * r8069;
        float r8071 = r8070 * r8069;
        float r8072 = r8044 * r8050;
        float r8073 = exp(r8072);
        float r8074 = r8054 / r8073;
        float r8075 = r8071 * r8074;
        float r8076 = 3.9402580771062e-310;
        bool r8077 = r8066 <= r8076;
        float r8078 = 1.0000100717102895;
        bool r8079 = r8066 <= r8078;
        float r8080 = cbrt(r8052);
        float r8081 = r8080 * r8080;
        float r8082 = r8081 * r8080;
        float r8083 = cos(r8082);
        float r8084 = r8083 * r8074;
        float r8085 = r8045 * r8045;
        float r8086 = r8046 * r8046;
        float r8087 = r8085 + r8086;
        float r8088 = sqrt(r8087);
        float r8089 = log(r8088);
        float r8090 = r8089 * r8049;
        float r8091 = r8090 - r8055;
        float r8092 = exp(r8091);
        float r8093 = r8089 * r8044;
        float r8094 = r8050 * r8049;
        float r8095 = r8093 + r8094;
        float r8096 = cos(r8095);
        float r8097 = r8092 * r8096;
        float r8098 = r8079 ? r8084 : r8097;
        float r8099 = r8077 ? r8066 : r8098;
        float r8100 = r8068 ? r8075 : r8099;
        return r8100;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r8101 = y_im;
        double r8102 = x_re;
        double r8103 = x_im;
        double r8104 = hypot(r8102, r8103);
        double r8105 = log(r8104);
        double r8106 = y_re;
        double r8107 = atan2(r8103, r8102);
        double r8108 = r8106 * r8107;
        double r8109 = fma(r8101, r8105, r8108);
        double r8110 = cos(r8109);
        double r8111 = pow(r8104, r8106);
        double r8112 = r8107 * r8101;
        double r8113 = 1/2;
        double r8114 = 2;
        double r8115 = pow(r8107, r8114);
        double r8116 = pow(r8101, r8114);
        double r8117 = r8115 * r8116;
        double r8118 = r8113 * r8117;
        double r8119 = 1;
        double r8120 = r8118 + r8119;
        double r8121 = r8112 + r8120;
        double r8122 = r8111 / r8121;
        double r8123 = r8110 * r8122;
        double r8124 = -6.6319782670508e-310;
        bool r8125 = r8123 <= r8124;
        double r8126 = cbrt(r8110);
        double r8127 = r8126 * r8126;
        double r8128 = r8127 * r8126;
        double r8129 = r8101 * r8107;
        double r8130 = exp(r8129);
        double r8131 = r8111 / r8130;
        double r8132 = r8128 * r8131;
        double r8133 = 3.9402580771062e-310;
        bool r8134 = r8123 <= r8133;
        double r8135 = 1.0000100717102895;
        bool r8136 = r8123 <= r8135;
        double r8137 = cbrt(r8109);
        double r8138 = r8137 * r8137;
        double r8139 = r8138 * r8137;
        double r8140 = cos(r8139);
        double r8141 = r8140 * r8131;
        double r8142 = r8102 * r8102;
        double r8143 = r8103 * r8103;
        double r8144 = r8142 + r8143;
        double r8145 = sqrt(r8144);
        double r8146 = log(r8145);
        double r8147 = r8146 * r8106;
        double r8148 = r8147 - r8112;
        double r8149 = exp(r8148);
        double r8150 = r8146 * r8101;
        double r8151 = r8107 * r8106;
        double r8152 = r8150 + r8151;
        double r8153 = cos(r8152);
        double r8154 = r8149 * r8153;
        double r8155 = r8136 ? r8141 : r8154;
        double r8156 = r8134 ? r8123 : r8155;
        double r8157 = r8125 ? r8132 : r8156;
        return r8157;
}

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 r8158, r8159, r8160, r8161, r8162, r8163, r8164, r8165, r8166, r8167, r8168, r8169, r8170, r8171, r8172, r8173, r8174, r8175, r8176;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8158);
        mpfr_init(r8159);
        mpfr_init(r8160);
        mpfr_init(r8161);
        mpfr_init(r8162);
        mpfr_init(r8163);
        mpfr_init(r8164);
        mpfr_init(r8165);
        mpfr_init(r8166);
        mpfr_init(r8167);
        mpfr_init(r8168);
        mpfr_init(r8169);
        mpfr_init(r8170);
        mpfr_init(r8171);
        mpfr_init(r8172);
        mpfr_init(r8173);
        mpfr_init(r8174);
        mpfr_init(r8175);
        mpfr_init(r8176);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r8158, x_re, MPFR_RNDN);
        mpfr_mul(r8159, r8158, r8158, MPFR_RNDN);
        mpfr_set_d(r8160, x_im, MPFR_RNDN);
        mpfr_mul(r8161, r8160, r8160, MPFR_RNDN);
        mpfr_add(r8162, r8159, r8161, MPFR_RNDN);
        mpfr_sqrt(r8163, r8162, MPFR_RNDN);
        mpfr_log(r8164, r8163, MPFR_RNDN);
        mpfr_set_d(r8165, y_re, MPFR_RNDN);
        mpfr_mul(r8166, r8164, r8165, MPFR_RNDN);
        mpfr_atan2(r8167, r8160, r8158, MPFR_RNDN);
        mpfr_set_d(r8168, y_im, MPFR_RNDN);
        mpfr_mul(r8169, r8167, r8168, MPFR_RNDN);
        mpfr_sub(r8170, r8166, r8169, MPFR_RNDN);
        mpfr_exp(r8171, r8170, MPFR_RNDN);
        mpfr_mul(r8172, r8164, r8168, MPFR_RNDN);
        mpfr_mul(r8173, r8167, r8165, MPFR_RNDN);
        mpfr_add(r8174, r8172, r8173, MPFR_RNDN);
        mpfr_cos(r8175, r8174, MPFR_RNDN);
        mpfr_mul(r8176, r8171, r8175, MPFR_RNDN);
        return mpfr_get_d(r8176, MPFR_RNDN);
}

static mpfr_t r8177, r8178, r8179, r8180, r8181, r8182, r8183, r8184, r8185, r8186, r8187, r8188, r8189, r8190, r8191, r8192, r8193, r8194, r8195, r8196, r8197, r8198, r8199, r8200, r8201, r8202, r8203, r8204, r8205, r8206, r8207, r8208, r8209, r8210, r8211, r8212, r8213, r8214, r8215, r8216, r8217, r8218, r8219, r8220, r8221, r8222, r8223, r8224, r8225, r8226, r8227, r8228, r8229, r8230, r8231, r8232, r8233;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8177);
        mpfr_init(r8178);
        mpfr_init(r8179);
        mpfr_init(r8180);
        mpfr_init(r8181);
        mpfr_init(r8182);
        mpfr_init(r8183);
        mpfr_init(r8184);
        mpfr_init(r8185);
        mpfr_init(r8186);
        mpfr_init(r8187);
        mpfr_init(r8188);
        mpfr_init_set_str(r8189, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8190, "2", 10, MPFR_RNDN);
        mpfr_init(r8191);
        mpfr_init(r8192);
        mpfr_init(r8193);
        mpfr_init(r8194);
        mpfr_init_set_str(r8195, "1", 10, MPFR_RNDN);
        mpfr_init(r8196);
        mpfr_init(r8197);
        mpfr_init(r8198);
        mpfr_init(r8199);
        mpfr_init_set_str(r8200, "-6.6319782670508e-310", 10, MPFR_RNDN);
        mpfr_init(r8201);
        mpfr_init(r8202);
        mpfr_init(r8203);
        mpfr_init(r8204);
        mpfr_init(r8205);
        mpfr_init(r8206);
        mpfr_init(r8207);
        mpfr_init(r8208);
        mpfr_init_set_str(r8209, "3.9402580771062e-310", 10, MPFR_RNDN);
        mpfr_init(r8210);
        mpfr_init_set_str(r8211, "1.0000100717102895", 10, MPFR_RNDN);
        mpfr_init(r8212);
        mpfr_init(r8213);
        mpfr_init(r8214);
        mpfr_init(r8215);
        mpfr_init(r8216);
        mpfr_init(r8217);
        mpfr_init(r8218);
        mpfr_init(r8219);
        mpfr_init(r8220);
        mpfr_init(r8221);
        mpfr_init(r8222);
        mpfr_init(r8223);
        mpfr_init(r8224);
        mpfr_init(r8225);
        mpfr_init(r8226);
        mpfr_init(r8227);
        mpfr_init(r8228);
        mpfr_init(r8229);
        mpfr_init(r8230);
        mpfr_init(r8231);
        mpfr_init(r8232);
        mpfr_init(r8233);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r8177, y_im, MPFR_RNDN);
        mpfr_set_d(r8178, x_re, MPFR_RNDN);
        mpfr_set_d(r8179, x_im, MPFR_RNDN);
        mpfr_hypot(r8180, r8178, r8179, MPFR_RNDN);
        mpfr_log(r8181, r8180, MPFR_RNDN);
        mpfr_set_d(r8182, y_re, MPFR_RNDN);
        mpfr_atan2(r8183, r8179, r8178, MPFR_RNDN);
        mpfr_mul(r8184, r8182, r8183, MPFR_RNDN);
        mpfr_fma(r8185, r8177, r8181, r8184, MPFR_RNDN);
        mpfr_cos(r8186, r8185, MPFR_RNDN);
        mpfr_pow(r8187, r8180, r8182, MPFR_RNDN);
        mpfr_mul(r8188, r8183, r8177, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8191, r8183, r8190, MPFR_RNDN);
        mpfr_pow(r8192, r8177, r8190, MPFR_RNDN);
        mpfr_mul(r8193, r8191, r8192, MPFR_RNDN);
        mpfr_mul(r8194, r8189, r8193, MPFR_RNDN);
        ;
        mpfr_add(r8196, r8194, r8195, MPFR_RNDN);
        mpfr_add(r8197, r8188, r8196, MPFR_RNDN);
        mpfr_div(r8198, r8187, r8197, MPFR_RNDN);
        mpfr_mul(r8199, r8186, r8198, MPFR_RNDN);
        ;
        mpfr_set_si(r8201, mpfr_cmp(r8199, r8200) <= 0, MPFR_RNDN);
        mpfr_cbrt(r8202, r8186, MPFR_RNDN);
        mpfr_mul(r8203, r8202, r8202, MPFR_RNDN);
        mpfr_mul(r8204, r8203, r8202, MPFR_RNDN);
        mpfr_mul(r8205, r8177, r8183, MPFR_RNDN);
        mpfr_exp(r8206, r8205, MPFR_RNDN);
        mpfr_div(r8207, r8187, r8206, MPFR_RNDN);
        mpfr_mul(r8208, r8204, r8207, MPFR_RNDN);
        ;
        mpfr_set_si(r8210, mpfr_cmp(r8199, r8209) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r8212, mpfr_cmp(r8199, r8211) <= 0, MPFR_RNDN);
        mpfr_cbrt(r8213, r8185, MPFR_RNDN);
        mpfr_mul(r8214, r8213, r8213, MPFR_RNDN);
        mpfr_mul(r8215, r8214, r8213, MPFR_RNDN);
        mpfr_cos(r8216, r8215, MPFR_RNDN);
        mpfr_mul(r8217, r8216, r8207, MPFR_RNDN);
        mpfr_mul(r8218, r8178, r8178, MPFR_RNDN);
        mpfr_mul(r8219, r8179, r8179, MPFR_RNDN);
        mpfr_add(r8220, r8218, r8219, MPFR_RNDN);
        mpfr_sqrt(r8221, r8220, MPFR_RNDN);
        mpfr_log(r8222, r8221, MPFR_RNDN);
        mpfr_mul(r8223, r8222, r8182, MPFR_RNDN);
        mpfr_sub(r8224, r8223, r8188, MPFR_RNDN);
        mpfr_exp(r8225, r8224, MPFR_RNDN);
        mpfr_mul(r8226, r8222, r8177, MPFR_RNDN);
        mpfr_mul(r8227, r8183, r8182, MPFR_RNDN);
        mpfr_add(r8228, r8226, r8227, MPFR_RNDN);
        mpfr_cos(r8229, r8228, MPFR_RNDN);
        mpfr_mul(r8230, r8225, r8229, MPFR_RNDN);
        if (mpfr_get_si(r8212, MPFR_RNDN)) { mpfr_set(r8231, r8217, MPFR_RNDN); } else { mpfr_set(r8231, r8230, MPFR_RNDN); };
        if (mpfr_get_si(r8210, MPFR_RNDN)) { mpfr_set(r8232, r8199, MPFR_RNDN); } else { mpfr_set(r8232, r8231, MPFR_RNDN); };
        if (mpfr_get_si(r8201, MPFR_RNDN)) { mpfr_set(r8233, r8208, MPFR_RNDN); } else { mpfr_set(r8233, r8232, MPFR_RNDN); };
        return mpfr_get_d(r8233, MPFR_RNDN);
}

static mpfr_t r8234, r8235, r8236, r8237, r8238, r8239, r8240, r8241, r8242, r8243, r8244, r8245, r8246, r8247, r8248, r8249, r8250, r8251, r8252, r8253, r8254, r8255, r8256, r8257, r8258, r8259, r8260, r8261, r8262, r8263, r8264, r8265, r8266, r8267, r8268, r8269, r8270, r8271, r8272, r8273, r8274, r8275, r8276, r8277, r8278, r8279, r8280, r8281, r8282, r8283, r8284, r8285, r8286, r8287, r8288, r8289, r8290;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8234);
        mpfr_init(r8235);
        mpfr_init(r8236);
        mpfr_init(r8237);
        mpfr_init(r8238);
        mpfr_init(r8239);
        mpfr_init(r8240);
        mpfr_init(r8241);
        mpfr_init(r8242);
        mpfr_init(r8243);
        mpfr_init(r8244);
        mpfr_init(r8245);
        mpfr_init_set_str(r8246, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8247, "2", 10, MPFR_RNDN);
        mpfr_init(r8248);
        mpfr_init(r8249);
        mpfr_init(r8250);
        mpfr_init(r8251);
        mpfr_init_set_str(r8252, "1", 10, MPFR_RNDN);
        mpfr_init(r8253);
        mpfr_init(r8254);
        mpfr_init(r8255);
        mpfr_init(r8256);
        mpfr_init_set_str(r8257, "-6.6319782670508e-310", 10, MPFR_RNDN);
        mpfr_init(r8258);
        mpfr_init(r8259);
        mpfr_init(r8260);
        mpfr_init(r8261);
        mpfr_init(r8262);
        mpfr_init(r8263);
        mpfr_init(r8264);
        mpfr_init(r8265);
        mpfr_init_set_str(r8266, "3.9402580771062e-310", 10, MPFR_RNDN);
        mpfr_init(r8267);
        mpfr_init_set_str(r8268, "1.0000100717102895", 10, MPFR_RNDN);
        mpfr_init(r8269);
        mpfr_init(r8270);
        mpfr_init(r8271);
        mpfr_init(r8272);
        mpfr_init(r8273);
        mpfr_init(r8274);
        mpfr_init(r8275);
        mpfr_init(r8276);
        mpfr_init(r8277);
        mpfr_init(r8278);
        mpfr_init(r8279);
        mpfr_init(r8280);
        mpfr_init(r8281);
        mpfr_init(r8282);
        mpfr_init(r8283);
        mpfr_init(r8284);
        mpfr_init(r8285);
        mpfr_init(r8286);
        mpfr_init(r8287);
        mpfr_init(r8288);
        mpfr_init(r8289);
        mpfr_init(r8290);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r8234, y_im, MPFR_RNDN);
        mpfr_set_d(r8235, x_re, MPFR_RNDN);
        mpfr_set_d(r8236, x_im, MPFR_RNDN);
        mpfr_hypot(r8237, r8235, r8236, MPFR_RNDN);
        mpfr_log(r8238, r8237, MPFR_RNDN);
        mpfr_set_d(r8239, y_re, MPFR_RNDN);
        mpfr_atan2(r8240, r8236, r8235, MPFR_RNDN);
        mpfr_mul(r8241, r8239, r8240, MPFR_RNDN);
        mpfr_fma(r8242, r8234, r8238, r8241, MPFR_RNDN);
        mpfr_cos(r8243, r8242, MPFR_RNDN);
        mpfr_pow(r8244, r8237, r8239, MPFR_RNDN);
        mpfr_mul(r8245, r8240, r8234, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8248, r8240, r8247, MPFR_RNDN);
        mpfr_pow(r8249, r8234, r8247, MPFR_RNDN);
        mpfr_mul(r8250, r8248, r8249, MPFR_RNDN);
        mpfr_mul(r8251, r8246, r8250, MPFR_RNDN);
        ;
        mpfr_add(r8253, r8251, r8252, MPFR_RNDN);
        mpfr_add(r8254, r8245, r8253, MPFR_RNDN);
        mpfr_div(r8255, r8244, r8254, MPFR_RNDN);
        mpfr_mul(r8256, r8243, r8255, MPFR_RNDN);
        ;
        mpfr_set_si(r8258, mpfr_cmp(r8256, r8257) <= 0, MPFR_RNDN);
        mpfr_cbrt(r8259, r8243, MPFR_RNDN);
        mpfr_mul(r8260, r8259, r8259, MPFR_RNDN);
        mpfr_mul(r8261, r8260, r8259, MPFR_RNDN);
        mpfr_mul(r8262, r8234, r8240, MPFR_RNDN);
        mpfr_exp(r8263, r8262, MPFR_RNDN);
        mpfr_div(r8264, r8244, r8263, MPFR_RNDN);
        mpfr_mul(r8265, r8261, r8264, MPFR_RNDN);
        ;
        mpfr_set_si(r8267, mpfr_cmp(r8256, r8266) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r8269, mpfr_cmp(r8256, r8268) <= 0, MPFR_RNDN);
        mpfr_cbrt(r8270, r8242, MPFR_RNDN);
        mpfr_mul(r8271, r8270, r8270, MPFR_RNDN);
        mpfr_mul(r8272, r8271, r8270, MPFR_RNDN);
        mpfr_cos(r8273, r8272, MPFR_RNDN);
        mpfr_mul(r8274, r8273, r8264, MPFR_RNDN);
        mpfr_mul(r8275, r8235, r8235, MPFR_RNDN);
        mpfr_mul(r8276, r8236, r8236, MPFR_RNDN);
        mpfr_add(r8277, r8275, r8276, MPFR_RNDN);
        mpfr_sqrt(r8278, r8277, MPFR_RNDN);
        mpfr_log(r8279, r8278, MPFR_RNDN);
        mpfr_mul(r8280, r8279, r8239, MPFR_RNDN);
        mpfr_sub(r8281, r8280, r8245, MPFR_RNDN);
        mpfr_exp(r8282, r8281, MPFR_RNDN);
        mpfr_mul(r8283, r8279, r8234, MPFR_RNDN);
        mpfr_mul(r8284, r8240, r8239, MPFR_RNDN);
        mpfr_add(r8285, r8283, r8284, MPFR_RNDN);
        mpfr_cos(r8286, r8285, MPFR_RNDN);
        mpfr_mul(r8287, r8282, r8286, MPFR_RNDN);
        if (mpfr_get_si(r8269, MPFR_RNDN)) { mpfr_set(r8288, r8274, MPFR_RNDN); } else { mpfr_set(r8288, r8287, MPFR_RNDN); };
        if (mpfr_get_si(r8267, MPFR_RNDN)) { mpfr_set(r8289, r8256, MPFR_RNDN); } else { mpfr_set(r8289, r8288, MPFR_RNDN); };
        if (mpfr_get_si(r8258, MPFR_RNDN)) { mpfr_set(r8290, r8265, MPFR_RNDN); } else { mpfr_set(r8290, r8289, MPFR_RNDN); };
        return mpfr_get_d(r8290, MPFR_RNDN);
}

