#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 r56505004 = x_re;
        float r56505005 = r56505004 * r56505004;
        float r56505006 = x_im;
        float r56505007 = r56505006 * r56505006;
        float r56505008 = r56505005 + r56505007;
        float r56505009 = sqrt(r56505008);
        float r56505010 = log(r56505009);
        float r56505011 = y_re;
        float r56505012 = r56505010 * r56505011;
        float r56505013 = atan2(r56505006, r56505004);
        float r56505014 = y_im;
        float r56505015 = r56505013 * r56505014;
        float r56505016 = r56505012 - r56505015;
        float r56505017 = exp(r56505016);
        float r56505018 = r56505010 * r56505014;
        float r56505019 = r56505013 * r56505011;
        float r56505020 = r56505018 + r56505019;
        float r56505021 = sin(r56505020);
        float r56505022 = r56505017 * r56505021;
        return r56505022;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r56505023 = x_re;
        double r56505024 = r56505023 * r56505023;
        double r56505025 = x_im;
        double r56505026 = r56505025 * r56505025;
        double r56505027 = r56505024 + r56505026;
        double r56505028 = sqrt(r56505027);
        double r56505029 = log(r56505028);
        double r56505030 = y_re;
        double r56505031 = r56505029 * r56505030;
        double r56505032 = atan2(r56505025, r56505023);
        double r56505033 = y_im;
        double r56505034 = r56505032 * r56505033;
        double r56505035 = r56505031 - r56505034;
        double r56505036 = exp(r56505035);
        double r56505037 = r56505029 * r56505033;
        double r56505038 = r56505032 * r56505030;
        double r56505039 = r56505037 + r56505038;
        double r56505040 = sin(r56505039);
        double r56505041 = r56505036 * r56505040;
        return r56505041;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r56505042 = x_re;
        float r56505043 = -6.187284010772173e-118;
        bool r56505044 = r56505042 <= r56505043;
        float r56505045 = y_re;
        float r56505046 = x_im;
        float r56505047 = atan2(r56505046, r56505042);
        float r56505048 = r56505045 * r56505047;
        float r56505049 = y_im;
        float r56505050 = -r56505042;
        float r56505051 = log(r56505050);
        float r56505052 = r56505049 * r56505051;
        float r56505053 = r56505048 + r56505052;
        float r56505054 = sin(r56505053);
        float r56505055 = exp(r56505049);
        float r56505056 = pow(r56505055, r56505047);
        float r56505057 = r56505046 * r56505046;
        float r56505058 = r56505042 * r56505042;
        float r56505059 = r56505057 + r56505058;
        float r56505060 = sqrt(r56505059);
        float r56505061 = pow(r56505060, r56505045);
        float r56505062 = r56505056 / r56505061;
        float r56505063 = r56505054 / r56505062;
        float r56505064 = 3.386938892258406e-118;
        bool r56505065 = r56505042 <= r56505064;
        float r56505066 = r56505058 + r56505057;
        float r56505067 = sqrt(r56505066);
        float r56505068 = log(r56505067);
        float r56505069 = r56505068 * r56505045;
        float r56505070 = cbrt(r56505047);
        float r56505071 = r56505070 * r56505070;
        float r56505072 = cbrt(r56505070);
        float r56505073 = r56505072 * r56505072;
        float r56505074 = r56505073 * r56505072;
        float r56505075 = r56505074 * r56505049;
        float r56505076 = r56505071 * r56505075;
        float r56505077 = r56505069 - r56505076;
        float r56505078 = exp(r56505077);
        float r56505079 = r56505068 * r56505049;
        float r56505080 = r56505047 * r56505045;
        float r56505081 = r56505079 + r56505080;
        float r56505082 = sin(r56505081);
        float r56505083 = r56505078 * r56505082;
        float r56505084 = log(r56505042);
        float r56505085 = r56505049 * r56505084;
        float r56505086 = r56505048 + r56505085;
        float r56505087 = sin(r56505086);
        float r56505088 = r56505061 * r56505087;
        float r56505089 = r56505088 / r56505056;
        float r56505090 = r56505065 ? r56505083 : r56505089;
        float r56505091 = r56505044 ? r56505063 : r56505090;
        return r56505091;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r56505092 = x_re;
        double r56505093 = -6.187284010772173e-118;
        bool r56505094 = r56505092 <= r56505093;
        double r56505095 = y_re;
        double r56505096 = x_im;
        double r56505097 = atan2(r56505096, r56505092);
        double r56505098 = r56505095 * r56505097;
        double r56505099 = y_im;
        double r56505100 = -r56505092;
        double r56505101 = log(r56505100);
        double r56505102 = r56505099 * r56505101;
        double r56505103 = r56505098 + r56505102;
        double r56505104 = sin(r56505103);
        double r56505105 = exp(r56505099);
        double r56505106 = pow(r56505105, r56505097);
        double r56505107 = r56505096 * r56505096;
        double r56505108 = r56505092 * r56505092;
        double r56505109 = r56505107 + r56505108;
        double r56505110 = sqrt(r56505109);
        double r56505111 = pow(r56505110, r56505095);
        double r56505112 = r56505106 / r56505111;
        double r56505113 = r56505104 / r56505112;
        double r56505114 = 3.386938892258406e-118;
        bool r56505115 = r56505092 <= r56505114;
        double r56505116 = r56505108 + r56505107;
        double r56505117 = sqrt(r56505116);
        double r56505118 = log(r56505117);
        double r56505119 = r56505118 * r56505095;
        double r56505120 = cbrt(r56505097);
        double r56505121 = r56505120 * r56505120;
        double r56505122 = cbrt(r56505120);
        double r56505123 = r56505122 * r56505122;
        double r56505124 = r56505123 * r56505122;
        double r56505125 = r56505124 * r56505099;
        double r56505126 = r56505121 * r56505125;
        double r56505127 = r56505119 - r56505126;
        double r56505128 = exp(r56505127);
        double r56505129 = r56505118 * r56505099;
        double r56505130 = r56505097 * r56505095;
        double r56505131 = r56505129 + r56505130;
        double r56505132 = sin(r56505131);
        double r56505133 = r56505128 * r56505132;
        double r56505134 = log(r56505092);
        double r56505135 = r56505099 * r56505134;
        double r56505136 = r56505098 + r56505135;
        double r56505137 = sin(r56505136);
        double r56505138 = r56505111 * r56505137;
        double r56505139 = r56505138 / r56505106;
        double r56505140 = r56505115 ? r56505133 : r56505139;
        double r56505141 = r56505094 ? r56505113 : r56505140;
        return r56505141;
}

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 r56505142, r56505143, r56505144, r56505145, r56505146, r56505147, r56505148, r56505149, r56505150, r56505151, r56505152, r56505153, r56505154, r56505155, r56505156, r56505157, r56505158, r56505159, r56505160;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2192);
        mpfr_init(r56505142);
        mpfr_init(r56505143);
        mpfr_init(r56505144);
        mpfr_init(r56505145);
        mpfr_init(r56505146);
        mpfr_init(r56505147);
        mpfr_init(r56505148);
        mpfr_init(r56505149);
        mpfr_init(r56505150);
        mpfr_init(r56505151);
        mpfr_init(r56505152);
        mpfr_init(r56505153);
        mpfr_init(r56505154);
        mpfr_init(r56505155);
        mpfr_init(r56505156);
        mpfr_init(r56505157);
        mpfr_init(r56505158);
        mpfr_init(r56505159);
        mpfr_init(r56505160);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r56505142, x_re, MPFR_RNDN);
        mpfr_mul(r56505143, r56505142, r56505142, MPFR_RNDN);
        mpfr_set_d(r56505144, x_im, MPFR_RNDN);
        mpfr_mul(r56505145, r56505144, r56505144, MPFR_RNDN);
        mpfr_add(r56505146, r56505143, r56505145, MPFR_RNDN);
        mpfr_sqrt(r56505147, r56505146, MPFR_RNDN);
        mpfr_log(r56505148, r56505147, MPFR_RNDN);
        mpfr_set_d(r56505149, y_re, MPFR_RNDN);
        mpfr_mul(r56505150, r56505148, r56505149, MPFR_RNDN);
        mpfr_atan2(r56505151, r56505144, r56505142, MPFR_RNDN);
        mpfr_set_d(r56505152, y_im, MPFR_RNDN);
        mpfr_mul(r56505153, r56505151, r56505152, MPFR_RNDN);
        mpfr_sub(r56505154, r56505150, r56505153, MPFR_RNDN);
        mpfr_exp(r56505155, r56505154, MPFR_RNDN);
        mpfr_mul(r56505156, r56505148, r56505152, MPFR_RNDN);
        mpfr_mul(r56505157, r56505151, r56505149, MPFR_RNDN);
        mpfr_add(r56505158, r56505156, r56505157, MPFR_RNDN);
        mpfr_sin(r56505159, r56505158, MPFR_RNDN);
        mpfr_mul(r56505160, r56505155, r56505159, MPFR_RNDN);
        return mpfr_get_d(r56505160, MPFR_RNDN);
}

