#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 r14820 = x_re;
        float r14821 = r14820 * r14820;
        float r14822 = x_im;
        float r14823 = r14822 * r14822;
        float r14824 = r14821 + r14823;
        float r14825 = sqrt(r14824);
        float r14826 = log(r14825);
        float r14827 = y_re;
        float r14828 = r14826 * r14827;
        float r14829 = atan2(r14822, r14820);
        float r14830 = y_im;
        float r14831 = r14829 * r14830;
        float r14832 = r14828 - r14831;
        float r14833 = exp(r14832);
        float r14834 = r14826 * r14830;
        float r14835 = r14829 * r14827;
        float r14836 = r14834 + r14835;
        float r14837 = sin(r14836);
        float r14838 = r14833 * r14837;
        return r14838;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r14839 = x_re;
        double r14840 = r14839 * r14839;
        double r14841 = x_im;
        double r14842 = r14841 * r14841;
        double r14843 = r14840 + r14842;
        double r14844 = sqrt(r14843);
        double r14845 = log(r14844);
        double r14846 = y_re;
        double r14847 = r14845 * r14846;
        double r14848 = atan2(r14841, r14839);
        double r14849 = y_im;
        double r14850 = r14848 * r14849;
        double r14851 = r14847 - r14850;
        double r14852 = exp(r14851);
        double r14853 = r14845 * r14849;
        double r14854 = r14848 * r14846;
        double r14855 = r14853 + r14854;
        double r14856 = sin(r14855);
        double r14857 = r14852 * r14856;
        return r14857;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r14858 = y_re;
        float r14859 = -4.4583597911297456e+184f;
        bool r14860 = r14858 <= r14859;
        float r14861 = x_im;
        float r14862 = x_re;
        float r14863 = hypot(r14861, r14862);
        float r14864 = pow(r14863, r14858);
        float r14865 = atan2(r14861, r14862);
        float r14866 = y_im;
        float r14867 = r14865 * r14866;
        float r14868 = 1.0f;
        float r14869 = 0.5f;
        float r14870 = r14865 * r14865;
        float r14871 = r14866 * r14866;
        float r14872 = r14870 * r14871;
        float r14873 = r14869 * r14872;
        float r14874 = r14868 + r14873;
        float r14875 = r14867 + r14874;
        float r14876 = r14864 / r14875;
        float r14877 = log(r14863);
        float r14878 = r14858 * r14865;
        float r14879 = fma(r14866, r14877, r14878);
        float r14880 = sin(r14879);
        float r14881 = r14876 * r14880;
        float r14882 = 7.471150229908471e-51f;
        bool r14883 = r14858 <= r14882;
        float r14884 = exp(r14866);
        float r14885 = pow(r14884, r14865);
        float r14886 = r14864 / r14885;
        float r14887 = cbrt(r14880);
        float r14888 = r14887 * (r14887 * r14887);
        float r14889 = r14886 * r14888;
        float r14890 = r14883 ? r14889 : r14881;
        float r14891 = r14860 ? r14881 : r14890;
        return r14891;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r14892 = y_re;
        double r14893 = -4.4583597911297456e+184;
        bool r14894 = r14892 <= r14893;
        double r14895 = x_im;
        double r14896 = x_re;
        double r14897 = hypot(r14895, r14896);
        double r14898 = pow(r14897, r14892);
        double r14899 = atan2(r14895, r14896);
        double r14900 = y_im;
        double r14901 = r14899 * r14900;
        double r14902 = 1.0;
        double r14903 = 0.5;
        double r14904 = r14899 * r14899;
        double r14905 = r14900 * r14900;
        double r14906 = r14904 * r14905;
        double r14907 = r14903 * r14906;
        double r14908 = r14902 + r14907;
        double r14909 = r14901 + r14908;
        double r14910 = r14898 / r14909;
        double r14911 = log(r14897);
        double r14912 = r14892 * r14899;
        double r14913 = fma(r14900, r14911, r14912);
        double r14914 = sin(r14913);
        double r14915 = r14910 * r14914;
        double r14916 = 7.471150229908471e-51;
        bool r14917 = r14892 <= r14916;
        double r14918 = exp(r14900);
        double r14919 = pow(r14918, r14899);
        double r14920 = r14898 / r14919;
        double r14921 = cbrt(r14914);
        double r14922 = r14921 * (r14921 * r14921);
        double r14923 = r14920 * r14922;
        double r14924 = r14917 ? r14923 : r14915;
        double r14925 = r14894 ? r14915 : r14924;
        return r14925;
}

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 r14926, r14927, r14928, r14929, r14930, r14931, r14932, r14933, r14934, r14935, r14936, r14937, r14938, r14939, r14940, r14941, r14942, r14943, r14944;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r14926);
        mpfr_init(r14927);
        mpfr_init(r14928);
        mpfr_init(r14929);
        mpfr_init(r14930);
        mpfr_init(r14931);
        mpfr_init(r14932);
        mpfr_init(r14933);
        mpfr_init(r14934);
        mpfr_init(r14935);
        mpfr_init(r14936);
        mpfr_init(r14937);
        mpfr_init(r14938);
        mpfr_init(r14939);
        mpfr_init(r14940);
        mpfr_init(r14941);
        mpfr_init(r14942);
        mpfr_init(r14943);
        mpfr_init(r14944);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r14926, x_re, MPFR_RNDN);
        mpfr_mul(r14927, r14926, r14926, MPFR_RNDN);
        mpfr_set_d(r14928, x_im, MPFR_RNDN);
        mpfr_mul(r14929, r14928, r14928, MPFR_RNDN);
        mpfr_add(r14930, r14927, r14929, MPFR_RNDN);
        mpfr_sqrt(r14931, r14930, MPFR_RNDN);
        mpfr_log(r14932, r14931, MPFR_RNDN);
        mpfr_set_d(r14933, y_re, MPFR_RNDN);
        mpfr_mul(r14934, r14932, r14933, MPFR_RNDN);
        mpfr_atan2(r14935, r14928, r14926, MPFR_RNDN);
        mpfr_set_d(r14936, y_im, MPFR_RNDN);
        mpfr_mul(r14937, r14935, r14936, MPFR_RNDN);
        mpfr_sub(r14938, r14934, r14937, MPFR_RNDN);
        mpfr_exp(r14939, r14938, MPFR_RNDN);
        mpfr_mul(r14940, r14932, r14936, MPFR_RNDN);
        mpfr_mul(r14941, r14935, r14933, MPFR_RNDN);
        mpfr_add(r14942, r14940, r14941, MPFR_RNDN);
        mpfr_sin(r14943, r14942, MPFR_RNDN);
        mpfr_mul(r14944, r14939, r14943, MPFR_RNDN);
        return mpfr_get_d(r14944, MPFR_RNDN);
}

