#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 r19704 = x_re;
        float r19705 = r19704 * r19704;
        float r19706 = x_im;
        float r19707 = r19706 * r19706;
        float r19708 = r19705 + r19707;
        float r19709 = sqrt(r19708);
        float r19710 = log(r19709);
        float r19711 = y_re;
        float r19712 = r19710 * r19711;
        float r19713 = atan2(r19706, r19704);
        float r19714 = y_im;
        float r19715 = r19713 * r19714;
        float r19716 = r19712 - r19715;
        float r19717 = exp(r19716);
        float r19718 = r19710 * r19714;
        float r19719 = r19713 * r19711;
        float r19720 = r19718 + r19719;
        float r19721 = sin(r19720);
        float r19722 = r19717 * r19721;
        return r19722;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r19723 = x_re;
        double r19724 = r19723 * r19723;
        double r19725 = x_im;
        double r19726 = r19725 * r19725;
        double r19727 = r19724 + r19726;
        double r19728 = sqrt(r19727);
        double r19729 = log(r19728);
        double r19730 = y_re;
        double r19731 = r19729 * r19730;
        double r19732 = atan2(r19725, r19723);
        double r19733 = y_im;
        double r19734 = r19732 * r19733;
        double r19735 = r19731 - r19734;
        double r19736 = exp(r19735);
        double r19737 = r19729 * r19733;
        double r19738 = r19732 * r19730;
        double r19739 = r19737 + r19738;
        double r19740 = sin(r19739);
        double r19741 = r19736 * r19740;
        return r19741;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r19742 = x_im;
        float r19743 = 1.4085193362961465e-307;
        bool r19744 = r19742 <= r19743;
        float r19745 = y_re;
        float r19746 = x_re;
        float r19747 = atan2(r19742, r19746);
        float r19748 = r19745 * r19747;
        float r19749 = y_im;
        float r19750 = -r19742;
        float r19751 = log(r19750);
        float r19752 = r19749 * r19751;
        float r19753 = r19748 + r19752;
        float r19754 = sin(r19753);
        float r19755 = r19746 * r19746;
        float r19756 = r19742 * r19742;
        float r19757 = r19755 + r19756;
        float r19758 = sqrt(r19757);
        float r19759 = pow(r19758, r19745);
        float r19760 = r19747 * r19749;
        float r19761 = exp(r19760);
        float r19762 = r19759 / r19761;
        float r19763 = r19754 * r19762;
        float r19764 = log(r19742);
        float r19765 = r19749 * r19764;
        float r19766 = r19747 * r19745;
        float r19767 = r19765 + r19766;
        float r19768 = sin(r19767);
        float r19769 = r19749 * r19747;
        float r19770 = exp(r19769);
        float r19771 = r19756 + r19755;
        float r19772 = sqrt(r19771);
        float r19773 = pow(r19772, r19745);
        float r19774 = r19770 / r19773;
        float r19775 = r19768 / r19774;
        float r19776 = r19744 ? r19763 : r19775;
        return r19776;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r19777 = x_im;
        double r19778 = 1.4085193362961465e-307;
        bool r19779 = r19777 <= r19778;
        double r19780 = y_re;
        double r19781 = x_re;
        double r19782 = atan2(r19777, r19781);
        double r19783 = r19780 * r19782;
        double r19784 = y_im;
        double r19785 = -r19777;
        double r19786 = log(r19785);
        double r19787 = r19784 * r19786;
        double r19788 = r19783 + r19787;
        double r19789 = sin(r19788);
        double r19790 = r19781 * r19781;
        double r19791 = r19777 * r19777;
        double r19792 = r19790 + r19791;
        double r19793 = sqrt(r19792);
        double r19794 = pow(r19793, r19780);
        double r19795 = r19782 * r19784;
        double r19796 = exp(r19795);
        double r19797 = r19794 / r19796;
        double r19798 = r19789 * r19797;
        double r19799 = log(r19777);
        double r19800 = r19784 * r19799;
        double r19801 = r19782 * r19780;
        double r19802 = r19800 + r19801;
        double r19803 = sin(r19802);
        double r19804 = r19784 * r19782;
        double r19805 = exp(r19804);
        double r19806 = r19791 + r19790;
        double r19807 = sqrt(r19806);
        double r19808 = pow(r19807, r19780);
        double r19809 = r19805 / r19808;
        double r19810 = r19803 / r19809;
        double r19811 = r19779 ? r19798 : r19810;
        return r19811;
}

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 r19812, r19813, r19814, r19815, r19816, r19817, r19818, r19819, r19820, r19821, r19822, r19823, r19824, r19825, r19826, r19827, r19828, r19829, r19830;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2192);
        mpfr_init(r19812);
        mpfr_init(r19813);
        mpfr_init(r19814);
        mpfr_init(r19815);
        mpfr_init(r19816);
        mpfr_init(r19817);
        mpfr_init(r19818);
        mpfr_init(r19819);
        mpfr_init(r19820);
        mpfr_init(r19821);
        mpfr_init(r19822);
        mpfr_init(r19823);
        mpfr_init(r19824);
        mpfr_init(r19825);
        mpfr_init(r19826);
        mpfr_init(r19827);
        mpfr_init(r19828);
        mpfr_init(r19829);
        mpfr_init(r19830);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r19812, x_re, MPFR_RNDN);
        mpfr_mul(r19813, r19812, r19812, MPFR_RNDN);
        mpfr_set_d(r19814, x_im, MPFR_RNDN);
        mpfr_mul(r19815, r19814, r19814, MPFR_RNDN);
        mpfr_add(r19816, r19813, r19815, MPFR_RNDN);
        mpfr_sqrt(r19817, r19816, MPFR_RNDN);
        mpfr_log(r19818, r19817, MPFR_RNDN);
        mpfr_set_d(r19819, y_re, MPFR_RNDN);
        mpfr_mul(r19820, r19818, r19819, MPFR_RNDN);
        mpfr_atan2(r19821, r19814, r19812, MPFR_RNDN);
        mpfr_set_d(r19822, y_im, MPFR_RNDN);
        mpfr_mul(r19823, r19821, r19822, MPFR_RNDN);
        mpfr_sub(r19824, r19820, r19823, MPFR_RNDN);
        mpfr_exp(r19825, r19824, MPFR_RNDN);
        mpfr_mul(r19826, r19818, r19822, MPFR_RNDN);
        mpfr_mul(r19827, r19821, r19819, MPFR_RNDN);
        mpfr_add(r19828, r19826, r19827, MPFR_RNDN);
        mpfr_sin(r19829, r19828, MPFR_RNDN);
        mpfr_mul(r19830, r19825, r19829, MPFR_RNDN);
        return mpfr_get_d(r19830, MPFR_RNDN);
}

