#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 r19763 = x_re;
        float r19764 = r19763 * r19763;
        float r19765 = x_im;
        float r19766 = r19765 * r19765;
        float r19767 = r19764 + r19766;
        float r19768 = sqrt(r19767);
        float r19769 = log(r19768);
        float r19770 = y_re;
        float r19771 = r19769 * r19770;
        float r19772 = atan2(r19765, r19763);
        float r19773 = y_im;
        float r19774 = r19772 * r19773;
        float r19775 = r19771 - r19774;
        float r19776 = exp(r19775);
        float r19777 = r19769 * r19773;
        float r19778 = r19772 * r19770;
        float r19779 = r19777 + r19778;
        float r19780 = sin(r19779);
        float r19781 = r19776 * r19780;
        return r19781;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r19782 = x_re;
        double r19783 = r19782 * r19782;
        double r19784 = x_im;
        double r19785 = r19784 * r19784;
        double r19786 = r19783 + r19785;
        double r19787 = sqrt(r19786);
        double r19788 = log(r19787);
        double r19789 = y_re;
        double r19790 = r19788 * r19789;
        double r19791 = atan2(r19784, r19782);
        double r19792 = y_im;
        double r19793 = r19791 * r19792;
        double r19794 = r19790 - r19793;
        double r19795 = exp(r19794);
        double r19796 = r19788 * r19792;
        double r19797 = r19791 * r19789;
        double r19798 = r19796 + r19797;
        double r19799 = sin(r19798);
        double r19800 = r19795 * r19799;
        return r19800;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r19801 = x_im;
        float r19802 = -1.0942316613593581;
        bool r19803 = r19801 <= r19802;
        float r19804 = y_re;
        float r19805 = x_re;
        float r19806 = atan2(r19801, r19805);
        float r19807 = r19804 * r19806;
        float r19808 = y_im;
        float r19809 = -r19801;
        float r19810 = log(r19809);
        float r19811 = r19808 * r19810;
        float r19812 = r19807 + r19811;
        float r19813 = sin(r19812);
        float r19814 = exp(r19808);
        float r19815 = pow(r19814, r19806);
        float r19816 = r19801 * r19801;
        float r19817 = r19805 * r19805;
        float r19818 = r19816 + r19817;
        float r19819 = sqrt(r19818);
        float r19820 = pow(r19819, r19804);
        float r19821 = r19815 / r19820;
        float r19822 = r19813 / r19821;
        float r19823 = -1.3319119653305858e-115;
        bool r19824 = r19801 <= r19823;
        float r19825 = log(r19819);
        float r19826 = r19808 * r19825;
        float r19827 = r19806 * r19804;
        float r19828 = cbrt(r19827);
        float r19829 = r19828 * r19828;
        float r19830 = r19829 * r19828;
        float r19831 = r19826 + r19830;
        float r19832 = sin(r19831);
        float r19833 = r19832 / r19821;
        float r19834 = -1.430093898044764e-294;
        bool r19835 = r19801 <= r19834;
        float r19836 = log(r19801);
        float r19837 = r19808 * r19836;
        float r19838 = r19837 + r19827;
        float r19839 = sin(r19838);
        float r19840 = r19839 / r19821;
        float r19841 = r19835 ? r19822 : r19840;
        float r19842 = r19824 ? r19833 : r19841;
        float r19843 = r19803 ? r19822 : r19842;
        return r19843;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r19844 = x_im;
        double r19845 = -1.0942316613593581;
        bool r19846 = r19844 <= r19845;
        double r19847 = y_re;
        double r19848 = x_re;
        double r19849 = atan2(r19844, r19848);
        double r19850 = r19847 * r19849;
        double r19851 = y_im;
        double r19852 = -r19844;
        double r19853 = log(r19852);
        double r19854 = r19851 * r19853;
        double r19855 = r19850 + r19854;
        double r19856 = sin(r19855);
        double r19857 = exp(r19851);
        double r19858 = pow(r19857, r19849);
        double r19859 = r19844 * r19844;
        double r19860 = r19848 * r19848;
        double r19861 = r19859 + r19860;
        double r19862 = sqrt(r19861);
        double r19863 = pow(r19862, r19847);
        double r19864 = r19858 / r19863;
        double r19865 = r19856 / r19864;
        double r19866 = -1.3319119653305858e-115;
        bool r19867 = r19844 <= r19866;
        double r19868 = log(r19862);
        double r19869 = r19851 * r19868;
        double r19870 = r19849 * r19847;
        double r19871 = cbrt(r19870);
        double r19872 = r19871 * r19871;
        double r19873 = r19872 * r19871;
        double r19874 = r19869 + r19873;
        double r19875 = sin(r19874);
        double r19876 = r19875 / r19864;
        double r19877 = -1.430093898044764e-294;
        bool r19878 = r19844 <= r19877;
        double r19879 = log(r19844);
        double r19880 = r19851 * r19879;
        double r19881 = r19880 + r19870;
        double r19882 = sin(r19881);
        double r19883 = r19882 / r19864;
        double r19884 = r19878 ? r19865 : r19883;
        double r19885 = r19867 ? r19876 : r19884;
        double r19886 = r19846 ? r19865 : r19885;
        return r19886;
}

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 r19887, r19888, r19889, r19890, r19891, r19892, r19893, r19894, r19895, r19896, r19897, r19898, r19899, r19900, r19901, r19902, r19903, r19904, r19905;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2192);
        mpfr_init(r19887);
        mpfr_init(r19888);
        mpfr_init(r19889);
        mpfr_init(r19890);
        mpfr_init(r19891);
        mpfr_init(r19892);
        mpfr_init(r19893);
        mpfr_init(r19894);
        mpfr_init(r19895);
        mpfr_init(r19896);
        mpfr_init(r19897);
        mpfr_init(r19898);
        mpfr_init(r19899);
        mpfr_init(r19900);
        mpfr_init(r19901);
        mpfr_init(r19902);
        mpfr_init(r19903);
        mpfr_init(r19904);
        mpfr_init(r19905);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r19887, x_re, MPFR_RNDN);
        mpfr_mul(r19888, r19887, r19887, MPFR_RNDN);
        mpfr_set_d(r19889, x_im, MPFR_RNDN);
        mpfr_mul(r19890, r19889, r19889, MPFR_RNDN);
        mpfr_add(r19891, r19888, r19890, MPFR_RNDN);
        mpfr_sqrt(r19892, r19891, MPFR_RNDN);
        mpfr_log(r19893, r19892, MPFR_RNDN);
        mpfr_set_d(r19894, y_re, MPFR_RNDN);
        mpfr_mul(r19895, r19893, r19894, MPFR_RNDN);
        mpfr_atan2(r19896, r19889, r19887, MPFR_RNDN);
        mpfr_set_d(r19897, y_im, MPFR_RNDN);
        mpfr_mul(r19898, r19896, r19897, MPFR_RNDN);
        mpfr_sub(r19899, r19895, r19898, MPFR_RNDN);
        mpfr_exp(r19900, r19899, MPFR_RNDN);
        mpfr_mul(r19901, r19893, r19897, MPFR_RNDN);
        mpfr_mul(r19902, r19896, r19894, MPFR_RNDN);
        mpfr_add(r19903, r19901, r19902, MPFR_RNDN);
        mpfr_sin(r19904, r19903, MPFR_RNDN);
        mpfr_mul(r19905, r19900, r19904, MPFR_RNDN);
        return mpfr_get_d(r19905, MPFR_RNDN);
}