static mpfr_t r14945, r14946, r14947, r14948, r14949, r14950, r14951, r14952, r14953, r14954, r14955, r14956, r14957, r14958, r14959, r14960, r14961, r14962, r14963, r14964, r14965, r14966, r14967, r14968, r14969, r14970, r14971, r14972, r14973, r14974, r14975, r14976, r14977, r14978;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r14945);
        mpfr_init_set_str(r14946, "-4.4583597911297456e+184", 10, MPFR_RNDN);
        mpfr_init(r14947);
        mpfr_init(r14948);
        mpfr_init(r14949);
        mpfr_init(r14950);
        mpfr_init(r14951);
        mpfr_init(r14952);
        mpfr_init(r14953);
        mpfr_init(r14954);
        mpfr_init_set_str(r14955, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r14956, "1/2", 10, MPFR_RNDN);
        mpfr_init(r14957);
        mpfr_init(r14958);
        mpfr_init(r14959);
        mpfr_init(r14960);
        mpfr_init(r14961);
        mpfr_init(r14962);
        mpfr_init(r14963);
        mpfr_init(r14964);
        mpfr_init(r14965);
        mpfr_init(r14966);
        mpfr_init(r14967);
        mpfr_init(r14968);
        mpfr_init_set_str(r14969, "7.471150229908471e-51", 10, MPFR_RNDN);
        mpfr_init(r14970);
        mpfr_init(r14971);
        mpfr_init(r14972);
        mpfr_init(r14973);
        mpfr_init(r14974);
        mpfr_init(r14975);
        mpfr_init(r14976);
        mpfr_init(r14977);
        mpfr_init(r14978);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r14945, y_re, MPFR_RNDN);
        ;
        mpfr_set_si(r14947, mpfr_cmp(r14945, r14946) <= 0, MPFR_RNDN);
        mpfr_set_d(r14948, x_im, MPFR_RNDN);
        mpfr_set_d(r14949, x_re, MPFR_RNDN);
        mpfr_hypot(r14950, r14948, r14949, MPFR_RNDN);
        mpfr_pow(r14951, r14950, r14945, MPFR_RNDN);
        mpfr_atan2(r14952, r14948, r14949, MPFR_RNDN);
        mpfr_set_d(r14953, y_im, MPFR_RNDN);
        mpfr_mul(r14954, r14952, r14953, MPFR_RNDN);
        ;
        ;
        mpfr_sqr(r14957, r14952, MPFR_RNDN);
        mpfr_sqr(r14958, r14953, MPFR_RNDN);
        mpfr_mul(r14959, r14957, r14958, MPFR_RNDN);
        mpfr_mul(r14960, r14956, r14959, MPFR_RNDN);
        mpfr_add(r14961, r14955, r14960, MPFR_RNDN);
        mpfr_add(r14962, r14954, r14961, MPFR_RNDN);
        mpfr_div(r14963, r14951, r14962, MPFR_RNDN);
        mpfr_log(r14964, r14950, MPFR_RNDN);
        mpfr_mul(r14965, r14945, r14952, MPFR_RNDN);
        mpfr_fma(r14966, r14953, r14964, r14965, MPFR_RNDN);
        mpfr_sin(r14967, r14966, MPFR_RNDN);
        mpfr_mul(r14968, r14963, r14967, MPFR_RNDN);
        ;
        mpfr_set_si(r14970, mpfr_cmp(r14945, r14969) <= 0, MPFR_RNDN);
        mpfr_exp(r14971, r14953, MPFR_RNDN);
        mpfr_pow(r14972, r14971, r14952, MPFR_RNDN);
        mpfr_div(r14973, r14951, r14972, MPFR_RNDN);
        mpfr_cbrt(r14974, r14967, MPFR_RNDN);
        mpfr_mul(r14975, r14974, r14974, MPFR_RNDN); mpfr_mul(r14975, r14975, r14974, MPFR_RNDN);
        mpfr_mul(r14976, r14973, r14975, MPFR_RNDN);
        if (mpfr_get_si(r14970, MPFR_RNDN)) { mpfr_set(r14977, r14976, MPFR_RNDN); } else { mpfr_set(r14977, r14968, MPFR_RNDN); };
        if (mpfr_get_si(r14947, MPFR_RNDN)) { mpfr_set(r14978, r14968, MPFR_RNDN); } else { mpfr_set(r14978, r14977, MPFR_RNDN); };
        return mpfr_get_d(r14978, MPFR_RNDN);
}

