#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 r14695 = x_re;
        float r14696 = r14695 * r14695;
        float r14697 = x_im;
        float r14698 = r14697 * r14697;
        float r14699 = r14696 + r14698;
        float r14700 = sqrt(r14699);
        float r14701 = log(r14700);
        float r14702 = y_re;
        float r14703 = r14701 * r14702;
        float r14704 = atan2(r14697, r14695);
        float r14705 = y_im;
        float r14706 = r14704 * r14705;
        float r14707 = r14703 - r14706;
        float r14708 = exp(r14707);
        float r14709 = r14701 * r14705;
        float r14710 = r14704 * r14702;
        float r14711 = r14709 + r14710;
        float r14712 = cos(r14711);
        float r14713 = r14708 * r14712;
        return r14713;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r14714 = x_re;
        double r14715 = r14714 * r14714;
        double r14716 = x_im;
        double r14717 = r14716 * r14716;
        double r14718 = r14715 + r14717;
        double r14719 = sqrt(r14718);
        double r14720 = log(r14719);
        double r14721 = y_re;
        double r14722 = r14720 * r14721;
        double r14723 = atan2(r14716, r14714);
        double r14724 = y_im;
        double r14725 = r14723 * r14724;
        double r14726 = r14722 - r14725;
        double r14727 = exp(r14726);
        double r14728 = r14720 * r14724;
        double r14729 = r14723 * r14721;
        double r14730 = r14728 + r14729;
        double r14731 = cos(r14730);
        double r14732 = r14727 * r14731;
        return r14732;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r14733 = y_re;
        float r14734 = -2.9335963728403624e+168f;
        bool r14735 = r14733 <= r14734;
        float r14736 = x_im;
        float r14737 = x_re;
        float r14738 = hypot(r14736, r14737);
        float r14739 = pow(r14738, r14733);
        float r14740 = 1.0f;
        float r14741 = r14740 / r14736;
        float r14742 = r14740 / r14737;
        float r14743 = atan2(r14741, r14742);
        float r14744 = y_im;
        float r14745 = r14743 / r14744;
        float r14746 = exp(r14745);
        float r14747 = r14739 / r14746;
        float r14748 = r14740 / r14744;
        float r14749 = hypot(r14741, r14742);
        float r14750 = log(r14749);
        float r14751 = r14743 / r14733;
        float r14752 = fma(r14748, r14750, r14751);
        float r14753 = cos(r14752);
        float r14754 = r14747 * r14753;
        float r14755 = atan2(r14736, r14737);
        float r14756 = r14744 * r14755;
        float r14757 = exp(r14756);
        float r14758 = r14739 / r14757;
        float r14759 = log(r14738);
        float r14760 = r14733 * r14755;
        float r14761 = fma(r14744, r14759, r14760);
        float r14762 = cos(r14761);
        float r14763 = cbrt(r14762);
        float r14764 = r14763 * (r14763 * r14763);
        float r14765 = r14758 * r14764;
        float r14766 = r14735 ? r14754 : r14765;
        return r14766;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r14767 = y_re;
        double r14768 = -2.9335963728403624e+168;
        bool r14769 = r14767 <= r14768;
        double r14770 = x_im;
        double r14771 = x_re;
        double r14772 = hypot(r14770, r14771);
        double r14773 = pow(r14772, r14767);
        double r14774 = 1.0;
        double r14775 = r14774 / r14770;
        double r14776 = r14774 / r14771;
        double r14777 = atan2(r14775, r14776);
        double r14778 = y_im;
        double r14779 = r14777 / r14778;
        double r14780 = exp(r14779);
        double r14781 = r14773 / r14780;
        double r14782 = r14774 / r14778;
        double r14783 = hypot(r14775, r14776);
        double r14784 = log(r14783);
        double r14785 = r14777 / r14767;
        double r14786 = fma(r14782, r14784, r14785);
        double r14787 = cos(r14786);
        double r14788 = r14781 * r14787;
        double r14789 = atan2(r14770, r14771);
        double r14790 = r14778 * r14789;
        double r14791 = exp(r14790);
        double r14792 = r14773 / r14791;
        double r14793 = log(r14772);
        double r14794 = r14767 * r14789;
        double r14795 = fma(r14778, r14793, r14794);
        double r14796 = cos(r14795);
        double r14797 = cbrt(r14796);
        double r14798 = r14797 * (r14797 * r14797);
        double r14799 = r14792 * r14798;
        double r14800 = r14769 ? r14788 : r14799;
        return r14800;
}

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 r14801, r14802, r14803, r14804, r14805, r14806, r14807, r14808, r14809, r14810, r14811, r14812, r14813, r14814, r14815, r14816, r14817, r14818, r14819;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r14801);
        mpfr_init(r14802);
        mpfr_init(r14803);
        mpfr_init(r14804);
        mpfr_init(r14805);
        mpfr_init(r14806);
        mpfr_init(r14807);
        mpfr_init(r14808);
        mpfr_init(r14809);
        mpfr_init(r14810);
        mpfr_init(r14811);
        mpfr_init(r14812);
        mpfr_init(r14813);
        mpfr_init(r14814);
        mpfr_init(r14815);
        mpfr_init(r14816);
        mpfr_init(r14817);
        mpfr_init(r14818);
        mpfr_init(r14819);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r14801, x_re, MPFR_RNDN);
        mpfr_mul(r14802, r14801, r14801, MPFR_RNDN);
        mpfr_set_d(r14803, x_im, MPFR_RNDN);
        mpfr_mul(r14804, r14803, r14803, MPFR_RNDN);
        mpfr_add(r14805, r14802, r14804, MPFR_RNDN);
        mpfr_sqrt(r14806, r14805, MPFR_RNDN);
        mpfr_log(r14807, r14806, MPFR_RNDN);
        mpfr_set_d(r14808, y_re, MPFR_RNDN);
        mpfr_mul(r14809, r14807, r14808, MPFR_RNDN);
        mpfr_atan2(r14810, r14803, r14801, MPFR_RNDN);
        mpfr_set_d(r14811, y_im, MPFR_RNDN);
        mpfr_mul(r14812, r14810, r14811, MPFR_RNDN);
        mpfr_sub(r14813, r14809, r14812, MPFR_RNDN);
        mpfr_exp(r14814, r14813, MPFR_RNDN);
        mpfr_mul(r14815, r14807, r14811, MPFR_RNDN);
        mpfr_mul(r14816, r14810, r14808, MPFR_RNDN);
        mpfr_add(r14817, r14815, r14816, MPFR_RNDN);
        mpfr_cos(r14818, r14817, MPFR_RNDN);
        mpfr_mul(r14819, r14814, r14818, MPFR_RNDN);
        return mpfr_get_d(r14819, MPFR_RNDN);
}

