#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 r8035 = x_re;
        float r8036 = r8035 * r8035;
        float r8037 = x_im;
        float r8038 = r8037 * r8037;
        float r8039 = r8036 + r8038;
        float r8040 = sqrt(r8039);
        float r8041 = log(r8040);
        float r8042 = y_re;
        float r8043 = r8041 * r8042;
        float r8044 = atan2(r8037, r8035);
        float r8045 = y_im;
        float r8046 = r8044 * r8045;
        float r8047 = r8043 - r8046;
        float r8048 = exp(r8047);
        float r8049 = r8041 * r8045;
        float r8050 = r8044 * r8042;
        float r8051 = r8049 + r8050;
        float r8052 = sin(r8051);
        float r8053 = r8048 * r8052;
        return r8053;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r8054 = x_re;
        double r8055 = r8054 * r8054;
        double r8056 = x_im;
        double r8057 = r8056 * r8056;
        double r8058 = r8055 + r8057;
        double r8059 = sqrt(r8058);
        double r8060 = log(r8059);
        double r8061 = y_re;
        double r8062 = r8060 * r8061;
        double r8063 = atan2(r8056, r8054);
        double r8064 = y_im;
        double r8065 = r8063 * r8064;
        double r8066 = r8062 - r8065;
        double r8067 = exp(r8066);
        double r8068 = r8060 * r8064;
        double r8069 = r8063 * r8061;
        double r8070 = r8068 + r8069;
        double r8071 = sin(r8070);
        double r8072 = r8067 * r8071;
        return r8072;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r8073 = y_im;
        float r8074 = x_re;
        float r8075 = x_im;
        float r8076 = hypot(r8074, r8075);
        float r8077 = log(r8076);
        float r8078 = atan2(r8075, r8074);
        float r8079 = y_re;
        float r8080 = r8078 * r8079;
        float r8081 = fma(r8073, r8077, r8080);
        float r8082 = sin(r8081);
        float r8083 = r8073 * r8078;
        float r8084 = 1/2;
        float r8085 = 2;
        float r8086 = pow(r8073, r8085);
        float r8087 = pow(r8078, r8085);
        float r8088 = r8086 * r8087;
        float r8089 = r8084 * r8088;
        float r8090 = 1;
        float r8091 = r8089 + r8090;
        float r8092 = r8083 + r8091;
        float r8093 = pow(r8076, r8079);
        float r8094 = r8092 / r8093;
        float r8095 = r8082 / r8094;
        float r8096 = -5.2257263440754e-310;
        bool r8097 = r8095 <= r8096;
        float r8098 = expm1(r8082);
        float r8099 = log1p(r8098);
        float r8100 = exp(r8073);
        float r8101 = cbrt(r8078);
        float r8102 = r8101 * r8101;
        float r8103 = pow(r8100, r8102);
        float r8104 = cbrt(r8101);
        float r8105 = r8104 * r8104;
        float r8106 = exp(r8101);
        float r8107 = log(r8106);
        float r8108 = cbrt(r8107);
        float r8109 = r8105 * r8108;
        float r8110 = pow(r8103, r8109);
        float r8111 = r8110 / r8093;
        float r8112 = r8099 / r8111;
        float r8113 = 5.02780022584434e-310;
        bool r8114 = r8095 <= r8113;
        float r8115 = r8114 ? r8095 : r8112;
        float r8116 = r8097 ? r8112 : r8115;
        return r8116;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r8117 = y_im;
        double r8118 = x_re;
        double r8119 = x_im;
        double r8120 = hypot(r8118, r8119);
        double r8121 = log(r8120);
        double r8122 = atan2(r8119, r8118);
        double r8123 = y_re;
        double r8124 = r8122 * r8123;
        double r8125 = fma(r8117, r8121, r8124);
        double r8126 = sin(r8125);
        double r8127 = r8117 * r8122;
        double r8128 = 1/2;
        double r8129 = 2;
        double r8130 = pow(r8117, r8129);
        double r8131 = pow(r8122, r8129);
        double r8132 = r8130 * r8131;
        double r8133 = r8128 * r8132;
        double r8134 = 1;
        double r8135 = r8133 + r8134;
        double r8136 = r8127 + r8135;
        double r8137 = pow(r8120, r8123);
        double r8138 = r8136 / r8137;
        double r8139 = r8126 / r8138;
        double r8140 = -5.2257263440754e-310;
        bool r8141 = r8139 <= r8140;
        double r8142 = expm1(r8126);
        double r8143 = log1p(r8142);
        double r8144 = exp(r8117);
        double r8145 = cbrt(r8122);
        double r8146 = r8145 * r8145;
        double r8147 = pow(r8144, r8146);
        double r8148 = cbrt(r8145);
        double r8149 = r8148 * r8148;
        double r8150 = exp(r8145);
        double r8151 = log(r8150);
        double r8152 = cbrt(r8151);
        double r8153 = r8149 * r8152;
        double r8154 = pow(r8147, r8153);
        double r8155 = r8154 / r8137;
        double r8156 = r8143 / r8155;
        double r8157 = 5.02780022584434e-310;
        bool r8158 = r8139 <= r8157;
        double r8159 = r8158 ? r8139 : r8156;
        double r8160 = r8141 ? r8156 : r8159;
        return r8160;
}

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

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2128);
        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);
        mpfr_init(r8177);
        mpfr_init(r8178);
        mpfr_init(r8179);
}

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

