#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "powComplex, real part";

double f_if(float x_re, float x_im, float y_re, float y_im) {
        float r7786 = x_re;
        float r7787 = r7786 * r7786;
        float r7788 = x_im;
        float r7789 = r7788 * r7788;
        float r7790 = r7787 + r7789;
        float r7791 = sqrt(r7790);
        float r7792 = log(r7791);
        float r7793 = y_re;
        float r7794 = r7792 * r7793;
        float r7795 = atan2(r7788, r7786);
        float r7796 = y_im;
        float r7797 = r7795 * r7796;
        float r7798 = r7794 - r7797;
        float r7799 = exp(r7798);
        float r7800 = r7792 * r7796;
        float r7801 = r7795 * r7793;
        float r7802 = r7800 + r7801;
        float r7803 = cos(r7802);
        float r7804 = r7799 * r7803;
        return r7804;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r7805 = x_re;
        double r7806 = r7805 * r7805;
        double r7807 = x_im;
        double r7808 = r7807 * r7807;
        double r7809 = r7806 + r7808;
        double r7810 = sqrt(r7809);
        double r7811 = log(r7810);
        double r7812 = y_re;
        double r7813 = r7811 * r7812;
        double r7814 = atan2(r7807, r7805);
        double r7815 = y_im;
        double r7816 = r7814 * r7815;
        double r7817 = r7813 - r7816;
        double r7818 = exp(r7817);
        double r7819 = r7811 * r7815;
        double r7820 = r7814 * r7812;
        double r7821 = r7819 + r7820;
        double r7822 = cos(r7821);
        double r7823 = r7818 * r7822;
        return r7823;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r7824 = y_im;
        float r7825 = x_re;
        float r7826 = x_im;
        float r7827 = hypot(r7825, r7826);
        float r7828 = log(r7827);
        float r7829 = atan2(r7826, r7825);
        float r7830 = y_re;
        float r7831 = r7829 * r7830;
        float r7832 = fma(r7824, r7828, r7831);
        float r7833 = cos(r7832);
        float r7834 = r7824 * r7829;
        float r7835 = 1/2;
        float r7836 = 2;
        float r7837 = pow(r7824, r7836);
        float r7838 = pow(r7829, r7836);
        float r7839 = r7837 * r7838;
        float r7840 = r7835 * r7839;
        float r7841 = 1;
        float r7842 = r7840 + r7841;
        float r7843 = r7834 + r7842;
        float r7844 = pow(r7827, r7830);
        float r7845 = r7843 / r7844;
        float r7846 = r7833 / r7845;
        float r7847 = -4.33128120013373e-310;
        bool r7848 = r7846 <= r7847;
        float r7849 = exp(r7833);
        float r7850 = cbrt(r7849);
        float r7851 = r7850 * r7850;
        float r7852 = log(r7851);
        float r7853 = log(r7850);
        float r7854 = r7852 + r7853;
        float r7855 = exp(r7834);
        float r7856 = r7855 / r7844;
        float r7857 = r7854 / r7856;
        float r7858 = 4.89198954010487e-310;
        bool r7859 = r7846 <= r7858;
        float r7860 = log(r7849);
        float r7861 = cbrt(r7834);
        float r7862 = r7861 * r7861;
        float r7863 = cbrt(r7861);
        float r7864 = r7863 * r7863;
        float r7865 = r7864 * r7863;
        float r7866 = r7862 * r7865;
        float r7867 = exp(r7866);
        float r7868 = r7867 / r7844;
        float r7869 = r7860 / r7868;
        float r7870 = r7859 ? r7846 : r7869;
        float r7871 = r7848 ? r7857 : r7870;
        return r7871;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r7872 = y_im;
        double r7873 = x_re;
        double r7874 = x_im;
        double r7875 = hypot(r7873, r7874);
        double r7876 = log(r7875);
        double r7877 = atan2(r7874, r7873);
        double r7878 = y_re;
        double r7879 = r7877 * r7878;
        double r7880 = fma(r7872, r7876, r7879);
        double r7881 = cos(r7880);
        double r7882 = r7872 * r7877;
        double r7883 = 1/2;
        double r7884 = 2;
        double r7885 = pow(r7872, r7884);
        double r7886 = pow(r7877, r7884);
        double r7887 = r7885 * r7886;
        double r7888 = r7883 * r7887;
        double r7889 = 1;
        double r7890 = r7888 + r7889;
        double r7891 = r7882 + r7890;
        double r7892 = pow(r7875, r7878);
        double r7893 = r7891 / r7892;
        double r7894 = r7881 / r7893;
        double r7895 = -4.33128120013373e-310;
        bool r7896 = r7894 <= r7895;
        double r7897 = exp(r7881);
        double r7898 = cbrt(r7897);
        double r7899 = r7898 * r7898;
        double r7900 = log(r7899);
        double r7901 = log(r7898);
        double r7902 = r7900 + r7901;
        double r7903 = exp(r7882);
        double r7904 = r7903 / r7892;
        double r7905 = r7902 / r7904;
        double r7906 = 4.89198954010487e-310;
        bool r7907 = r7894 <= r7906;
        double r7908 = log(r7897);
        double r7909 = cbrt(r7882);
        double r7910 = r7909 * r7909;
        double r7911 = cbrt(r7909);
        double r7912 = r7911 * r7911;
        double r7913 = r7912 * r7911;
        double r7914 = r7910 * r7913;
        double r7915 = exp(r7914);
        double r7916 = r7915 / r7892;
        double r7917 = r7908 / r7916;
        double r7918 = r7907 ? r7894 : r7917;
        double r7919 = r7896 ? r7905 : r7918;
        return r7919;
}

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 r7920, r7921, r7922, r7923, r7924, r7925, r7926, r7927, r7928, r7929, r7930, r7931, r7932, r7933, r7934, r7935, r7936, r7937, r7938;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1616);
        mpfr_init(r7920);
        mpfr_init(r7921);
        mpfr_init(r7922);
        mpfr_init(r7923);
        mpfr_init(r7924);
        mpfr_init(r7925);
        mpfr_init(r7926);
        mpfr_init(r7927);
        mpfr_init(r7928);
        mpfr_init(r7929);
        mpfr_init(r7930);
        mpfr_init(r7931);
        mpfr_init(r7932);
        mpfr_init(r7933);
        mpfr_init(r7934);
        mpfr_init(r7935);
        mpfr_init(r7936);
        mpfr_init(r7937);
        mpfr_init(r7938);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7920, x_re, MPFR_RNDN);
        mpfr_mul(r7921, r7920, r7920, MPFR_RNDN);
        mpfr_set_d(r7922, x_im, MPFR_RNDN);
        mpfr_mul(r7923, r7922, r7922, MPFR_RNDN);
        mpfr_add(r7924, r7921, r7923, MPFR_RNDN);
        mpfr_sqrt(r7925, r7924, MPFR_RNDN);
        mpfr_log(r7926, r7925, MPFR_RNDN);
        mpfr_set_d(r7927, y_re, MPFR_RNDN);
        mpfr_mul(r7928, r7926, r7927, MPFR_RNDN);
        mpfr_atan2(r7929, r7922, r7920, MPFR_RNDN);
        mpfr_set_d(r7930, y_im, MPFR_RNDN);
        mpfr_mul(r7931, r7929, r7930, MPFR_RNDN);
        mpfr_sub(r7932, r7928, r7931, MPFR_RNDN);
        mpfr_exp(r7933, r7932, MPFR_RNDN);
        mpfr_mul(r7934, r7926, r7930, MPFR_RNDN);
        mpfr_mul(r7935, r7929, r7927, MPFR_RNDN);
        mpfr_add(r7936, r7934, r7935, MPFR_RNDN);
        mpfr_cos(r7937, r7936, MPFR_RNDN);
        mpfr_mul(r7938, r7933, r7937, MPFR_RNDN);
        return mpfr_get_d(r7938, MPFR_RNDN);
}