static mpfr_t r14820, r14821, r14822, r14823, r14824, r14825, r14826, r14827, r14828, r14829, r14830, r14831, r14832, r14833, r14834, r14835, r14836, r14837, r14838, r14839, r14840, r14841, r14842, r14843, r14844, r14845, r14846, r14847, r14848, r14849, r14850, r14851, r14852, r14853;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r14820);
        mpfr_init_set_str(r14821, "-2.9335963728403624e+168", 10, MPFR_RNDN);
        mpfr_init(r14822);
        mpfr_init(r14823);
        mpfr_init(r14824);
        mpfr_init(r14825);
        mpfr_init(r14826);
        mpfr_init_set_str(r14827, "1", 10, MPFR_RNDN);
        mpfr_init(r14828);
        mpfr_init(r14829);
        mpfr_init(r14830);
        mpfr_init(r14831);
        mpfr_init(r14832);
        mpfr_init(r14833);
        mpfr_init(r14834);
        mpfr_init(r14835);
        mpfr_init(r14836);
        mpfr_init(r14837);
        mpfr_init(r14838);
        mpfr_init(r14839);
        mpfr_init(r14840);
        mpfr_init(r14841);
        mpfr_init(r14842);
        mpfr_init(r14843);
        mpfr_init(r14844);
        mpfr_init(r14845);
        mpfr_init(r14846);
        mpfr_init(r14847);
        mpfr_init(r14848);
        mpfr_init(r14849);
        mpfr_init(r14850);
        mpfr_init(r14851);
        mpfr_init(r14852);
        mpfr_init(r14853);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r14820, y_re, MPFR_RNDN);
        ;
        mpfr_set_si(r14822, mpfr_cmp(r14820, r14821) <= 0, MPFR_RNDN);
        mpfr_set_d(r14823, x_im, MPFR_RNDN);
        mpfr_set_d(r14824, x_re, MPFR_RNDN);
        mpfr_hypot(r14825, r14823, r14824, MPFR_RNDN);
        mpfr_pow(r14826, r14825, r14820, MPFR_RNDN);
        ;
        mpfr_div(r14828, r14827, r14823, MPFR_RNDN);
        mpfr_div(r14829, r14827, r14824, MPFR_RNDN);
        mpfr_atan2(r14830, r14828, r14829, MPFR_RNDN);
        mpfr_set_d(r14831, y_im, MPFR_RNDN);
        mpfr_div(r14832, r14830, r14831, MPFR_RNDN);
        mpfr_exp(r14833, r14832, MPFR_RNDN);
        mpfr_div(r14834, r14826, r14833, MPFR_RNDN);
        mpfr_div(r14835, r14827, r14831, MPFR_RNDN);
        mpfr_hypot(r14836, r14828, r14829, MPFR_RNDN);
        mpfr_log(r14837, r14836, MPFR_RNDN);
        mpfr_div(r14838, r14830, r14820, MPFR_RNDN);
        mpfr_fma(r14839, r14835, r14837, r14838, MPFR_RNDN);
        mpfr_cos(r14840, r14839, MPFR_RNDN);
        mpfr_mul(r14841, r14834, r14840, MPFR_RNDN);
        mpfr_atan2(r14842, r14823, r14824, MPFR_RNDN);
        mpfr_mul(r14843, r14831, r14842, MPFR_RNDN);
        mpfr_exp(r14844, r14843, MPFR_RNDN);
        mpfr_div(r14845, r14826, r14844, MPFR_RNDN);
        mpfr_log(r14846, r14825, MPFR_RNDN);
        mpfr_mul(r14847, r14820, r14842, MPFR_RNDN);
        mpfr_fma(r14848, r14831, r14846, r14847, MPFR_RNDN);
        mpfr_cos(r14849, r14848, MPFR_RNDN);
        mpfr_cbrt(r14850, r14849, MPFR_RNDN);
        mpfr_mul(r14851, r14850, r14850, MPFR_RNDN); mpfr_mul(r14851, r14851, r14850, MPFR_RNDN);
        mpfr_mul(r14852, r14845, r14851, MPFR_RNDN);
        if (mpfr_get_si(r14822, MPFR_RNDN)) { mpfr_set(r14853, r14841, MPFR_RNDN); } else { mpfr_set(r14853, r14852, MPFR_RNDN); };
        return mpfr_get_d(r14853, MPFR_RNDN);
}