static mpfr_t r19831, r19832, r19833, r19834, r19835, r19836, r19837, r19838, r19839, r19840, r19841, r19842, r19843, r19844, r19845, r19846, r19847, r19848, r19849, r19850, r19851, r19852, r19853, r19854, r19855, r19856, r19857, r19858, r19859, r19860, r19861, r19862, r19863, r19864, r19865;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r19831);
        mpfr_init_set_str(r19832, "1.4085193362961465e-307", 10, MPFR_RNDN);
        mpfr_init(r19833);
        mpfr_init(r19834);
        mpfr_init(r19835);
        mpfr_init(r19836);
        mpfr_init(r19837);
        mpfr_init(r19838);
        mpfr_init(r19839);
        mpfr_init(r19840);
        mpfr_init(r19841);
        mpfr_init(r19842);
        mpfr_init(r19843);
        mpfr_init(r19844);
        mpfr_init(r19845);
        mpfr_init(r19846);
        mpfr_init(r19847);
        mpfr_init(r19848);
        mpfr_init(r19849);
        mpfr_init(r19850);
        mpfr_init(r19851);
        mpfr_init(r19852);
        mpfr_init(r19853);
        mpfr_init(r19854);
        mpfr_init(r19855);
        mpfr_init(r19856);
        mpfr_init(r19857);
        mpfr_init(r19858);
        mpfr_init(r19859);
        mpfr_init(r19860);
        mpfr_init(r19861);
        mpfr_init(r19862);
        mpfr_init(r19863);
        mpfr_init(r19864);
        mpfr_init(r19865);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r19831, x_im, MPFR_RNDN);
        ;
        mpfr_set_si(r19833, mpfr_cmp(r19831, r19832) <= 0, MPFR_RNDN);
        mpfr_set_d(r19834, y_re, MPFR_RNDN);
        mpfr_set_d(r19835, x_re, MPFR_RNDN);
        mpfr_atan2(r19836, r19831, r19835, MPFR_RNDN);
        mpfr_mul(r19837, r19834, r19836, MPFR_RNDN);
        mpfr_set_d(r19838, y_im, MPFR_RNDN);
        mpfr_neg(r19839, r19831, MPFR_RNDN);
        mpfr_log(r19840, r19839, MPFR_RNDN);
        mpfr_mul(r19841, r19838, r19840, MPFR_RNDN);
        mpfr_add(r19842, r19837, r19841, MPFR_RNDN);
        mpfr_sin(r19843, r19842, MPFR_RNDN);
        mpfr_mul(r19844, r19835, r19835, MPFR_RNDN);
        mpfr_mul(r19845, r19831, r19831, MPFR_RNDN);
        mpfr_add(r19846, r19844, r19845, MPFR_RNDN);
        mpfr_sqrt(r19847, r19846, MPFR_RNDN);
        mpfr_pow(r19848, r19847, r19834, MPFR_RNDN);
        mpfr_mul(r19849, r19836, r19838, MPFR_RNDN);
        mpfr_exp(r19850, r19849, MPFR_RNDN);
        mpfr_div(r19851, r19848, r19850, MPFR_RNDN);
        mpfr_mul(r19852, r19843, r19851, MPFR_RNDN);
        mpfr_log(r19853, r19831, MPFR_RNDN);
        mpfr_mul(r19854, r19838, r19853, MPFR_RNDN);
        mpfr_mul(r19855, r19836, r19834, MPFR_RNDN);
        mpfr_add(r19856, r19854, r19855, MPFR_RNDN);
        mpfr_sin(r19857, r19856, MPFR_RNDN);
        mpfr_mul(r19858, r19838, r19836, MPFR_RNDN);
        mpfr_exp(r19859, r19858, MPFR_RNDN);
        mpfr_add(r19860, r19845, r19844, MPFR_RNDN);
        mpfr_sqrt(r19861, r19860, MPFR_RNDN);
        mpfr_pow(r19862, r19861, r19834, MPFR_RNDN);
        mpfr_div(r19863, r19859, r19862, MPFR_RNDN);
        mpfr_div(r19864, r19857, r19863, MPFR_RNDN);
        if (mpfr_get_si(r19833, MPFR_RNDN)) { mpfr_set(r19865, r19852, MPFR_RNDN); } else { mpfr_set(r19865, r19864, MPFR_RNDN); };
        return mpfr_get_d(r19865, MPFR_RNDN);
}

