#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 r19735 = x_re;
        float r19736 = r19735 * r19735;
        float r19737 = x_im;
        float r19738 = r19737 * r19737;
        float r19739 = r19736 + r19738;
        float r19740 = sqrt(r19739);
        float r19741 = log(r19740);
        float r19742 = y_re;
        float r19743 = r19741 * r19742;
        float r19744 = atan2(r19737, r19735);
        float r19745 = y_im;
        float r19746 = r19744 * r19745;
        float r19747 = r19743 - r19746;
        float r19748 = exp(r19747);
        float r19749 = r19741 * r19745;
        float r19750 = r19744 * r19742;
        float r19751 = r19749 + r19750;
        float r19752 = sin(r19751);
        float r19753 = r19748 * r19752;
        return r19753;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r19754 = x_re;
        double r19755 = r19754 * r19754;
        double r19756 = x_im;
        double r19757 = r19756 * r19756;
        double r19758 = r19755 + r19757;
        double r19759 = sqrt(r19758);
        double r19760 = log(r19759);
        double r19761 = y_re;
        double r19762 = r19760 * r19761;
        double r19763 = atan2(r19756, r19754);
        double r19764 = y_im;
        double r19765 = r19763 * r19764;
        double r19766 = r19762 - r19765;
        double r19767 = exp(r19766);
        double r19768 = r19760 * r19764;
        double r19769 = r19763 * r19761;
        double r19770 = r19768 + r19769;
        double r19771 = sin(r19770);
        double r19772 = r19767 * r19771;
        return r19772;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r19773 = x_im;
        float r19774 = -1.0942316613593581;
        bool r19775 = r19773 <= r19774;
        float r19776 = y_re;
        float r19777 = x_re;
        float r19778 = atan2(r19773, r19777);
        float r19779 = r19776 * r19778;
        float r19780 = y_im;
        float r19781 = -r19773;
        float r19782 = log(r19781);
        float r19783 = r19780 * r19782;
        float r19784 = r19779 + r19783;
        float r19785 = sin(r19784);
        float r19786 = exp(r19780);
        float r19787 = pow(r19786, r19778);
        float r19788 = r19773 * r19773;
        float r19789 = r19777 * r19777;
        float r19790 = r19788 + r19789;
        float r19791 = sqrt(r19790);
        float r19792 = pow(r19791, r19776);
        float r19793 = r19787 / r19792;
        float r19794 = r19785 / r19793;
        float r19795 = -1.3319119653305858e-115;
        bool r19796 = r19773 <= r19795;
        float r19797 = log(r19791);
        float r19798 = r19780 * r19797;
        float r19799 = r19778 * r19776;
        float r19800 = cbrt(r19799);
        float r19801 = r19800 * r19800;
        float r19802 = r19801 * r19800;
        float r19803 = r19798 + r19802;
        float r19804 = sin(r19803);
        float r19805 = r19804 / r19793;
        float r19806 = -1.430093898044764e-294;
        bool r19807 = r19773 <= r19806;
        float r19808 = log(r19773);
        float r19809 = r19780 * r19808;
        float r19810 = r19809 + r19799;
        float r19811 = sin(r19810);
        float r19812 = r19811 / r19793;
        float r19813 = r19807 ? r19794 : r19812;
        float r19814 = r19796 ? r19805 : r19813;
        float r19815 = r19775 ? r19794 : r19814;
        return r19815;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r19816 = x_im;
        double r19817 = -1.0942316613593581;
        bool r19818 = r19816 <= r19817;
        double r19819 = y_re;
        double r19820 = x_re;
        double r19821 = atan2(r19816, r19820);
        double r19822 = r19819 * r19821;
        double r19823 = y_im;
        double r19824 = -r19816;
        double r19825 = log(r19824);
        double r19826 = r19823 * r19825;
        double r19827 = r19822 + r19826;
        double r19828 = sin(r19827);
        double r19829 = exp(r19823);
        double r19830 = pow(r19829, r19821);
        double r19831 = r19816 * r19816;
        double r19832 = r19820 * r19820;
        double r19833 = r19831 + r19832;
        double r19834 = sqrt(r19833);
        double r19835 = pow(r19834, r19819);
        double r19836 = r19830 / r19835;
        double r19837 = r19828 / r19836;
        double r19838 = -1.3319119653305858e-115;
        bool r19839 = r19816 <= r19838;
        double r19840 = log(r19834);
        double r19841 = r19823 * r19840;
        double r19842 = r19821 * r19819;
        double r19843 = cbrt(r19842);
        double r19844 = r19843 * r19843;
        double r19845 = r19844 * r19843;
        double r19846 = r19841 + r19845;
        double r19847 = sin(r19846);
        double r19848 = r19847 / r19836;
        double r19849 = -1.430093898044764e-294;
        bool r19850 = r19816 <= r19849;
        double r19851 = log(r19816);
        double r19852 = r19823 * r19851;
        double r19853 = r19852 + r19842;
        double r19854 = sin(r19853);
        double r19855 = r19854 / r19836;
        double r19856 = r19850 ? r19837 : r19855;
        double r19857 = r19839 ? r19848 : r19856;
        double r19858 = r19818 ? r19837 : r19857;
        return r19858;
}

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 r19859, r19860, r19861, r19862, r19863, r19864, r19865, r19866, r19867, r19868, r19869, r19870, r19871, r19872, r19873, r19874, r19875, r19876, r19877;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2192);
        mpfr_init(r19859);
        mpfr_init(r19860);
        mpfr_init(r19861);
        mpfr_init(r19862);
        mpfr_init(r19863);
        mpfr_init(r19864);
        mpfr_init(r19865);
        mpfr_init(r19866);
        mpfr_init(r19867);
        mpfr_init(r19868);
        mpfr_init(r19869);
        mpfr_init(r19870);
        mpfr_init(r19871);
        mpfr_init(r19872);
        mpfr_init(r19873);
        mpfr_init(r19874);
        mpfr_init(r19875);
        mpfr_init(r19876);
        mpfr_init(r19877);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r19859, x_re, MPFR_RNDN);
        mpfr_mul(r19860, r19859, r19859, MPFR_RNDN);
        mpfr_set_d(r19861, x_im, MPFR_RNDN);
        mpfr_mul(r19862, r19861, r19861, MPFR_RNDN);
        mpfr_add(r19863, r19860, r19862, MPFR_RNDN);
        mpfr_sqrt(r19864, r19863, MPFR_RNDN);
        mpfr_log(r19865, r19864, MPFR_RNDN);
        mpfr_set_d(r19866, y_re, MPFR_RNDN);
        mpfr_mul(r19867, r19865, r19866, MPFR_RNDN);
        mpfr_atan2(r19868, r19861, r19859, MPFR_RNDN);
        mpfr_set_d(r19869, y_im, MPFR_RNDN);
        mpfr_mul(r19870, r19868, r19869, MPFR_RNDN);
        mpfr_sub(r19871, r19867, r19870, MPFR_RNDN);
        mpfr_exp(r19872, r19871, MPFR_RNDN);
        mpfr_mul(r19873, r19865, r19869, MPFR_RNDN);
        mpfr_mul(r19874, r19868, r19866, MPFR_RNDN);
        mpfr_add(r19875, r19873, r19874, MPFR_RNDN);
        mpfr_sin(r19876, r19875, MPFR_RNDN);
        mpfr_mul(r19877, r19872, r19876, MPFR_RNDN);
        return mpfr_get_d(r19877, MPFR_RNDN);
}