static mpfr_t r14854, r14855, r14856, r14857, r14858, r14859, r14860, r14861, r14862, r14863, r14864, r14865, r14866, r14867, r14868, r14869, r14870, r14871, r14872, r14873, r14874, r14875, r14876, r14877, r14878, r14879, r14880, r14881, r14882, r14883, r14884, r14885, r14886, r14887;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r14854);
        mpfr_init_set_str(r14855, "-2.9335963728403624e+168", 10, MPFR_RNDN);
        mpfr_init(r14856);
        mpfr_init(r14857);
        mpfr_init(r14858);
        mpfr_init(r14859);
        mpfr_init(r14860);
        mpfr_init_set_str(r14861, "1", 10, MPFR_RNDN);
        mpfr_init(r14862);
        mpfr_init(r14863);
        mpfr_init(r14864);
        mpfr_init(r14865);
        mpfr_init(r14866);
        mpfr_init(r14867);
        mpfr_init(r14868);
        mpfr_init(r14869);
        mpfr_init(r14870);
        mpfr_init(r14871);
        mpfr_init(r14872);
        mpfr_init(r14873);
        mpfr_init(r14874);
        mpfr_init(r14875);
        mpfr_init(r14876);
        mpfr_init(r14877);
        mpfr_init(r14878);
        mpfr_init(r14879);
        mpfr_init(r14880);
        mpfr_init(r14881);
        mpfr_init(r14882);
        mpfr_init(r14883);
        mpfr_init(r14884);
        mpfr_init(r14885);
        mpfr_init(r14886);
        mpfr_init(r14887);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r14854, y_re, MPFR_RNDN);
        ;
        mpfr_set_si(r14856, mpfr_cmp(r14854, r14855) <= 0, MPFR_RNDN);
        mpfr_set_d(r14857, x_im, MPFR_RNDN);
        mpfr_set_d(r14858, x_re, MPFR_RNDN);
        mpfr_hypot(r14859, r14857, r14858, MPFR_RNDN);
        mpfr_pow(r14860, r14859, r14854, MPFR_RNDN);
        ;
        mpfr_div(r14862, r14861, r14857, MPFR_RNDN);
        mpfr_div(r14863, r14861, r14858, MPFR_RNDN);
        mpfr_atan2(r14864, r14862, r14863, MPFR_RNDN);
        mpfr_set_d(r14865, y_im, MPFR_RNDN);
        mpfr_div(r14866, r14864, r14865, MPFR_RNDN);
        mpfr_exp(r14867, r14866, MPFR_RNDN);
        mpfr_div(r14868, r14860, r14867, MPFR_RNDN);
        mpfr_div(r14869, r14861, r14865, MPFR_RNDN);
        mpfr_hypot(r14870, r14862, r14863, MPFR_RNDN);
        mpfr_log(r14871, r14870, MPFR_RNDN);
        mpfr_div(r14872, r14864, r14854, MPFR_RNDN);
        mpfr_fma(r14873, r14869, r14871, r14872, MPFR_RNDN);
        mpfr_cos(r14874, r14873, MPFR_RNDN);
        mpfr_mul(r14875, r14868, r14874, MPFR_RNDN);
        mpfr_atan2(r14876, r14857, r14858, MPFR_RNDN);
        mpfr_mul(r14877, r14865, r14876, MPFR_RNDN);
        mpfr_exp(r14878, r14877, MPFR_RNDN);
        mpfr_div(r14879, r14860, r14878, MPFR_RNDN);
        mpfr_log(r14880, r14859, MPFR_RNDN);
        mpfr_mul(r14881, r14854, r14876, MPFR_RNDN);
        mpfr_fma(r14882, r14865, r14880, r14881, MPFR_RNDN);
        mpfr_cos(r14883, r14882, MPFR_RNDN);
        mpfr_cbrt(r14884, r14883, MPFR_RNDN);
        mpfr_mul(r14885, r14884, r14884, MPFR_RNDN); mpfr_mul(r14885, r14885, r14884, MPFR_RNDN);
        mpfr_mul(r14886, r14879, r14885, MPFR_RNDN);
        if (mpfr_get_si(r14856, MPFR_RNDN)) { mpfr_set(r14887, r14875, MPFR_RNDN); } else { mpfr_set(r14887, r14886, MPFR_RNDN); };
        return mpfr_get_d(r14887, MPFR_RNDN);
}

