#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 r19832 = x_re;
        float r19833 = r19832 * r19832;
        float r19834 = x_im;
        float r19835 = r19834 * r19834;
        float r19836 = r19833 + r19835;
        float r19837 = sqrt(r19836);
        float r19838 = log(r19837);
        float r19839 = y_re;
        float r19840 = r19838 * r19839;
        float r19841 = atan2(r19834, r19832);
        float r19842 = y_im;
        float r19843 = r19841 * r19842;
        float r19844 = r19840 - r19843;
        float r19845 = exp(r19844);
        float r19846 = r19838 * r19842;
        float r19847 = r19841 * r19839;
        float r19848 = r19846 + r19847;
        float r19849 = sin(r19848);
        float r19850 = r19845 * r19849;
        return r19850;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r19851 = x_re;
        double r19852 = r19851 * r19851;
        double r19853 = x_im;
        double r19854 = r19853 * r19853;
        double r19855 = r19852 + r19854;
        double r19856 = sqrt(r19855);
        double r19857 = log(r19856);
        double r19858 = y_re;
        double r19859 = r19857 * r19858;
        double r19860 = atan2(r19853, r19851);
        double r19861 = y_im;
        double r19862 = r19860 * r19861;
        double r19863 = r19859 - r19862;
        double r19864 = exp(r19863);
        double r19865 = r19857 * r19861;
        double r19866 = r19860 * r19858;
        double r19867 = r19865 + r19866;
        double r19868 = sin(r19867);
        double r19869 = r19864 * r19868;
        return r19869;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r19870 = x_re;
        float r19871 = -6.722315975013314e-295;
        bool r19872 = r19870 <= r19871;
        float r19873 = x_im;
        float r19874 = atan2(r19873, r19870);
        float r19875 = y_re;
        float r19876 = r19874 * r19875;
        float r19877 = y_im;
        float r19878 = -r19870;
        float r19879 = log(r19878);
        float r19880 = r19877 * r19879;
        float r19881 = r19876 + r19880;
        float r19882 = sin(r19881);
        float r19883 = exp(r19877);
        float r19884 = pow(r19883, r19874);
        float r19885 = r19873 * r19873;
        float r19886 = r19870 * r19870;
        float r19887 = r19885 + r19886;
        float r19888 = sqrt(r19887);
        float r19889 = pow(r19888, r19875);
        float r19890 = r19884 / r19889;
        float r19891 = r19882 / r19890;
        float r19892 = 5402106.401154693;
        bool r19893 = r19870 <= r19892;
        float r19894 = r19886 + r19885;
        float r19895 = sqrt(r19894);
        float r19896 = log(r19895);
        float r19897 = r19896 * r19875;
        float r19898 = r19874 * r19877;
        float r19899 = r19897 - r19898;
        float r19900 = exp(r19899);
        float r19901 = sqrt(r19895);
        float r19902 = r19901 * r19901;
        float r19903 = log(r19902);
        float r19904 = r19903 * r19877;
        float r19905 = r19904 + r19876;
        float r19906 = sin(r19905);
        float r19907 = r19900 * r19906;
        float r19908 = log(r19870);
        float r19909 = r19877 * r19908;
        float r19910 = r19876 + r19909;
        float r19911 = sin(r19910);
        float r19912 = r19889 * r19911;
        float r19913 = r19912 / r19884;
        float r19914 = r19893 ? r19907 : r19913;
        float r19915 = r19872 ? r19891 : r19914;
        return r19915;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r19916 = x_re;
        double r19917 = -6.722315975013314e-295;
        bool r19918 = r19916 <= r19917;
        double r19919 = x_im;
        double r19920 = atan2(r19919, r19916);
        double r19921 = y_re;
        double r19922 = r19920 * r19921;
        double r19923 = y_im;
        double r19924 = -r19916;
        double r19925 = log(r19924);
        double r19926 = r19923 * r19925;
        double r19927 = r19922 + r19926;
        double r19928 = sin(r19927);
        double r19929 = exp(r19923);
        double r19930 = pow(r19929, r19920);
        double r19931 = r19919 * r19919;
        double r19932 = r19916 * r19916;
        double r19933 = r19931 + r19932;
        double r19934 = sqrt(r19933);
        double r19935 = pow(r19934, r19921);
        double r19936 = r19930 / r19935;
        double r19937 = r19928 / r19936;
        double r19938 = 5402106.401154693;
        bool r19939 = r19916 <= r19938;
        double r19940 = r19932 + r19931;
        double r19941 = sqrt(r19940);
        double r19942 = log(r19941);
        double r19943 = r19942 * r19921;
        double r19944 = r19920 * r19923;
        double r19945 = r19943 - r19944;
        double r19946 = exp(r19945);
        double r19947 = sqrt(r19941);
        double r19948 = r19947 * r19947;
        double r19949 = log(r19948);
        double r19950 = r19949 * r19923;
        double r19951 = r19950 + r19922;
        double r19952 = sin(r19951);
        double r19953 = r19946 * r19952;
        double r19954 = log(r19916);
        double r19955 = r19923 * r19954;
        double r19956 = r19922 + r19955;
        double r19957 = sin(r19956);
        double r19958 = r19935 * r19957;
        double r19959 = r19958 / r19930;
        double r19960 = r19939 ? r19953 : r19959;
        double r19961 = r19918 ? r19937 : r19960;
        return r19961;
}

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 r19962, r19963, r19964, r19965, r19966, r19967, r19968, r19969, r19970, r19971, r19972, r19973, r19974, r19975, r19976, r19977, r19978, r19979, r19980;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2192);
        mpfr_init(r19962);
        mpfr_init(r19963);
        mpfr_init(r19964);
        mpfr_init(r19965);
        mpfr_init(r19966);
        mpfr_init(r19967);
        mpfr_init(r19968);
        mpfr_init(r19969);
        mpfr_init(r19970);
        mpfr_init(r19971);
        mpfr_init(r19972);
        mpfr_init(r19973);
        mpfr_init(r19974);
        mpfr_init(r19975);
        mpfr_init(r19976);
        mpfr_init(r19977);
        mpfr_init(r19978);
        mpfr_init(r19979);
        mpfr_init(r19980);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r19962, x_re, MPFR_RNDN);
        mpfr_mul(r19963, r19962, r19962, MPFR_RNDN);
        mpfr_set_d(r19964, x_im, MPFR_RNDN);
        mpfr_mul(r19965, r19964, r19964, MPFR_RNDN);
        mpfr_add(r19966, r19963, r19965, MPFR_RNDN);
        mpfr_sqrt(r19967, r19966, MPFR_RNDN);
        mpfr_log(r19968, r19967, MPFR_RNDN);
        mpfr_set_d(r19969, y_re, MPFR_RNDN);
        mpfr_mul(r19970, r19968, r19969, MPFR_RNDN);
        mpfr_atan2(r19971, r19964, r19962, MPFR_RNDN);
        mpfr_set_d(r19972, y_im, MPFR_RNDN);
        mpfr_mul(r19973, r19971, r19972, MPFR_RNDN);
        mpfr_sub(r19974, r19970, r19973, MPFR_RNDN);
        mpfr_exp(r19975, r19974, MPFR_RNDN);
        mpfr_mul(r19976, r19968, r19972, MPFR_RNDN);
        mpfr_mul(r19977, r19971, r19969, MPFR_RNDN);
        mpfr_add(r19978, r19976, r19977, MPFR_RNDN);
        mpfr_sin(r19979, r19978, MPFR_RNDN);
        mpfr_mul(r19980, r19975, r19979, MPFR_RNDN);
        return mpfr_get_d(r19980, MPFR_RNDN);
}