static mpfr_t r56505161, r56505162, r56505163, r56505164, r56505165, r56505166, r56505167, r56505168, r56505169, r56505170, r56505171, r56505172, r56505173, r56505174, r56505175, r56505176, r56505177, r56505178, r56505179, r56505180, r56505181, r56505182, r56505183, r56505184, r56505185, r56505186, r56505187, r56505188, r56505189, r56505190, r56505191, r56505192, r56505193, r56505194, r56505195, r56505196, r56505197, r56505198, r56505199, r56505200, r56505201, r56505202, r56505203, r56505204, r56505205, r56505206, r56505207, r56505208, r56505209, r56505210;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r56505161);
        mpfr_init_set_str(r56505162, "-6.187284010772173e-118", 10, MPFR_RNDN);
        mpfr_init(r56505163);
        mpfr_init(r56505164);
        mpfr_init(r56505165);
        mpfr_init(r56505166);
        mpfr_init(r56505167);
        mpfr_init(r56505168);
        mpfr_init(r56505169);
        mpfr_init(r56505170);
        mpfr_init(r56505171);
        mpfr_init(r56505172);
        mpfr_init(r56505173);
        mpfr_init(r56505174);
        mpfr_init(r56505175);
        mpfr_init(r56505176);
        mpfr_init(r56505177);
        mpfr_init(r56505178);
        mpfr_init(r56505179);
        mpfr_init(r56505180);
        mpfr_init(r56505181);
        mpfr_init(r56505182);
        mpfr_init_set_str(r56505183, "3.386938892258406e-118", 10, MPFR_RNDN);
        mpfr_init(r56505184);
        mpfr_init(r56505185);
        mpfr_init(r56505186);
        mpfr_init(r56505187);
        mpfr_init(r56505188);
        mpfr_init(r56505189);
        mpfr_init(r56505190);
        mpfr_init(r56505191);
        mpfr_init(r56505192);
        mpfr_init(r56505193);
        mpfr_init(r56505194);
        mpfr_init(r56505195);
        mpfr_init(r56505196);
        mpfr_init(r56505197);
        mpfr_init(r56505198);
        mpfr_init(r56505199);
        mpfr_init(r56505200);
        mpfr_init(r56505201);
        mpfr_init(r56505202);
        mpfr_init(r56505203);
        mpfr_init(r56505204);
        mpfr_init(r56505205);
        mpfr_init(r56505206);
        mpfr_init(r56505207);
        mpfr_init(r56505208);
        mpfr_init(r56505209);
        mpfr_init(r56505210);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r56505161, x_re, MPFR_RNDN);
        ;
        mpfr_set_si(r56505163, mpfr_cmp(r56505161, r56505162) <= 0, MPFR_RNDN);
        mpfr_set_d(r56505164, y_re, MPFR_RNDN);
        mpfr_set_d(r56505165, x_im, MPFR_RNDN);
        mpfr_atan2(r56505166, r56505165, r56505161, MPFR_RNDN);
        mpfr_mul(r56505167, r56505164, r56505166, MPFR_RNDN);
        mpfr_set_d(r56505168, y_im, MPFR_RNDN);
        mpfr_neg(r56505169, r56505161, MPFR_RNDN);
        mpfr_log(r56505170, r56505169, MPFR_RNDN);
        mpfr_mul(r56505171, r56505168, r56505170, MPFR_RNDN);
        mpfr_add(r56505172, r56505167, r56505171, MPFR_RNDN);
        mpfr_sin(r56505173, r56505172, MPFR_RNDN);
        mpfr_exp(r56505174, r56505168, MPFR_RNDN);
        mpfr_pow(r56505175, r56505174, r56505166, MPFR_RNDN);
        mpfr_mul(r56505176, r56505165, r56505165, MPFR_RNDN);
        mpfr_mul(r56505177, r56505161, r56505161, MPFR_RNDN);
        mpfr_add(r56505178, r56505176, r56505177, MPFR_RNDN);
        mpfr_sqrt(r56505179, r56505178, MPFR_RNDN);
        mpfr_pow(r56505180, r56505179, r56505164, MPFR_RNDN);
        mpfr_div(r56505181, r56505175, r56505180, MPFR_RNDN);
        mpfr_div(r56505182, r56505173, r56505181, MPFR_RNDN);
        ;
        mpfr_set_si(r56505184, mpfr_cmp(r56505161, r56505183) <= 0, MPFR_RNDN);
        mpfr_add(r56505185, r56505177, r56505176, MPFR_RNDN);
        mpfr_sqrt(r56505186, r56505185, MPFR_RNDN);
        mpfr_log(r56505187, r56505186, MPFR_RNDN);
        mpfr_mul(r56505188, r56505187, r56505164, MPFR_RNDN);
        mpfr_cbrt(r56505189, r56505166, MPFR_RNDN);
        mpfr_mul(r56505190, r56505189, r56505189, MPFR_RNDN);
        mpfr_cbrt(r56505191, r56505189, MPFR_RNDN);
        mpfr_mul(r56505192, r56505191, r56505191, MPFR_RNDN);
        mpfr_mul(r56505193, r56505192, r56505191, MPFR_RNDN);
        mpfr_mul(r56505194, r56505193, r56505168, MPFR_RNDN);
        mpfr_mul(r56505195, r56505190, r56505194, MPFR_RNDN);
        mpfr_sub(r56505196, r56505188, r56505195, MPFR_RNDN);
        mpfr_exp(r56505197, r56505196, MPFR_RNDN);
        mpfr_mul(r56505198, r56505187, r56505168, MPFR_RNDN);
        mpfr_mul(r56505199, r56505166, r56505164, MPFR_RNDN);
        mpfr_add(r56505200, r56505198, r56505199, MPFR_RNDN);
        mpfr_sin(r56505201, r56505200, MPFR_RNDN);
        mpfr_mul(r56505202, r56505197, r56505201, MPFR_RNDN);
        mpfr_log(r56505203, r56505161, MPFR_RNDN);
        mpfr_mul(r56505204, r56505168, r56505203, MPFR_RNDN);
        mpfr_add(r56505205, r56505167, r56505204, MPFR_RNDN);
        mpfr_sin(r56505206, r56505205, MPFR_RNDN);
        mpfr_mul(r56505207, r56505180, r56505206, MPFR_RNDN);
        mpfr_div(r56505208, r56505207, r56505175, MPFR_RNDN);
        if (mpfr_get_si(r56505184, MPFR_RNDN)) { mpfr_set(r56505209, r56505202, MPFR_RNDN); } else { mpfr_set(r56505209, r56505208, MPFR_RNDN); };
        if (mpfr_get_si(r56505163, MPFR_RNDN)) { mpfr_set(r56505210, r56505182, MPFR_RNDN); } else { mpfr_set(r56505210, r56505209, MPFR_RNDN); };
        return mpfr_get_d(r56505210, MPFR_RNDN);
}