static mpfr_t r7939, r7940, r7941, r7942, r7943, r7944, r7945, r7946, r7947, r7948, r7949, r7950, r7951, r7952, r7953, r7954, r7955, r7956, r7957, r7958, r7959, r7960, r7961, r7962, r7963, r7964, r7965, r7966, r7967, r7968, r7969, r7970, r7971, r7972, r7973, r7974, r7975, r7976, r7977, r7978, r7979, r7980, r7981, r7982, r7983, r7984, r7985, r7986;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1616);
        mpfr_init(r7939);
        mpfr_init(r7940);
        mpfr_init(r7941);
        mpfr_init(r7942);
        mpfr_init(r7943);
        mpfr_init(r7944);
        mpfr_init(r7945);
        mpfr_init(r7946);
        mpfr_init(r7947);
        mpfr_init(r7948);
        mpfr_init(r7949);
        mpfr_init_set_str(r7950, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r7951, "2", 10, MPFR_RNDN);
        mpfr_init(r7952);
        mpfr_init(r7953);
        mpfr_init(r7954);
        mpfr_init(r7955);
        mpfr_init_set_str(r7956, "1", 10, MPFR_RNDN);
        mpfr_init(r7957);
        mpfr_init(r7958);
        mpfr_init(r7959);
        mpfr_init(r7960);
        mpfr_init(r7961);
        mpfr_init_set_str(r7962, "-4.33128120013373e-310", 10, MPFR_RNDN);
        mpfr_init(r7963);
        mpfr_init(r7964);
        mpfr_init(r7965);
        mpfr_init(r7966);
        mpfr_init(r7967);
        mpfr_init(r7968);
        mpfr_init(r7969);
        mpfr_init(r7970);
        mpfr_init(r7971);
        mpfr_init(r7972);
        mpfr_init_set_str(r7973, "4.89198954010487e-310", 10, MPFR_RNDN);
        mpfr_init(r7974);
        mpfr_init(r7975);
        mpfr_init(r7976);
        mpfr_init(r7977);
        mpfr_init(r7978);
        mpfr_init(r7979);
        mpfr_init(r7980);
        mpfr_init(r7981);
        mpfr_init(r7982);
        mpfr_init(r7983);
        mpfr_init(r7984);
        mpfr_init(r7985);
        mpfr_init(r7986);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7939, y_im, MPFR_RNDN);
        mpfr_set_d(r7940, x_re, MPFR_RNDN);
        mpfr_set_d(r7941, x_im, MPFR_RNDN);
        mpfr_hypot(r7942, r7940, r7941, MPFR_RNDN);
        mpfr_log(r7943, r7942, MPFR_RNDN);
        mpfr_atan2(r7944, r7941, r7940, MPFR_RNDN);
        mpfr_set_d(r7945, y_re, MPFR_RNDN);
        mpfr_mul(r7946, r7944, r7945, MPFR_RNDN);
        mpfr_fma(r7947, r7939, r7943, r7946, MPFR_RNDN);
        mpfr_cos(r7948, r7947, MPFR_RNDN);
        mpfr_mul(r7949, r7939, r7944, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r7952, r7939, r7951, MPFR_RNDN);
        mpfr_pow(r7953, r7944, r7951, MPFR_RNDN);
        mpfr_mul(r7954, r7952, r7953, MPFR_RNDN);
        mpfr_mul(r7955, r7950, r7954, MPFR_RNDN);
        ;
        mpfr_add(r7957, r7955, r7956, MPFR_RNDN);
        mpfr_add(r7958, r7949, r7957, MPFR_RNDN);
        mpfr_pow(r7959, r7942, r7945, MPFR_RNDN);
        mpfr_div(r7960, r7958, r7959, MPFR_RNDN);
        mpfr_div(r7961, r7948, r7960, MPFR_RNDN);
        ;
        mpfr_set_si(r7963, mpfr_cmp(r7961, r7962) <= 0, MPFR_RNDN);
        mpfr_exp(r7964, r7948, MPFR_RNDN);
        mpfr_cbrt(r7965, r7964, MPFR_RNDN);
        mpfr_mul(r7966, r7965, r7965, MPFR_RNDN);
        mpfr_log(r7967, r7966, MPFR_RNDN);
        mpfr_log(r7968, r7965, MPFR_RNDN);
        mpfr_add(r7969, r7967, r7968, MPFR_RNDN);
        mpfr_exp(r7970, r7949, MPFR_RNDN);
        mpfr_div(r7971, r7970, r7959, MPFR_RNDN);
        mpfr_div(r7972, r7969, r7971, MPFR_RNDN);
        ;
        mpfr_set_si(r7974, mpfr_cmp(r7961, r7973) <= 0, MPFR_RNDN);
        mpfr_log(r7975, r7964, MPFR_RNDN);
        mpfr_cbrt(r7976, r7949, MPFR_RNDN);
        mpfr_mul(r7977, r7976, r7976, MPFR_RNDN);
        mpfr_cbrt(r7978, r7976, MPFR_RNDN);
        mpfr_mul(r7979, r7978, r7978, MPFR_RNDN);
        mpfr_mul(r7980, r7979, r7978, MPFR_RNDN);
        mpfr_mul(r7981, r7977, r7980, MPFR_RNDN);
        mpfr_exp(r7982, r7981, MPFR_RNDN);
        mpfr_div(r7983, r7982, r7959, MPFR_RNDN);
        mpfr_div(r7984, r7975, r7983, MPFR_RNDN);
        if (mpfr_get_si(r7974, MPFR_RNDN)) { mpfr_set(r7985, r7961, MPFR_RNDN); } else { mpfr_set(r7985, r7984, MPFR_RNDN); };
        if (mpfr_get_si(r7963, MPFR_RNDN)) { mpfr_set(r7986, r7972, MPFR_RNDN); } else { mpfr_set(r7986, r7985, MPFR_RNDN); };
        return mpfr_get_d(r7986, MPFR_RNDN);
}