static mpfr_t r19981, r19982, r19983, r19984, r19985, r19986, r19987, r19988, r19989, r19990, r19991, r19992, r19993, r19994, r19995, r19996, r19997, r19998, r19999, r20000, r20001, r20002, r20003, r20004, r20005, r20006, r20007, r20008, r20009, r20010, r20011, r20012, r20013, r20014, r20015, r20016, r20017, r20018, r20019, r20020, r20021, r20022, r20023, r20024, r20025, r20026;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r19981);
        mpfr_init_set_str(r19982, "-6.722315975013314e-295", 10, MPFR_RNDN);
        mpfr_init(r19983);
        mpfr_init(r19984);
        mpfr_init(r19985);
        mpfr_init(r19986);
        mpfr_init(r19987);
        mpfr_init(r19988);
        mpfr_init(r19989);
        mpfr_init(r19990);
        mpfr_init(r19991);
        mpfr_init(r19992);
        mpfr_init(r19993);
        mpfr_init(r19994);
        mpfr_init(r19995);
        mpfr_init(r19996);
        mpfr_init(r19997);
        mpfr_init(r19998);
        mpfr_init(r19999);
        mpfr_init(r20000);
        mpfr_init(r20001);
        mpfr_init(r20002);
        mpfr_init_set_str(r20003, "5402106.401154693", 10, MPFR_RNDN);
        mpfr_init(r20004);
        mpfr_init(r20005);
        mpfr_init(r20006);
        mpfr_init(r20007);
        mpfr_init(r20008);
        mpfr_init(r20009);
        mpfr_init(r20010);
        mpfr_init(r20011);
        mpfr_init(r20012);
        mpfr_init(r20013);
        mpfr_init(r20014);
        mpfr_init(r20015);
        mpfr_init(r20016);
        mpfr_init(r20017);
        mpfr_init(r20018);
        mpfr_init(r20019);
        mpfr_init(r20020);
        mpfr_init(r20021);
        mpfr_init(r20022);
        mpfr_init(r20023);
        mpfr_init(r20024);
        mpfr_init(r20025);
        mpfr_init(r20026);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r19981, x_re, MPFR_RNDN);
        ;
        mpfr_set_si(r19983, mpfr_cmp(r19981, r19982) <= 0, MPFR_RNDN);
        mpfr_set_d(r19984, x_im, MPFR_RNDN);
        mpfr_atan2(r19985, r19984, r19981, MPFR_RNDN);
        mpfr_set_d(r19986, y_re, MPFR_RNDN);
        mpfr_mul(r19987, r19985, r19986, MPFR_RNDN);
        mpfr_set_d(r19988, y_im, MPFR_RNDN);
        mpfr_neg(r19989, r19981, MPFR_RNDN);
        mpfr_log(r19990, r19989, MPFR_RNDN);
        mpfr_mul(r19991, r19988, r19990, MPFR_RNDN);
        mpfr_add(r19992, r19987, r19991, MPFR_RNDN);
        mpfr_sin(r19993, r19992, MPFR_RNDN);
        mpfr_exp(r19994, r19988, MPFR_RNDN);
        mpfr_pow(r19995, r19994, r19985, MPFR_RNDN);
        mpfr_mul(r19996, r19984, r19984, MPFR_RNDN);
        mpfr_mul(r19997, r19981, r19981, MPFR_RNDN);
        mpfr_add(r19998, r19996, r19997, MPFR_RNDN);
        mpfr_sqrt(r19999, r19998, MPFR_RNDN);
        mpfr_pow(r20000, r19999, r19986, MPFR_RNDN);
        mpfr_div(r20001, r19995, r20000, MPFR_RNDN);
        mpfr_div(r20002, r19993, r20001, MPFR_RNDN);
        ;
        mpfr_set_si(r20004, mpfr_cmp(r19981, r20003) <= 0, MPFR_RNDN);
        mpfr_add(r20005, r19997, r19996, MPFR_RNDN);
        mpfr_sqrt(r20006, r20005, MPFR_RNDN);
        mpfr_log(r20007, r20006, MPFR_RNDN);
        mpfr_mul(r20008, r20007, r19986, MPFR_RNDN);
        mpfr_mul(r20009, r19985, r19988, MPFR_RNDN);
        mpfr_sub(r20010, r20008, r20009, MPFR_RNDN);
        mpfr_exp(r20011, r20010, MPFR_RNDN);
        mpfr_sqrt(r20012, r20006, MPFR_RNDN);
        mpfr_mul(r20013, r20012, r20012, MPFR_RNDN);
        mpfr_log(r20014, r20013, MPFR_RNDN);
        mpfr_mul(r20015, r20014, r19988, MPFR_RNDN);
        mpfr_add(r20016, r20015, r19987, MPFR_RNDN);
        mpfr_sin(r20017, r20016, MPFR_RNDN);
        mpfr_mul(r20018, r20011, r20017, MPFR_RNDN);
        mpfr_log(r20019, r19981, MPFR_RNDN);
        mpfr_mul(r20020, r19988, r20019, MPFR_RNDN);
        mpfr_add(r20021, r19987, r20020, MPFR_RNDN);
        mpfr_sin(r20022, r20021, MPFR_RNDN);
        mpfr_mul(r20023, r20000, r20022, MPFR_RNDN);
        mpfr_div(r20024, r20023, r19995, MPFR_RNDN);
        if (mpfr_get_si(r20004, MPFR_RNDN)) { mpfr_set(r20025, r20018, MPFR_RNDN); } else { mpfr_set(r20025, r20024, MPFR_RNDN); };
        if (mpfr_get_si(r19983, MPFR_RNDN)) { mpfr_set(r20026, r20002, MPFR_RNDN); } else { mpfr_set(r20026, r20025, MPFR_RNDN); };
        return mpfr_get_d(r20026, MPFR_RNDN);
}

