#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 = x_re;
        float r14859 = r14858 * r14858;
        float r14860 = x_im;
        float r14861 = r14860 * r14860;
        float r14862 = r14859 + r14861;
        float r14863 = sqrt(r14862);
        float r14864 = log(r14863);
        float r14865 = y_im;
        float r14866 = r14864 * r14865;
        float r14867 = atan2(r14860, r14858);
        float r14868 = y_re;
        float r14869 = r14867 * r14868;
        float r14870 = r14866 + r14869;
        float r14871 = -6.878448459575947e+182f;
        bool r14872 = r14870 <= r14871;
        float r14873 = hypot(r14860, r14858);
        float r14874 = pow(r14873, r14868);
        float r14875 = r14865 * r14867;
        float r14876 = exp(r14875);
        float r14877 = r14874 / r14876;
        float r14878 = log(r14873);
        float r14879 = r14868 * r14867;
        float r14880 = fma(r14865, r14878, r14879);
        float r14881 = sin(r14880);
        float r14882 = cbrt(r14881);
        float r14883 = r14882 * (r14882 * r14882);
        float r14884 = r14877 * r14883;
        float r14885 = 5.171005914742556e+164f;
        bool r14886 = r14870 <= r14885;
        float r14887 = r14886 ? r14884 : r14884;
        float r14888 = r14872 ? r14884 : r14887;
        return r14888;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r14889 = x_re;
        double r14890 = r14889 * r14889;
        double r14891 = x_im;
        double r14892 = r14891 * r14891;
        double r14893 = r14890 + r14892;
        double r14894 = sqrt(r14893);
        double r14895 = log(r14894);
        double r14896 = y_im;
        double r14897 = r14895 * r14896;
        double r14898 = atan2(r14891, r14889);
        double r14899 = y_re;
        double r14900 = r14898 * r14899;
        double r14901 = r14897 + r14900;
        double r14902 = -6.878448459575947e+182;
        bool r14903 = r14901 <= r14902;
        double r14904 = hypot(r14891, r14889);
        double r14905 = pow(r14904, r14899);
        double r14906 = r14896 * r14898;
        double r14907 = exp(r14906);
        double r14908 = r14905 / r14907;
        double r14909 = log(r14904);
        double r14910 = r14899 * r14898;
        double r14911 = fma(r14896, r14909, r14910);
        double r14912 = sin(r14911);
        double r14913 = cbrt(r14912);
        double r14914 = r14913 * (r14913 * r14913);
        double r14915 = r14908 * r14914;
        double r14916 = 5.171005914742556e+164;
        bool r14917 = r14901 <= r14916;
        double r14918 = r14917 ? r14915 : r14915;
        double r14919 = r14903 ? r14915 : r14918;
        return r14919;
}

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 r14920, r14921, r14922, r14923, r14924, r14925, r14926, r14927, r14928, r14929, r14930, r14931, r14932, r14933, r14934, r14935, r14936, r14937, r14938;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r14920);
        mpfr_init(r14921);
        mpfr_init(r14922);
        mpfr_init(r14923);
        mpfr_init(r14924);
        mpfr_init(r14925);
        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);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r14920, x_re, MPFR_RNDN);
        mpfr_mul(r14921, r14920, r14920, MPFR_RNDN);
        mpfr_set_d(r14922, x_im, MPFR_RNDN);
        mpfr_mul(r14923, r14922, r14922, MPFR_RNDN);
        mpfr_add(r14924, r14921, r14923, MPFR_RNDN);
        mpfr_sqrt(r14925, r14924, MPFR_RNDN);
        mpfr_log(r14926, r14925, MPFR_RNDN);
        mpfr_set_d(r14927, y_re, MPFR_RNDN);
        mpfr_mul(r14928, r14926, r14927, MPFR_RNDN);
        mpfr_atan2(r14929, r14922, r14920, MPFR_RNDN);
        mpfr_set_d(r14930, y_im, MPFR_RNDN);
        mpfr_mul(r14931, r14929, r14930, MPFR_RNDN);
        mpfr_sub(r14932, r14928, r14931, MPFR_RNDN);
        mpfr_exp(r14933, r14932, MPFR_RNDN);
        mpfr_mul(r14934, r14926, r14930, MPFR_RNDN);
        mpfr_mul(r14935, r14929, r14927, MPFR_RNDN);
        mpfr_add(r14936, r14934, r14935, MPFR_RNDN);
        mpfr_sin(r14937, r14936, MPFR_RNDN);
        mpfr_mul(r14938, r14933, r14937, MPFR_RNDN);
        return mpfr_get_d(r14938, MPFR_RNDN);
}