static mpfr_t r19866, r19867, r19868, r19869, r19870, r19871, r19872, r19873, r19874, r19875, r19876, r19877, r19878, r19879, r19880, r19881, r19882, r19883, r19884, r19885, r19886, r19887, r19888, r19889, r19890, r19891, r19892, r19893, r19894, r19895, r19896, r19897, r19898, r19899, r19900;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r19866);
        mpfr_init_set_str(r19867, "1.4085193362961465e-307", 10, MPFR_RNDN);
        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);
        mpfr_init(r19878);
        mpfr_init(r19879);
        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(r19900);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r19866, x_im, MPFR_RNDN);
        ;
        mpfr_set_si(r19868, mpfr_cmp(r19866, r19867) <= 0, MPFR_RNDN);
        mpfr_set_d(r19869, y_re, MPFR_RNDN);
        mpfr_set_d(r19870, x_re, MPFR_RNDN);
        mpfr_atan2(r19871, r19866, r19870, MPFR_RNDN);
        mpfr_mul(r19872, r19869, r19871, MPFR_RNDN);
        mpfr_set_d(r19873, y_im, MPFR_RNDN);
        mpfr_neg(r19874, r19866, MPFR_RNDN);
        mpfr_log(r19875, r19874, MPFR_RNDN);
        mpfr_mul(r19876, r19873, r19875, MPFR_RNDN);
        mpfr_add(r19877, r19872, r19876, MPFR_RNDN);
        mpfr_sin(r19878, r19877, MPFR_RNDN);
        mpfr_mul(r19879, r19870, r19870, MPFR_RNDN);
        mpfr_mul(r19880, r19866, r19866, MPFR_RNDN);
        mpfr_add(r19881, r19879, r19880, MPFR_RNDN);
        mpfr_sqrt(r19882, r19881, MPFR_RNDN);
        mpfr_pow(r19883, r19882, r19869, MPFR_RNDN);
        mpfr_mul(r19884, r19871, r19873, MPFR_RNDN);
        mpfr_exp(r19885, r19884, MPFR_RNDN);
        mpfr_div(r19886, r19883, r19885, MPFR_RNDN);
        mpfr_mul(r19887, r19878, r19886, MPFR_RNDN);
        mpfr_log(r19888, r19866, MPFR_RNDN);
        mpfr_mul(r19889, r19873, r19888, MPFR_RNDN);
        mpfr_mul(r19890, r19871, r19869, MPFR_RNDN);
        mpfr_add(r19891, r19889, r19890, MPFR_RNDN);
        mpfr_sin(r19892, r19891, MPFR_RNDN);
        mpfr_mul(r19893, r19873, r19871, MPFR_RNDN);
        mpfr_exp(r19894, r19893, MPFR_RNDN);
        mpfr_add(r19895, r19880, r19879, MPFR_RNDN);
        mpfr_sqrt(r19896, r19895, MPFR_RNDN);
        mpfr_pow(r19897, r19896, r19869, MPFR_RNDN);
        mpfr_div(r19898, r19894, r19897, MPFR_RNDN);
        mpfr_div(r19899, r19892, r19898, MPFR_RNDN);
        if (mpfr_get_si(r19868, MPFR_RNDN)) { mpfr_set(r19900, r19887, MPFR_RNDN); } else { mpfr_set(r19900, r19899, MPFR_RNDN); };
        return mpfr_get_d(r19900, MPFR_RNDN);
}