static mpfr_t r19878, r19879, r19880, r19881, r19882, r19883, r19884, r19885, r19886, r19887, r19888, r19889, r19890, r19891, r19892, r19893, r19894, r19895, r19896, r19897, r19898, r19899, r19900, r19901, r19902, r19903, r19904, r19905, r19906, r19907, r19908, r19909, r19910, r19911, r19912, r19913, r19914, r19915, r19916, r19917, r19918, r19919, r19920;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r19878);
        mpfr_init_set_str(r19879, "-1.0942316613593581", 10, MPFR_RNDN);
        mpfr_init(r19880);
        mpfr_init(r19881);
        mpfr_init(r19882);
        mpfr_init(r19883);
        mpfr_init(r19884);
        mpfr_init(r19885);
        mpfr_init(r19886);
        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_set_str(r19900, "-1.3319119653305858e-115", 10, MPFR_RNDN);
        mpfr_init(r19901);
        mpfr_init(r19902);
        mpfr_init(r19903);
        mpfr_init(r19904);
        mpfr_init(r19905);
        mpfr_init(r19906);
        mpfr_init(r19907);
        mpfr_init(r19908);
        mpfr_init(r19909);
        mpfr_init(r19910);
        mpfr_init_set_str(r19911, "-1.430093898044764e-294", 10, MPFR_RNDN);
        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);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r19878, x_im, MPFR_RNDN);
        ;
        mpfr_set_si(r19880, mpfr_cmp(r19878, r19879) <= 0, MPFR_RNDN);
        mpfr_set_d(r19881, y_re, MPFR_RNDN);
        mpfr_set_d(r19882, x_re, MPFR_RNDN);
        mpfr_atan2(r19883, r19878, r19882, MPFR_RNDN);
        mpfr_mul(r19884, r19881, r19883, MPFR_RNDN);
        mpfr_set_d(r19885, y_im, MPFR_RNDN);
        mpfr_neg(r19886, r19878, MPFR_RNDN);
        mpfr_log(r19887, r19886, MPFR_RNDN);
        mpfr_mul(r19888, r19885, r19887, MPFR_RNDN);
        mpfr_add(r19889, r19884, r19888, MPFR_RNDN);
        mpfr_sin(r19890, r19889, MPFR_RNDN);
        mpfr_exp(r19891, r19885, MPFR_RNDN);
        mpfr_pow(r19892, r19891, r19883, MPFR_RNDN);
        mpfr_mul(r19893, r19878, r19878, MPFR_RNDN);
        mpfr_mul(r19894, r19882, r19882, MPFR_RNDN);
        mpfr_add(r19895, r19893, r19894, MPFR_RNDN);
        mpfr_sqrt(r19896, r19895, MPFR_RNDN);
        mpfr_pow(r19897, r19896, r19881, MPFR_RNDN);
        mpfr_div(r19898, r19892, r19897, MPFR_RNDN);
        mpfr_div(r19899, r19890, r19898, MPFR_RNDN);
        ;
        mpfr_set_si(r19901, mpfr_cmp(r19878, r19900) <= 0, MPFR_RNDN);
        mpfr_log(r19902, r19896, MPFR_RNDN);
        mpfr_mul(r19903, r19885, r19902, MPFR_RNDN);
        mpfr_mul(r19904, r19883, r19881, MPFR_RNDN);
        mpfr_cbrt(r19905, r19904, MPFR_RNDN);
        mpfr_mul(r19906, r19905, r19905, MPFR_RNDN);
        mpfr_mul(r19907, r19906, r19905, MPFR_RNDN);
        mpfr_add(r19908, r19903, r19907, MPFR_RNDN);
        mpfr_sin(r19909, r19908, MPFR_RNDN);
        mpfr_div(r19910, r19909, r19898, MPFR_RNDN);
        ;
        mpfr_set_si(r19912, mpfr_cmp(r19878, r19911) <= 0, MPFR_RNDN);
        mpfr_log(r19913, r19878, MPFR_RNDN);
        mpfr_mul(r19914, r19885, r19913, MPFR_RNDN);
        mpfr_add(r19915, r19914, r19904, MPFR_RNDN);
        mpfr_sin(r19916, r19915, MPFR_RNDN);
        mpfr_div(r19917, r19916, r19898, MPFR_RNDN);
        if (mpfr_get_si(r19912, MPFR_RNDN)) { mpfr_set(r19918, r19899, MPFR_RNDN); } else { mpfr_set(r19918, r19917, MPFR_RNDN); };
        if (mpfr_get_si(r19901, MPFR_RNDN)) { mpfr_set(r19919, r19910, MPFR_RNDN); } else { mpfr_set(r19919, r19918, MPFR_RNDN); };
        if (mpfr_get_si(r19880, MPFR_RNDN)) { mpfr_set(r19920, r19899, MPFR_RNDN); } else { mpfr_set(r19920, r19919, MPFR_RNDN); };
        return mpfr_get_d(r19920, MPFR_RNDN);
}