static mpfr_t r14939, r14940, r14941, r14942, r14943, r14944, 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;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r14939);
        mpfr_init(r14940);
        mpfr_init(r14941);
        mpfr_init(r14942);
        mpfr_init(r14943);
        mpfr_init(r14944);
        mpfr_init(r14945);
        mpfr_init(r14946);
        mpfr_init(r14947);
        mpfr_init(r14948);
        mpfr_init(r14949);
        mpfr_init(r14950);
        mpfr_init(r14951);
        mpfr_init_set_str(r14952, "-6.878448459575947e+182", 10, MPFR_RNDN);
        mpfr_init(r14953);
        mpfr_init(r14954);
        mpfr_init(r14955);
        mpfr_init(r14956);
        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_set_str(r14966, "5.171005914742556e+164", 10, MPFR_RNDN);
        mpfr_init(r14967);
        mpfr_init(r14968);
        mpfr_init(r14969);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r14939, x_re, MPFR_RNDN);
        mpfr_mul(r14940, r14939, r14939, MPFR_RNDN);
        mpfr_set_d(r14941, x_im, MPFR_RNDN);
        mpfr_mul(r14942, r14941, r14941, MPFR_RNDN);
        mpfr_add(r14943, r14940, r14942, MPFR_RNDN);
        mpfr_sqrt(r14944, r14943, MPFR_RNDN);
        mpfr_log(r14945, r14944, MPFR_RNDN);
        mpfr_set_d(r14946, y_im, MPFR_RNDN);
        mpfr_mul(r14947, r14945, r14946, MPFR_RNDN);
        mpfr_atan2(r14948, r14941, r14939, MPFR_RNDN);
        mpfr_set_d(r14949, y_re, MPFR_RNDN);
        mpfr_mul(r14950, r14948, r14949, MPFR_RNDN);
        mpfr_add(r14951, r14947, r14950, MPFR_RNDN);
        ;
        mpfr_set_si(r14953, mpfr_cmp(r14951, r14952) <= 0, MPFR_RNDN);
        mpfr_hypot(r14954, r14941, r14939, MPFR_RNDN);
        mpfr_pow(r14955, r14954, r14949, MPFR_RNDN);
        mpfr_mul(r14956, r14946, r14948, MPFR_RNDN);
        mpfr_exp(r14957, r14956, MPFR_RNDN);
        mpfr_div(r14958, r14955, r14957, MPFR_RNDN);
        mpfr_log(r14959, r14954, MPFR_RNDN);
        mpfr_mul(r14960, r14949, r14948, MPFR_RNDN);
        mpfr_fma(r14961, r14946, r14959, r14960, MPFR_RNDN);
        mpfr_sin(r14962, r14961, MPFR_RNDN);
        mpfr_cbrt(r14963, r14962, MPFR_RNDN);
        mpfr_mul(r14964, r14963, r14963, MPFR_RNDN); mpfr_mul(r14964, r14964, r14963, MPFR_RNDN);
        mpfr_mul(r14965, r14958, r14964, MPFR_RNDN);
        ;
        mpfr_set_si(r14967, mpfr_cmp(r14951, r14966) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r14967, MPFR_RNDN)) { mpfr_set(r14968, r14965, MPFR_RNDN); } else { mpfr_set(r14968, r14965, MPFR_RNDN); };
        if (mpfr_get_si(r14953, MPFR_RNDN)) { mpfr_set(r14969, r14965, MPFR_RNDN); } else { mpfr_set(r14969, r14968, MPFR_RNDN); };
        return mpfr_get_d(r14969, MPFR_RNDN);
}