static mpfr_t r19906, r19907, r19908, r19909, r19910, r19911, r19912, r19913, r19914, r19915, r19916, r19917, r19918, r19919, r19920, r19921, r19922, r19923, r19924, r19925, r19926, r19927, r19928, r19929, r19930, r19931, r19932, r19933, r19934, r19935, r19936, r19937, r19938, r19939, r19940, r19941, r19942, r19943, r19944, r19945, r19946, r19947, r19948;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r19906);
        mpfr_init_set_str(r19907, "-1.0942316613593581", 10, MPFR_RNDN);
        mpfr_init(r19908);
        mpfr_init(r19909);
        mpfr_init(r19910);
        mpfr_init(r19911);
        mpfr_init(r19912);
        mpfr_init(r19913);
        mpfr_init(r19914);
        mpfr_init(r19915);
        mpfr_init(r19916);
        mpfr_init(r19917);
        mpfr_init(r19918);
        mpfr_init(r19919);
        mpfr_init(r19920);
        mpfr_init(r19921);
        mpfr_init(r19922);
        mpfr_init(r19923);
        mpfr_init(r19924);
        mpfr_init(r19925);
        mpfr_init(r19926);
        mpfr_init(r19927);
        mpfr_init_set_str(r19928, "-1.3319119653305858e-115", 10, MPFR_RNDN);
        mpfr_init(r19929);
        mpfr_init(r19930);
        mpfr_init(r19931);
        mpfr_init(r19932);
        mpfr_init(r19933);
        mpfr_init(r19934);
        mpfr_init(r19935);
        mpfr_init(r19936);
        mpfr_init(r19937);
        mpfr_init(r19938);
        mpfr_init_set_str(r19939, "-1.430093898044764e-294", 10, MPFR_RNDN);
        mpfr_init(r19940);
        mpfr_init(r19941);
        mpfr_init(r19942);
        mpfr_init(r19943);
        mpfr_init(r19944);
        mpfr_init(r19945);
        mpfr_init(r19946);
        mpfr_init(r19947);
        mpfr_init(r19948);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r19906, x_im, MPFR_RNDN);
        ;
        mpfr_set_si(r19908, mpfr_cmp(r19906, r19907) <= 0, MPFR_RNDN);
        mpfr_set_d(r19909, y_re, MPFR_RNDN);
        mpfr_set_d(r19910, x_re, MPFR_RNDN);
        mpfr_atan2(r19911, r19906, r19910, MPFR_RNDN);
        mpfr_mul(r19912, r19909, r19911, MPFR_RNDN);
        mpfr_set_d(r19913, y_im, MPFR_RNDN);
        mpfr_neg(r19914, r19906, MPFR_RNDN);
        mpfr_log(r19915, r19914, MPFR_RNDN);
        mpfr_mul(r19916, r19913, r19915, MPFR_RNDN);
        mpfr_add(r19917, r19912, r19916, MPFR_RNDN);
        mpfr_sin(r19918, r19917, MPFR_RNDN);
        mpfr_exp(r19919, r19913, MPFR_RNDN);
        mpfr_pow(r19920, r19919, r19911, MPFR_RNDN);
        mpfr_mul(r19921, r19906, r19906, MPFR_RNDN);
        mpfr_mul(r19922, r19910, r19910, MPFR_RNDN);
        mpfr_add(r19923, r19921, r19922, MPFR_RNDN);
        mpfr_sqrt(r19924, r19923, MPFR_RNDN);
        mpfr_pow(r19925, r19924, r19909, MPFR_RNDN);
        mpfr_div(r19926, r19920, r19925, MPFR_RNDN);
        mpfr_div(r19927, r19918, r19926, MPFR_RNDN);
        ;
        mpfr_set_si(r19929, mpfr_cmp(r19906, r19928) <= 0, MPFR_RNDN);
        mpfr_log(r19930, r19924, MPFR_RNDN);
        mpfr_mul(r19931, r19913, r19930, MPFR_RNDN);
        mpfr_mul(r19932, r19911, r19909, MPFR_RNDN);
        mpfr_cbrt(r19933, r19932, MPFR_RNDN);
        mpfr_mul(r19934, r19933, r19933, MPFR_RNDN);
        mpfr_mul(r19935, r19934, r19933, MPFR_RNDN);
        mpfr_add(r19936, r19931, r19935, MPFR_RNDN);
        mpfr_sin(r19937, r19936, MPFR_RNDN);
        mpfr_div(r19938, r19937, r19926, MPFR_RNDN);
        ;
        mpfr_set_si(r19940, mpfr_cmp(r19906, r19939) <= 0, MPFR_RNDN);
        mpfr_log(r19941, r19906, MPFR_RNDN);
        mpfr_mul(r19942, r19913, r19941, MPFR_RNDN);
        mpfr_add(r19943, r19942, r19932, MPFR_RNDN);
        mpfr_sin(r19944, r19943, MPFR_RNDN);
        mpfr_div(r19945, r19944, r19926, MPFR_RNDN);
        if (mpfr_get_si(r19940, MPFR_RNDN)) { mpfr_set(r19946, r19927, MPFR_RNDN); } else { mpfr_set(r19946, r19945, MPFR_RNDN); };
        if (mpfr_get_si(r19929, MPFR_RNDN)) { mpfr_set(r19947, r19938, MPFR_RNDN); } else { mpfr_set(r19947, r19946, MPFR_RNDN); };
        if (mpfr_get_si(r19908, MPFR_RNDN)) { mpfr_set(r19948, r19927, MPFR_RNDN); } else { mpfr_set(r19948, r19947, MPFR_RNDN); };
        return mpfr_get_d(r19948, MPFR_RNDN);
}