static mpfr_t r14979, r14980, r14981, r14982, r14983, r14984, r14985, r14986, r14987, r14988, r14989, r14990, r14991, r14992, r14993, r14994, r14995, r14996, r14997, r14998, r14999, r15000, r15001, r15002, r15003, r15004, r15005, r15006, r15007, r15008, r15009, r15010, r15011, r15012;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r14979);
        mpfr_init_set_str(r14980, "-4.4583597911297456e+184", 10, MPFR_RNDN);
        mpfr_init(r14981);
        mpfr_init(r14982);
        mpfr_init(r14983);
        mpfr_init(r14984);
        mpfr_init(r14985);
        mpfr_init(r14986);
        mpfr_init(r14987);
        mpfr_init(r14988);
        mpfr_init_set_str(r14989, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r14990, "1/2", 10, MPFR_RNDN);
        mpfr_init(r14991);
        mpfr_init(r14992);
        mpfr_init(r14993);
        mpfr_init(r14994);
        mpfr_init(r14995);
        mpfr_init(r14996);
        mpfr_init(r14997);
        mpfr_init(r14998);
        mpfr_init(r14999);
        mpfr_init(r15000);
        mpfr_init(r15001);
        mpfr_init(r15002);
        mpfr_init_set_str(r15003, "7.471150229908471e-51", 10, MPFR_RNDN);
        mpfr_init(r15004);
        mpfr_init(r15005);
        mpfr_init(r15006);
        mpfr_init(r15007);
        mpfr_init(r15008);
        mpfr_init(r15009);
        mpfr_init(r15010);
        mpfr_init(r15011);
        mpfr_init(r15012);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r14979, y_re, MPFR_RNDN);
        ;
        mpfr_set_si(r14981, mpfr_cmp(r14979, r14980) <= 0, MPFR_RNDN);
        mpfr_set_d(r14982, x_im, MPFR_RNDN);
        mpfr_set_d(r14983, x_re, MPFR_RNDN);
        mpfr_hypot(r14984, r14982, r14983, MPFR_RNDN);
        mpfr_pow(r14985, r14984, r14979, MPFR_RNDN);
        mpfr_atan2(r14986, r14982, r14983, MPFR_RNDN);
        mpfr_set_d(r14987, y_im, MPFR_RNDN);
        mpfr_mul(r14988, r14986, r14987, MPFR_RNDN);
        ;
        ;
        mpfr_sqr(r14991, r14986, MPFR_RNDN);
        mpfr_sqr(r14992, r14987, MPFR_RNDN);
        mpfr_mul(r14993, r14991, r14992, MPFR_RNDN);
        mpfr_mul(r14994, r14990, r14993, MPFR_RNDN);
        mpfr_add(r14995, r14989, r14994, MPFR_RNDN);
        mpfr_add(r14996, r14988, r14995, MPFR_RNDN);
        mpfr_div(r14997, r14985, r14996, MPFR_RNDN);
        mpfr_log(r14998, r14984, MPFR_RNDN);
        mpfr_mul(r14999, r14979, r14986, MPFR_RNDN);
        mpfr_fma(r15000, r14987, r14998, r14999, MPFR_RNDN);
        mpfr_sin(r15001, r15000, MPFR_RNDN);
        mpfr_mul(r15002, r14997, r15001, MPFR_RNDN);
        ;
        mpfr_set_si(r15004, mpfr_cmp(r14979, r15003) <= 0, MPFR_RNDN);
        mpfr_exp(r15005, r14987, MPFR_RNDN);
        mpfr_pow(r15006, r15005, r14986, MPFR_RNDN);
        mpfr_div(r15007, r14985, r15006, MPFR_RNDN);
        mpfr_cbrt(r15008, r15001, MPFR_RNDN);
        mpfr_mul(r15009, r15008, r15008, MPFR_RNDN); mpfr_mul(r15009, r15009, r15008, MPFR_RNDN);
        mpfr_mul(r15010, r15007, r15009, MPFR_RNDN);
        if (mpfr_get_si(r15004, MPFR_RNDN)) { mpfr_set(r15011, r15010, MPFR_RNDN); } else { mpfr_set(r15011, r15002, MPFR_RNDN); };
        if (mpfr_get_si(r14981, MPFR_RNDN)) { mpfr_set(r15012, r15002, MPFR_RNDN); } else { mpfr_set(r15012, r15011, MPFR_RNDN); };
        return mpfr_get_d(r15012, MPFR_RNDN);
}