static mpfr_t r14970, r14971, r14972, r14973, r14974, r14975, r14976, r14977, r14978, r14979, r14980, r14981, r14982, r14983, r14984, r14985, r14986, r14987, r14988, r14989, r14990, r14991, r14992, r14993, r14994, r14995, r14996, r14997, r14998, r14999, r15000;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        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);
        mpfr_init(r14979);
        mpfr_init(r14980);
        mpfr_init(r14981);
        mpfr_init(r14982);
        mpfr_init_set_str(r14983, "-6.878448459575947e+182", 10, MPFR_RNDN);
        mpfr_init(r14984);
        mpfr_init(r14985);
        mpfr_init(r14986);
        mpfr_init(r14987);
        mpfr_init(r14988);
        mpfr_init(r14989);
        mpfr_init(r14990);
        mpfr_init(r14991);
        mpfr_init(r14992);
        mpfr_init(r14993);
        mpfr_init(r14994);
        mpfr_init(r14995);
        mpfr_init(r14996);
        mpfr_init_set_str(r14997, "5.171005914742556e+164", 10, MPFR_RNDN);
        mpfr_init(r14998);
        mpfr_init(r14999);
        mpfr_init(r15000);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r14970, x_re, MPFR_RNDN);
        mpfr_mul(r14971, r14970, r14970, MPFR_RNDN);
        mpfr_set_d(r14972, x_im, MPFR_RNDN);
        mpfr_mul(r14973, r14972, r14972, MPFR_RNDN);
        mpfr_add(r14974, r14971, r14973, MPFR_RNDN);
        mpfr_sqrt(r14975, r14974, MPFR_RNDN);
        mpfr_log(r14976, r14975, MPFR_RNDN);
        mpfr_set_d(r14977, y_im, MPFR_RNDN);
        mpfr_mul(r14978, r14976, r14977, MPFR_RNDN);
        mpfr_atan2(r14979, r14972, r14970, MPFR_RNDN);
        mpfr_set_d(r14980, y_re, MPFR_RNDN);
        mpfr_mul(r14981, r14979, r14980, MPFR_RNDN);
        mpfr_add(r14982, r14978, r14981, MPFR_RNDN);
        ;
        mpfr_set_si(r14984, mpfr_cmp(r14982, r14983) <= 0, MPFR_RNDN);
        mpfr_hypot(r14985, r14972, r14970, MPFR_RNDN);
        mpfr_pow(r14986, r14985, r14980, MPFR_RNDN);
        mpfr_mul(r14987, r14977, r14979, MPFR_RNDN);
        mpfr_exp(r14988, r14987, MPFR_RNDN);
        mpfr_div(r14989, r14986, r14988, MPFR_RNDN);
        mpfr_log(r14990, r14985, MPFR_RNDN);
        mpfr_mul(r14991, r14980, r14979, MPFR_RNDN);
        mpfr_fma(r14992, r14977, r14990, r14991, MPFR_RNDN);
        mpfr_sin(r14993, r14992, MPFR_RNDN);
        mpfr_cbrt(r14994, r14993, MPFR_RNDN);
        mpfr_mul(r14995, r14994, r14994, MPFR_RNDN); mpfr_mul(r14995, r14995, r14994, MPFR_RNDN);
        mpfr_mul(r14996, r14989, r14995, MPFR_RNDN);
        ;
        mpfr_set_si(r14998, mpfr_cmp(r14982, r14997) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r14998, MPFR_RNDN)) { mpfr_set(r14999, r14996, MPFR_RNDN); } else { mpfr_set(r14999, r14996, MPFR_RNDN); };
        if (mpfr_get_si(r14984, MPFR_RNDN)) { mpfr_set(r15000, r14996, MPFR_RNDN); } else { mpfr_set(r15000, r14999, MPFR_RNDN); };
        return mpfr_get_d(r15000, MPFR_RNDN);
}