static mpfr_t r7987, r7988, r7989, r7990, r7991, r7992, r7993, r7994, r7995, r7996, r7997, r7998, r7999, r8000, r8001, r8002, r8003, r8004, r8005, r8006, r8007, r8008, r8009, r8010, r8011, r8012, r8013, r8014, r8015, r8016, r8017, r8018, r8019, r8020, r8021, r8022, r8023, r8024, r8025, r8026, r8027, r8028, r8029, r8030, r8031, r8032, r8033, r8034;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1616);
        mpfr_init(r7987);
        mpfr_init(r7988);
        mpfr_init(r7989);
        mpfr_init(r7990);
        mpfr_init(r7991);
        mpfr_init(r7992);
        mpfr_init(r7993);
        mpfr_init(r7994);
        mpfr_init(r7995);
        mpfr_init(r7996);
        mpfr_init(r7997);
        mpfr_init_set_str(r7998, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r7999, "2", 10, MPFR_RNDN);
        mpfr_init(r8000);
        mpfr_init(r8001);
        mpfr_init(r8002);
        mpfr_init(r8003);
        mpfr_init_set_str(r8004, "1", 10, MPFR_RNDN);
        mpfr_init(r8005);
        mpfr_init(r8006);
        mpfr_init(r8007);
        mpfr_init(r8008);
        mpfr_init(r8009);
        mpfr_init_set_str(r8010, "-4.33128120013373e-310", 10, MPFR_RNDN);
        mpfr_init(r8011);
        mpfr_init(r8012);
        mpfr_init(r8013);
        mpfr_init(r8014);
        mpfr_init(r8015);
        mpfr_init(r8016);
        mpfr_init(r8017);
        mpfr_init(r8018);
        mpfr_init(r8019);
        mpfr_init(r8020);
        mpfr_init_set_str(r8021, "4.89198954010487e-310", 10, MPFR_RNDN);
        mpfr_init(r8022);
        mpfr_init(r8023);
        mpfr_init(r8024);
        mpfr_init(r8025);
        mpfr_init(r8026);
        mpfr_init(r8027);
        mpfr_init(r8028);
        mpfr_init(r8029);
        mpfr_init(r8030);
        mpfr_init(r8031);
        mpfr_init(r8032);
        mpfr_init(r8033);
        mpfr_init(r8034);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7987, y_im, MPFR_RNDN);
        mpfr_set_d(r7988, x_re, MPFR_RNDN);
        mpfr_set_d(r7989, x_im, MPFR_RNDN);
        mpfr_hypot(r7990, r7988, r7989, MPFR_RNDN);
        mpfr_log(r7991, r7990, MPFR_RNDN);
        mpfr_atan2(r7992, r7989, r7988, MPFR_RNDN);
        mpfr_set_d(r7993, y_re, MPFR_RNDN);
        mpfr_mul(r7994, r7992, r7993, MPFR_RNDN);
        mpfr_fma(r7995, r7987, r7991, r7994, MPFR_RNDN);
        mpfr_cos(r7996, r7995, MPFR_RNDN);
        mpfr_mul(r7997, r7987, r7992, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8000, r7987, r7999, MPFR_RNDN);
        mpfr_pow(r8001, r7992, r7999, MPFR_RNDN);
        mpfr_mul(r8002, r8000, r8001, MPFR_RNDN);
        mpfr_mul(r8003, r7998, r8002, MPFR_RNDN);
        ;
        mpfr_add(r8005, r8003, r8004, MPFR_RNDN);
        mpfr_add(r8006, r7997, r8005, MPFR_RNDN);
        mpfr_pow(r8007, r7990, r7993, MPFR_RNDN);
        mpfr_div(r8008, r8006, r8007, MPFR_RNDN);
        mpfr_div(r8009, r7996, r8008, MPFR_RNDN);
        ;
        mpfr_set_si(r8011, mpfr_cmp(r8009, r8010) <= 0, MPFR_RNDN);
        mpfr_exp(r8012, r7996, MPFR_RNDN);
        mpfr_cbrt(r8013, r8012, MPFR_RNDN);
        mpfr_mul(r8014, r8013, r8013, MPFR_RNDN);
        mpfr_log(r8015, r8014, MPFR_RNDN);
        mpfr_log(r8016, r8013, MPFR_RNDN);
        mpfr_add(r8017, r8015, r8016, MPFR_RNDN);
        mpfr_exp(r8018, r7997, MPFR_RNDN);
        mpfr_div(r8019, r8018, r8007, MPFR_RNDN);
        mpfr_div(r8020, r8017, r8019, MPFR_RNDN);
        ;
        mpfr_set_si(r8022, mpfr_cmp(r8009, r8021) <= 0, MPFR_RNDN);
        mpfr_log(r8023, r8012, MPFR_RNDN);
        mpfr_cbrt(r8024, r7997, MPFR_RNDN);
        mpfr_mul(r8025, r8024, r8024, MPFR_RNDN);
        mpfr_cbrt(r8026, r8024, MPFR_RNDN);
        mpfr_mul(r8027, r8026, r8026, MPFR_RNDN);
        mpfr_mul(r8028, r8027, r8026, MPFR_RNDN);
        mpfr_mul(r8029, r8025, r8028, MPFR_RNDN);
        mpfr_exp(r8030, r8029, MPFR_RNDN);
        mpfr_div(r8031, r8030, r8007, MPFR_RNDN);
        mpfr_div(r8032, r8023, r8031, MPFR_RNDN);
        if (mpfr_get_si(r8022, MPFR_RNDN)) { mpfr_set(r8033, r8009, MPFR_RNDN); } else { mpfr_set(r8033, r8032, MPFR_RNDN); };
        if (mpfr_get_si(r8011, MPFR_RNDN)) { mpfr_set(r8034, r8020, MPFR_RNDN); } else { mpfr_set(r8034, r8033, MPFR_RNDN); };
        return mpfr_get_d(r8034, MPFR_RNDN);
}