static mpfr_t 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;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2128);
        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(r8189);
        mpfr_init(r8190);
        mpfr_init_set_str(r8191, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8192, "2", 10, MPFR_RNDN);
        mpfr_init(r8193);
        mpfr_init(r8194);
        mpfr_init(r8195);
        mpfr_init(r8196);
        mpfr_init_set_str(r8197, "1", 10, MPFR_RNDN);
        mpfr_init(r8198);
        mpfr_init(r8199);
        mpfr_init(r8200);
        mpfr_init(r8201);
        mpfr_init(r8202);
        mpfr_init_set_str(r8203, "-5.2257263440754e-310", 10, MPFR_RNDN);
        mpfr_init(r8204);
        mpfr_init(r8205);
        mpfr_init(r8206);
        mpfr_init(r8207);
        mpfr_init(r8208);
        mpfr_init(r8209);
        mpfr_init(r8210);
        mpfr_init(r8211);
        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_set_str(r8220, "5.02780022584434e-310", 10, MPFR_RNDN);
        mpfr_init(r8221);
        mpfr_init(r8222);
        mpfr_init(r8223);
}

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

static mpfr_t r8224, r8225, r8226, r8227, r8228, r8229, r8230, r8231, r8232, r8233, 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;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2128);
        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);
        mpfr_init(r8234);
        mpfr_init_set_str(r8235, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8236, "2", 10, MPFR_RNDN);
        mpfr_init(r8237);
        mpfr_init(r8238);
        mpfr_init(r8239);
        mpfr_init(r8240);
        mpfr_init_set_str(r8241, "1", 10, MPFR_RNDN);
        mpfr_init(r8242);
        mpfr_init(r8243);
        mpfr_init(r8244);
        mpfr_init(r8245);
        mpfr_init(r8246);
        mpfr_init_set_str(r8247, "-5.2257263440754e-310", 10, MPFR_RNDN);
        mpfr_init(r8248);
        mpfr_init(r8249);
        mpfr_init(r8250);
        mpfr_init(r8251);
        mpfr_init(r8252);
        mpfr_init(r8253);
        mpfr_init(r8254);
        mpfr_init(r8255);
        mpfr_init(r8256);
        mpfr_init(r8257);
        mpfr_init(r8258);
        mpfr_init(r8259);
        mpfr_init(r8260);
        mpfr_init(r8261);
        mpfr_init(r8262);
        mpfr_init(r8263);
        mpfr_init_set_str(r8264, "5.02780022584434e-310", 10, MPFR_RNDN);
        mpfr_init(r8265);
        mpfr_init(r8266);
        mpfr_init(r8267);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r8224, y_im, MPFR_RNDN);
        mpfr_set_d(r8225, x_re, MPFR_RNDN);
        mpfr_set_d(r8226, x_im, MPFR_RNDN);
        mpfr_hypot(r8227, r8225, r8226, MPFR_RNDN);
        mpfr_log(r8228, r8227, MPFR_RNDN);
        mpfr_atan2(r8229, r8226, r8225, MPFR_RNDN);
        mpfr_set_d(r8230, y_re, MPFR_RNDN);
        mpfr_mul(r8231, r8229, r8230, MPFR_RNDN);
        mpfr_fma(r8232, r8224, r8228, r8231, MPFR_RNDN);
        mpfr_sin(r8233, r8232, MPFR_RNDN);
        mpfr_mul(r8234, r8224, r8229, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8237, r8224, r8236, MPFR_RNDN);
        mpfr_pow(r8238, r8229, r8236, MPFR_RNDN);
        mpfr_mul(r8239, r8237, r8238, MPFR_RNDN);
        mpfr_mul(r8240, r8235, r8239, MPFR_RNDN);
        ;
        mpfr_add(r8242, r8240, r8241, MPFR_RNDN);
        mpfr_add(r8243, r8234, r8242, MPFR_RNDN);
        mpfr_pow(r8244, r8227, r8230, MPFR_RNDN);
        mpfr_div(r8245, r8243, r8244, MPFR_RNDN);
        mpfr_div(r8246, r8233, r8245, MPFR_RNDN);
        ;
        mpfr_set_si(r8248, mpfr_cmp(r8246, r8247) <= 0, MPFR_RNDN);
        mpfr_expm1(r8249, r8233, MPFR_RNDN);
        mpfr_log1p(r8250, r8249, MPFR_RNDN);
        mpfr_exp(r8251, r8224, MPFR_RNDN);
        mpfr_cbrt(r8252, r8229, MPFR_RNDN);
        mpfr_mul(r8253, r8252, r8252, MPFR_RNDN);
        mpfr_pow(r8254, r8251, r8253, MPFR_RNDN);
        mpfr_cbrt(r8255, r8252, MPFR_RNDN);
        mpfr_mul(r8256, r8255, r8255, MPFR_RNDN);
        mpfr_exp(r8257, r8252, MPFR_RNDN);
        mpfr_log(r8258, r8257, MPFR_RNDN);
        mpfr_cbrt(r8259, r8258, MPFR_RNDN);
        mpfr_mul(r8260, r8256, r8259, MPFR_RNDN);
        mpfr_pow(r8261, r8254, r8260, MPFR_RNDN);
        mpfr_div(r8262, r8261, r8244, MPFR_RNDN);
        mpfr_div(r8263, r8250, r8262, MPFR_RNDN);
        ;
        mpfr_set_si(r8265, mpfr_cmp(r8246, r8264) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r8265, MPFR_RNDN)) { mpfr_set(r8266, r8246, MPFR_RNDN); } else { mpfr_set(r8266, r8263, MPFR_RNDN); };
        if (mpfr_get_si(r8248, MPFR_RNDN)) { mpfr_set(r8267, r8263, MPFR_RNDN); } else { mpfr_set(r8267, r8266, MPFR_RNDN); };
        return mpfr_get_d(r8267, MPFR_RNDN);
}