static mpfr_t r56505211, r56505212, r56505213, r56505214, r56505215, r56505216, r56505217, r56505218, r56505219, r56505220, r56505221, r56505222, r56505223, r56505224, r56505225, r56505226, r56505227, r56505228, r56505229, r56505230, r56505231, r56505232, r56505233, r56505234, r56505235, r56505236, r56505237, r56505238, r56505239, r56505240, r56505241, r56505242, r56505243, r56505244, r56505245, r56505246, r56505247, r56505248, r56505249, r56505250, r56505251, r56505252, r56505253, r56505254, r56505255, r56505256, r56505257, r56505258, r56505259, r56505260;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r56505211);
        mpfr_init_set_str(r56505212, "-6.187284010772173e-118", 10, MPFR_RNDN);
        mpfr_init(r56505213);
        mpfr_init(r56505214);
        mpfr_init(r56505215);
        mpfr_init(r56505216);
        mpfr_init(r56505217);
        mpfr_init(r56505218);
        mpfr_init(r56505219);
        mpfr_init(r56505220);
        mpfr_init(r56505221);
        mpfr_init(r56505222);
        mpfr_init(r56505223);
        mpfr_init(r56505224);
        mpfr_init(r56505225);
        mpfr_init(r56505226);
        mpfr_init(r56505227);
        mpfr_init(r56505228);
        mpfr_init(r56505229);
        mpfr_init(r56505230);
        mpfr_init(r56505231);
        mpfr_init(r56505232);
        mpfr_init_set_str(r56505233, "3.386938892258406e-118", 10, MPFR_RNDN);
        mpfr_init(r56505234);
        mpfr_init(r56505235);
        mpfr_init(r56505236);
        mpfr_init(r56505237);
        mpfr_init(r56505238);
        mpfr_init(r56505239);
        mpfr_init(r56505240);
        mpfr_init(r56505241);
        mpfr_init(r56505242);
        mpfr_init(r56505243);
        mpfr_init(r56505244);
        mpfr_init(r56505245);
        mpfr_init(r56505246);
        mpfr_init(r56505247);
        mpfr_init(r56505248);
        mpfr_init(r56505249);
        mpfr_init(r56505250);
        mpfr_init(r56505251);
        mpfr_init(r56505252);
        mpfr_init(r56505253);
        mpfr_init(r56505254);
        mpfr_init(r56505255);
        mpfr_init(r56505256);
        mpfr_init(r56505257);
        mpfr_init(r56505258);
        mpfr_init(r56505259);
        mpfr_init(r56505260);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r56505211, x_re, MPFR_RNDN);
        ;
        mpfr_set_si(r56505213, mpfr_cmp(r56505211, r56505212) <= 0, MPFR_RNDN);
        mpfr_set_d(r56505214, y_re, MPFR_RNDN);
        mpfr_set_d(r56505215, x_im, MPFR_RNDN);
        mpfr_atan2(r56505216, r56505215, r56505211, MPFR_RNDN);
        mpfr_mul(r56505217, r56505214, r56505216, MPFR_RNDN);
        mpfr_set_d(r56505218, y_im, MPFR_RNDN);
        mpfr_neg(r56505219, r56505211, MPFR_RNDN);
        mpfr_log(r56505220, r56505219, MPFR_RNDN);
        mpfr_mul(r56505221, r56505218, r56505220, MPFR_RNDN);
        mpfr_add(r56505222, r56505217, r56505221, MPFR_RNDN);
        mpfr_sin(r56505223, r56505222, MPFR_RNDN);
        mpfr_exp(r56505224, r56505218, MPFR_RNDN);
        mpfr_pow(r56505225, r56505224, r56505216, MPFR_RNDN);
        mpfr_mul(r56505226, r56505215, r56505215, MPFR_RNDN);
        mpfr_mul(r56505227, r56505211, r56505211, MPFR_RNDN);
        mpfr_add(r56505228, r56505226, r56505227, MPFR_RNDN);
        mpfr_sqrt(r56505229, r56505228, MPFR_RNDN);
        mpfr_pow(r56505230, r56505229, r56505214, MPFR_RNDN);
        mpfr_div(r56505231, r56505225, r56505230, MPFR_RNDN);
        mpfr_div(r56505232, r56505223, r56505231, MPFR_RNDN);
        ;
        mpfr_set_si(r56505234, mpfr_cmp(r56505211, r56505233) <= 0, MPFR_RNDN);
        mpfr_add(r56505235, r56505227, r56505226, MPFR_RNDN);
        mpfr_sqrt(r56505236, r56505235, MPFR_RNDN);
        mpfr_log(r56505237, r56505236, MPFR_RNDN);
        mpfr_mul(r56505238, r56505237, r56505214, MPFR_RNDN);
        mpfr_cbrt(r56505239, r56505216, MPFR_RNDN);
        mpfr_mul(r56505240, r56505239, r56505239, MPFR_RNDN);
        mpfr_cbrt(r56505241, r56505239, MPFR_RNDN);
        mpfr_mul(r56505242, r56505241, r56505241, MPFR_RNDN);
        mpfr_mul(r56505243, r56505242, r56505241, MPFR_RNDN);
        mpfr_mul(r56505244, r56505243, r56505218, MPFR_RNDN);
        mpfr_mul(r56505245, r56505240, r56505244, MPFR_RNDN);
        mpfr_sub(r56505246, r56505238, r56505245, MPFR_RNDN);
        mpfr_exp(r56505247, r56505246, MPFR_RNDN);
        mpfr_mul(r56505248, r56505237, r56505218, MPFR_RNDN);
        mpfr_mul(r56505249, r56505216, r56505214, MPFR_RNDN);
        mpfr_add(r56505250, r56505248, r56505249, MPFR_RNDN);
        mpfr_sin(r56505251, r56505250, MPFR_RNDN);
        mpfr_mul(r56505252, r56505247, r56505251, MPFR_RNDN);
        mpfr_log(r56505253, r56505211, MPFR_RNDN);
        mpfr_mul(r56505254, r56505218, r56505253, MPFR_RNDN);
        mpfr_add(r56505255, r56505217, r56505254, MPFR_RNDN);
        mpfr_sin(r56505256, r56505255, MPFR_RNDN);
        mpfr_mul(r56505257, r56505230, r56505256, MPFR_RNDN);
        mpfr_div(r56505258, r56505257, r56505225, MPFR_RNDN);
        if (mpfr_get_si(r56505234, MPFR_RNDN)) { mpfr_set(r56505259, r56505252, MPFR_RNDN); } else { mpfr_set(r56505259, r56505258, MPFR_RNDN); };
        if (mpfr_get_si(r56505213, MPFR_RNDN)) { mpfr_set(r56505260, r56505232, MPFR_RNDN); } else { mpfr_set(r56505260, r56505259, MPFR_RNDN); };
        return mpfr_get_d(r56505260, MPFR_RNDN);
}