static mpfr_t r20027, r20028, r20029, r20030, r20031, r20032, r20033, r20034, r20035, r20036, r20037, r20038, r20039, r20040, r20041, r20042, r20043, r20044, r20045, r20046, r20047, r20048, r20049, r20050, r20051, r20052, r20053, r20054, r20055, r20056, r20057, r20058, r20059, r20060, r20061, r20062, r20063, r20064, r20065, r20066, r20067, r20068, r20069, r20070, r20071, r20072;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r20027);
        mpfr_init_set_str(r20028, "-6.722315975013314e-295", 10, MPFR_RNDN);
        mpfr_init(r20029);
        mpfr_init(r20030);
        mpfr_init(r20031);
        mpfr_init(r20032);
        mpfr_init(r20033);
        mpfr_init(r20034);
        mpfr_init(r20035);
        mpfr_init(r20036);
        mpfr_init(r20037);
        mpfr_init(r20038);
        mpfr_init(r20039);
        mpfr_init(r20040);
        mpfr_init(r20041);
        mpfr_init(r20042);
        mpfr_init(r20043);
        mpfr_init(r20044);
        mpfr_init(r20045);
        mpfr_init(r20046);
        mpfr_init(r20047);
        mpfr_init(r20048);
        mpfr_init_set_str(r20049, "5402106.401154693", 10, MPFR_RNDN);
        mpfr_init(r20050);
        mpfr_init(r20051);
        mpfr_init(r20052);
        mpfr_init(r20053);
        mpfr_init(r20054);
        mpfr_init(r20055);
        mpfr_init(r20056);
        mpfr_init(r20057);
        mpfr_init(r20058);
        mpfr_init(r20059);
        mpfr_init(r20060);
        mpfr_init(r20061);
        mpfr_init(r20062);
        mpfr_init(r20063);
        mpfr_init(r20064);
        mpfr_init(r20065);
        mpfr_init(r20066);
        mpfr_init(r20067);
        mpfr_init(r20068);
        mpfr_init(r20069);
        mpfr_init(r20070);
        mpfr_init(r20071);
        mpfr_init(r20072);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r20027, x_re, MPFR_RNDN);
        ;
        mpfr_set_si(r20029, mpfr_cmp(r20027, r20028) <= 0, MPFR_RNDN);
        mpfr_set_d(r20030, x_im, MPFR_RNDN);
        mpfr_atan2(r20031, r20030, r20027, MPFR_RNDN);
        mpfr_set_d(r20032, y_re, MPFR_RNDN);
        mpfr_mul(r20033, r20031, r20032, MPFR_RNDN);
        mpfr_set_d(r20034, y_im, MPFR_RNDN);
        mpfr_neg(r20035, r20027, MPFR_RNDN);
        mpfr_log(r20036, r20035, MPFR_RNDN);
        mpfr_mul(r20037, r20034, r20036, MPFR_RNDN);
        mpfr_add(r20038, r20033, r20037, MPFR_RNDN);
        mpfr_sin(r20039, r20038, MPFR_RNDN);
        mpfr_exp(r20040, r20034, MPFR_RNDN);
        mpfr_pow(r20041, r20040, r20031, MPFR_RNDN);
        mpfr_mul(r20042, r20030, r20030, MPFR_RNDN);
        mpfr_mul(r20043, r20027, r20027, MPFR_RNDN);
        mpfr_add(r20044, r20042, r20043, MPFR_RNDN);
        mpfr_sqrt(r20045, r20044, MPFR_RNDN);
        mpfr_pow(r20046, r20045, r20032, MPFR_RNDN);
        mpfr_div(r20047, r20041, r20046, MPFR_RNDN);
        mpfr_div(r20048, r20039, r20047, MPFR_RNDN);
        ;
        mpfr_set_si(r20050, mpfr_cmp(r20027, r20049) <= 0, MPFR_RNDN);
        mpfr_add(r20051, r20043, r20042, MPFR_RNDN);
        mpfr_sqrt(r20052, r20051, MPFR_RNDN);
        mpfr_log(r20053, r20052, MPFR_RNDN);
        mpfr_mul(r20054, r20053, r20032, MPFR_RNDN);
        mpfr_mul(r20055, r20031, r20034, MPFR_RNDN);
        mpfr_sub(r20056, r20054, r20055, MPFR_RNDN);
        mpfr_exp(r20057, r20056, MPFR_RNDN);
        mpfr_sqrt(r20058, r20052, MPFR_RNDN);
        mpfr_mul(r20059, r20058, r20058, MPFR_RNDN);
        mpfr_log(r20060, r20059, MPFR_RNDN);
        mpfr_mul(r20061, r20060, r20034, MPFR_RNDN);
        mpfr_add(r20062, r20061, r20033, MPFR_RNDN);
        mpfr_sin(r20063, r20062, MPFR_RNDN);
        mpfr_mul(r20064, r20057, r20063, MPFR_RNDN);
        mpfr_log(r20065, r20027, MPFR_RNDN);
        mpfr_mul(r20066, r20034, r20065, MPFR_RNDN);
        mpfr_add(r20067, r20033, r20066, MPFR_RNDN);
        mpfr_sin(r20068, r20067, MPFR_RNDN);
        mpfr_mul(r20069, r20046, r20068, MPFR_RNDN);
        mpfr_div(r20070, r20069, r20041, MPFR_RNDN);
        if (mpfr_get_si(r20050, MPFR_RNDN)) { mpfr_set(r20071, r20064, MPFR_RNDN); } else { mpfr_set(r20071, r20070, MPFR_RNDN); };
        if (mpfr_get_si(r20029, MPFR_RNDN)) { mpfr_set(r20072, r20048, MPFR_RNDN); } else { mpfr_set(r20072, r20071, MPFR_RNDN); };
        return mpfr_get_d(r20072, MPFR_RNDN);
}