static mpfr_t r19949, r19950, r19951, r19952, r19953, r19954, r19955, r19956, r19957, r19958, r19959, r19960, r19961, r19962, r19963, r19964, r19965, r19966, r19967, r19968, r19969, r19970, r19971, r19972, r19973, r19974, r19975, r19976, r19977, r19978, r19979, r19980, r19981, r19982, r19983, r19984, r19985, r19986, r19987, r19988, r19989, r19990, r19991;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r19949);
        mpfr_init_set_str(r19950, "-1.0942316613593581", 10, MPFR_RNDN);
        mpfr_init(r19951);
        mpfr_init(r19952);
        mpfr_init(r19953);
        mpfr_init(r19954);
        mpfr_init(r19955);
        mpfr_init(r19956);
        mpfr_init(r19957);
        mpfr_init(r19958);
        mpfr_init(r19959);
        mpfr_init(r19960);
        mpfr_init(r19961);
        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_set_str(r19971, "-1.3319119653305858e-115", 10, MPFR_RNDN);
        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);
        mpfr_init(r19981);
        mpfr_init_set_str(r19982, "-1.430093898044764e-294", 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);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r19949, x_im, MPFR_RNDN);
        ;
        mpfr_set_si(r19951, mpfr_cmp(r19949, r19950) <= 0, MPFR_RNDN);
        mpfr_set_d(r19952, y_re, MPFR_RNDN);
        mpfr_set_d(r19953, x_re, MPFR_RNDN);
        mpfr_atan2(r19954, r19949, r19953, MPFR_RNDN);
        mpfr_mul(r19955, r19952, r19954, MPFR_RNDN);
        mpfr_set_d(r19956, y_im, MPFR_RNDN);
        mpfr_neg(r19957, r19949, MPFR_RNDN);
        mpfr_log(r19958, r19957, MPFR_RNDN);
        mpfr_mul(r19959, r19956, r19958, MPFR_RNDN);
        mpfr_add(r19960, r19955, r19959, MPFR_RNDN);
        mpfr_sin(r19961, r19960, MPFR_RNDN);
        mpfr_exp(r19962, r19956, MPFR_RNDN);
        mpfr_pow(r19963, r19962, r19954, MPFR_RNDN);
        mpfr_mul(r19964, r19949, r19949, MPFR_RNDN);
        mpfr_mul(r19965, r19953, r19953, MPFR_RNDN);
        mpfr_add(r19966, r19964, r19965, MPFR_RNDN);
        mpfr_sqrt(r19967, r19966, MPFR_RNDN);
        mpfr_pow(r19968, r19967, r19952, MPFR_RNDN);
        mpfr_div(r19969, r19963, r19968, MPFR_RNDN);
        mpfr_div(r19970, r19961, r19969, MPFR_RNDN);
        ;
        mpfr_set_si(r19972, mpfr_cmp(r19949, r19971) <= 0, MPFR_RNDN);
        mpfr_log(r19973, r19967, MPFR_RNDN);
        mpfr_mul(r19974, r19956, r19973, MPFR_RNDN);
        mpfr_mul(r19975, r19954, r19952, MPFR_RNDN);
        mpfr_cbrt(r19976, r19975, MPFR_RNDN);
        mpfr_mul(r19977, r19976, r19976, MPFR_RNDN);
        mpfr_mul(r19978, r19977, r19976, MPFR_RNDN);
        mpfr_add(r19979, r19974, r19978, MPFR_RNDN);
        mpfr_sin(r19980, r19979, MPFR_RNDN);
        mpfr_div(r19981, r19980, r19969, MPFR_RNDN);
        ;
        mpfr_set_si(r19983, mpfr_cmp(r19949, r19982) <= 0, MPFR_RNDN);
        mpfr_log(r19984, r19949, MPFR_RNDN);
        mpfr_mul(r19985, r19956, r19984, MPFR_RNDN);
        mpfr_add(r19986, r19985, r19975, MPFR_RNDN);
        mpfr_sin(r19987, r19986, MPFR_RNDN);
        mpfr_div(r19988, r19987, r19969, MPFR_RNDN);
        if (mpfr_get_si(r19983, MPFR_RNDN)) { mpfr_set(r19989, r19970, MPFR_RNDN); } else { mpfr_set(r19989, r19988, MPFR_RNDN); };
        if (mpfr_get_si(r19972, MPFR_RNDN)) { mpfr_set(r19990, r19981, MPFR_RNDN); } else { mpfr_set(r19990, r19989, MPFR_RNDN); };
        if (mpfr_get_si(r19951, MPFR_RNDN)) { mpfr_set(r19991, r19970, MPFR_RNDN); } else { mpfr_set(r19991, r19990, MPFR_RNDN); };
        return mpfr_get_d(r19991, MPFR_RNDN);
}