static mpfr_t 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, r19949, r19950, r19951, r19952, r19953, r19954, r19955, r19956, r19957, r19958, r19959, r19960, r19961, r19962, r19963;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r19921);
        mpfr_init_set_str(r19922, "-1.0942316613593581", 10, MPFR_RNDN);
        mpfr_init(r19923);
        mpfr_init(r19924);
        mpfr_init(r19925);
        mpfr_init(r19926);
        mpfr_init(r19927);
        mpfr_init(r19928);
        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(r19939);
        mpfr_init(r19940);
        mpfr_init(r19941);
        mpfr_init(r19942);
        mpfr_init_set_str(r19943, "-1.3319119653305858e-115", 10, MPFR_RNDN);
        mpfr_init(r19944);
        mpfr_init(r19945);
        mpfr_init(r19946);
        mpfr_init(r19947);
        mpfr_init(r19948);
        mpfr_init(r19949);
        mpfr_init(r19950);
        mpfr_init(r19951);
        mpfr_init(r19952);
        mpfr_init(r19953);
        mpfr_init_set_str(r19954, "-1.430093898044764e-294", 10, MPFR_RNDN);
        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);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r19921, x_im, MPFR_RNDN);
        ;
        mpfr_set_si(r19923, mpfr_cmp(r19921, r19922) <= 0, MPFR_RNDN);
        mpfr_set_d(r19924, y_re, MPFR_RNDN);
        mpfr_set_d(r19925, x_re, MPFR_RNDN);
        mpfr_atan2(r19926, r19921, r19925, MPFR_RNDN);
        mpfr_mul(r19927, r19924, r19926, MPFR_RNDN);
        mpfr_set_d(r19928, y_im, MPFR_RNDN);
        mpfr_neg(r19929, r19921, MPFR_RNDN);
        mpfr_log(r19930, r19929, MPFR_RNDN);
        mpfr_mul(r19931, r19928, r19930, MPFR_RNDN);
        mpfr_add(r19932, r19927, r19931, MPFR_RNDN);
        mpfr_sin(r19933, r19932, MPFR_RNDN);
        mpfr_exp(r19934, r19928, MPFR_RNDN);
        mpfr_pow(r19935, r19934, r19926, MPFR_RNDN);
        mpfr_mul(r19936, r19921, r19921, MPFR_RNDN);
        mpfr_mul(r19937, r19925, r19925, MPFR_RNDN);
        mpfr_add(r19938, r19936, r19937, MPFR_RNDN);
        mpfr_sqrt(r19939, r19938, MPFR_RNDN);
        mpfr_pow(r19940, r19939, r19924, MPFR_RNDN);
        mpfr_div(r19941, r19935, r19940, MPFR_RNDN);
        mpfr_div(r19942, r19933, r19941, MPFR_RNDN);
        ;
        mpfr_set_si(r19944, mpfr_cmp(r19921, r19943) <= 0, MPFR_RNDN);
        mpfr_log(r19945, r19939, MPFR_RNDN);
        mpfr_mul(r19946, r19928, r19945, MPFR_RNDN);
        mpfr_mul(r19947, r19926, r19924, MPFR_RNDN);
        mpfr_cbrt(r19948, r19947, MPFR_RNDN);
        mpfr_mul(r19949, r19948, r19948, MPFR_RNDN);
        mpfr_mul(r19950, r19949, r19948, MPFR_RNDN);
        mpfr_add(r19951, r19946, r19950, MPFR_RNDN);
        mpfr_sin(r19952, r19951, MPFR_RNDN);
        mpfr_div(r19953, r19952, r19941, MPFR_RNDN);
        ;
        mpfr_set_si(r19955, mpfr_cmp(r19921, r19954) <= 0, MPFR_RNDN);
        mpfr_log(r19956, r19921, MPFR_RNDN);
        mpfr_mul(r19957, r19928, r19956, MPFR_RNDN);
        mpfr_add(r19958, r19957, r19947, MPFR_RNDN);
        mpfr_sin(r19959, r19958, MPFR_RNDN);
        mpfr_div(r19960, r19959, r19941, MPFR_RNDN);
        if (mpfr_get_si(r19955, MPFR_RNDN)) { mpfr_set(r19961, r19942, MPFR_RNDN); } else { mpfr_set(r19961, r19960, MPFR_RNDN); };
        if (mpfr_get_si(r19944, MPFR_RNDN)) { mpfr_set(r19962, r19953, MPFR_RNDN); } else { mpfr_set(r19962, r19961, MPFR_RNDN); };
        if (mpfr_get_si(r19923, MPFR_RNDN)) { mpfr_set(r19963, r19942, MPFR_RNDN); } else { mpfr_set(r19963, r19962, MPFR_RNDN); };
        return mpfr_get_d(r19963, MPFR_RNDN);
}

