#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 r7636 = x_re;
        float r7637 = r7636 * r7636;
        float r7638 = x_im;
        float r7639 = r7638 * r7638;
        float r7640 = r7637 + r7639;
        float r7641 = sqrt(r7640);
        float r7642 = log(r7641);
        float r7643 = y_re;
        float r7644 = r7642 * r7643;
        float r7645 = atan2(r7638, r7636);
        float r7646 = y_im;
        float r7647 = r7645 * r7646;
        float r7648 = r7644 - r7647;
        float r7649 = exp(r7648);
        float r7650 = r7642 * r7646;
        float r7651 = r7645 * r7643;
        float r7652 = r7650 + r7651;
        float r7653 = sin(r7652);
        float r7654 = r7649 * r7653;
        return r7654;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r7655 = x_re;
        double r7656 = r7655 * r7655;
        double r7657 = x_im;
        double r7658 = r7657 * r7657;
        double r7659 = r7656 + r7658;
        double r7660 = sqrt(r7659);
        double r7661 = log(r7660);
        double r7662 = y_re;
        double r7663 = r7661 * r7662;
        double r7664 = atan2(r7657, r7655);
        double r7665 = y_im;
        double r7666 = r7664 * r7665;
        double r7667 = r7663 - r7666;
        double r7668 = exp(r7667);
        double r7669 = r7661 * r7665;
        double r7670 = r7664 * r7662;
        double r7671 = r7669 + r7670;
        double r7672 = sin(r7671);
        double r7673 = r7668 * r7672;
        return r7673;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r7674 = y_re;
        float r7675 = x_re;
        float r7676 = r7675 * r7675;
        float r7677 = x_im;
        float r7678 = r7677 * r7677;
        float r7679 = r7676 + r7678;
        float r7680 = sqrt(r7679);
        float r7681 = log(r7680);
        float r7682 = r7674 * r7681;
        float r7683 = atan2(r7677, r7675);
        float r7684 = y_im;
        float r7685 = r7683 * r7684;
        float r7686 = r7682 - r7685;
        float r7687 = exp(r7686);
        float r7688 = r7683 * r7674;
        float r7689 = -1.0f;
        float r7690 = r7689 / r7675;
        float r7691 = log(r7690);
        float r7692 = r7684 * r7691;
        float r7693 = r7688 - r7692;
        float r7694 = sin(r7693);
        float r7695 = r7687 * r7694;
        float r7696 = 5.6913666915155e-310f;
        bool r7697 = r7695 <= r7696;
        float r7698 = 4.377233373094623e+307f;
        bool r7699 = r7695 <= r7698;
        float r7700 = r7684 * r7681;
        float r7701 = r7700 + r7688;
        float r7702 = sin(r7701);
        float r7703 = -r7684;
        float r7704 = r7703 * r7683;
        float r7705 = exp(r7704);
        float r7706 = pow(r7680, r7674);
        float r7707 = r7705 * r7706;
        float r7708 = r7702 * r7707;
        float r7709 = log(r7675);
        float r7710 = r7709 * r7684;
        float r7711 = r7710 + r7688;
        float r7712 = sin(r7711);
        float r7713 = r7712 * r7687;
        float r7714 = r7699 ? r7708 : r7713;
        float r7715 = r7697 ? r7695 : r7714;
        return r7715;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r7716 = y_re;
        double r7717 = x_re;
        double r7718 = r7717 * r7717;
        double r7719 = x_im;
        double r7720 = r7719 * r7719;
        double r7721 = r7718 + r7720;
        double r7722 = sqrt(r7721);
        double r7723 = log(r7722);
        double r7724 = r7716 * r7723;
        double r7725 = atan2(r7719, r7717);
        double r7726 = y_im;
        double r7727 = r7725 * r7726;
        double r7728 = r7724 - r7727;
        double r7729 = exp(r7728);
        double r7730 = r7725 * r7716;
        double r7731 = -1.0;
        double r7732 = r7731 / r7717;
        double r7733 = log(r7732);
        double r7734 = r7726 * r7733;
        double r7735 = r7730 - r7734;
        double r7736 = sin(r7735);
        double r7737 = r7729 * r7736;
        double r7738 = 5.6913666915155e-310;
        bool r7739 = r7737 <= r7738;
        double r7740 = 4.377233373094623e+307;
        bool r7741 = r7737 <= r7740;
        double r7742 = r7726 * r7723;
        double r7743 = r7742 + r7730;
        double r7744 = sin(r7743);
        double r7745 = -r7726;
        double r7746 = r7745 * r7725;
        double r7747 = exp(r7746);
        double r7748 = pow(r7722, r7716);
        double r7749 = r7747 * r7748;
        double r7750 = r7744 * r7749;
        double r7751 = log(r7717);
        double r7752 = r7751 * r7726;
        double r7753 = r7752 + r7730;
        double r7754 = sin(r7753);
        double r7755 = r7754 * r7729;
        double r7756 = r7741 ? r7750 : r7755;
        double r7757 = r7739 ? r7737 : r7756;
        return r7757;
}

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 r7758, r7759, r7760, r7761, r7762, r7763, r7764, r7765, r7766, r7767, r7768, r7769, r7770, r7771, r7772, r7773, r7774, r7775, r7776;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2128);
        mpfr_init(r7758);
        mpfr_init(r7759);
        mpfr_init(r7760);
        mpfr_init(r7761);
        mpfr_init(r7762);
        mpfr_init(r7763);
        mpfr_init(r7764);
        mpfr_init(r7765);
        mpfr_init(r7766);
        mpfr_init(r7767);
        mpfr_init(r7768);
        mpfr_init(r7769);
        mpfr_init(r7770);
        mpfr_init(r7771);
        mpfr_init(r7772);
        mpfr_init(r7773);
        mpfr_init(r7774);
        mpfr_init(r7775);
        mpfr_init(r7776);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7758, x_re, MPFR_RNDN);
        mpfr_mul(r7759, r7758, r7758, MPFR_RNDN);
        mpfr_set_d(r7760, x_im, MPFR_RNDN);
        mpfr_mul(r7761, r7760, r7760, MPFR_RNDN);
        mpfr_add(r7762, r7759, r7761, MPFR_RNDN);
        mpfr_sqrt(r7763, r7762, MPFR_RNDN);
        mpfr_log(r7764, r7763, MPFR_RNDN);
        mpfr_set_d(r7765, y_re, MPFR_RNDN);
        mpfr_mul(r7766, r7764, r7765, MPFR_RNDN);
        mpfr_atan2(r7767, r7760, r7758, MPFR_RNDN);
        mpfr_set_d(r7768, y_im, MPFR_RNDN);
        mpfr_mul(r7769, r7767, r7768, MPFR_RNDN);
        mpfr_sub(r7770, r7766, r7769, MPFR_RNDN);
        mpfr_exp(r7771, r7770, MPFR_RNDN);
        mpfr_mul(r7772, r7764, r7768, MPFR_RNDN);
        mpfr_mul(r7773, r7767, r7765, MPFR_RNDN);
        mpfr_add(r7774, r7772, r7773, MPFR_RNDN);
        mpfr_sin(r7775, r7774, MPFR_RNDN);
        mpfr_mul(r7776, r7771, r7775, MPFR_RNDN);
        return mpfr_get_d(r7776, MPFR_RNDN);
}

static mpfr_t r7777, r7778, r7779, r7780, r7781, r7782, r7783, r7784, r7785, r7786, r7787, r7788, r7789, r7790, r7791, r7792, r7793, r7794, r7795, r7796, r7797, r7798, r7799, r7800, r7801, r7802, r7803, r7804, r7805, r7806, r7807, r7808, r7809, r7810, r7811, r7812, r7813, r7814, r7815, r7816, r7817, r7818;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2128);
        mpfr_init(r7777);
        mpfr_init(r7778);
        mpfr_init(r7779);
        mpfr_init(r7780);
        mpfr_init(r7781);
        mpfr_init(r7782);
        mpfr_init(r7783);
        mpfr_init(r7784);
        mpfr_init(r7785);
        mpfr_init(r7786);
        mpfr_init(r7787);
        mpfr_init(r7788);
        mpfr_init(r7789);
        mpfr_init(r7790);
        mpfr_init(r7791);
        mpfr_init_set_str(r7792, "-1", 10, MPFR_RNDN);
        mpfr_init(r7793);
        mpfr_init(r7794);
        mpfr_init(r7795);
        mpfr_init(r7796);
        mpfr_init(r7797);
        mpfr_init(r7798);
        mpfr_init_set_str(r7799, "5.6913666915155e-310", 10, MPFR_RNDN);
        mpfr_init(r7800);
        mpfr_init_set_str(r7801, "4.377233373094623e+307", 10, MPFR_RNDN);
        mpfr_init(r7802);
        mpfr_init(r7803);
        mpfr_init(r7804);
        mpfr_init(r7805);
        mpfr_init(r7806);
        mpfr_init(r7807);
        mpfr_init(r7808);
        mpfr_init(r7809);
        mpfr_init(r7810);
        mpfr_init(r7811);
        mpfr_init(r7812);
        mpfr_init(r7813);
        mpfr_init(r7814);
        mpfr_init(r7815);
        mpfr_init(r7816);
        mpfr_init(r7817);
        mpfr_init(r7818);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7777, y_re, MPFR_RNDN);
        mpfr_set_d(r7778, x_re, MPFR_RNDN);
        mpfr_mul(r7779, r7778, r7778, MPFR_RNDN);
        mpfr_set_d(r7780, x_im, MPFR_RNDN);
        mpfr_mul(r7781, r7780, r7780, MPFR_RNDN);
        mpfr_add(r7782, r7779, r7781, MPFR_RNDN);
        mpfr_sqrt(r7783, r7782, MPFR_RNDN);
        mpfr_log(r7784, r7783, MPFR_RNDN);
        mpfr_mul(r7785, r7777, r7784, MPFR_RNDN);
        mpfr_atan2(r7786, r7780, r7778, MPFR_RNDN);
        mpfr_set_d(r7787, y_im, MPFR_RNDN);
        mpfr_mul(r7788, r7786, r7787, MPFR_RNDN);
        mpfr_sub(r7789, r7785, r7788, MPFR_RNDN);
        mpfr_exp(r7790, r7789, MPFR_RNDN);
        mpfr_mul(r7791, r7786, r7777, MPFR_RNDN);
        ;
        mpfr_div(r7793, r7792, r7778, MPFR_RNDN);
        mpfr_log(r7794, r7793, MPFR_RNDN);
        mpfr_mul(r7795, r7787, r7794, MPFR_RNDN);
        mpfr_sub(r7796, r7791, r7795, MPFR_RNDN);
        mpfr_sin(r7797, r7796, MPFR_RNDN);
        mpfr_mul(r7798, r7790, r7797, MPFR_RNDN);
        ;
        mpfr_set_si(r7800, mpfr_cmp(r7798, r7799) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r7802, mpfr_cmp(r7798, r7801) <= 0, MPFR_RNDN);
        mpfr_mul(r7803, r7787, r7784, MPFR_RNDN);
        mpfr_add(r7804, r7803, r7791, MPFR_RNDN);
        mpfr_sin(r7805, r7804, MPFR_RNDN);
        mpfr_neg(r7806, r7787, MPFR_RNDN);
        mpfr_mul(r7807, r7806, r7786, MPFR_RNDN);
        mpfr_exp(r7808, r7807, MPFR_RNDN);
        mpfr_pow(r7809, r7783, r7777, MPFR_RNDN);
        mpfr_mul(r7810, r7808, r7809, MPFR_RNDN);
        mpfr_mul(r7811, r7805, r7810, MPFR_RNDN);
        mpfr_log(r7812, r7778, MPFR_RNDN);
        mpfr_mul(r7813, r7812, r7787, MPFR_RNDN);
        mpfr_add(r7814, r7813, r7791, MPFR_RNDN);
        mpfr_sin(r7815, r7814, MPFR_RNDN);
        mpfr_mul(r7816, r7815, r7790, MPFR_RNDN);
        if (mpfr_get_si(r7802, MPFR_RNDN)) { mpfr_set(r7817, r7811, MPFR_RNDN); } else { mpfr_set(r7817, r7816, MPFR_RNDN); };
        if (mpfr_get_si(r7800, MPFR_RNDN)) { mpfr_set(r7818, r7798, MPFR_RNDN); } else { mpfr_set(r7818, r7817, MPFR_RNDN); };
        return mpfr_get_d(r7818, MPFR_RNDN);
}

static mpfr_t r7819, r7820, r7821, r7822, r7823, r7824, r7825, r7826, r7827, r7828, r7829, r7830, r7831, r7832, r7833, r7834, r7835, r7836, r7837, r7838, r7839, r7840, r7841, r7842, r7843, r7844, r7845, r7846, r7847, r7848, r7849, r7850, r7851, r7852, r7853, r7854, r7855, r7856, r7857, r7858, r7859, r7860;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2128);
        mpfr_init(r7819);
        mpfr_init(r7820);
        mpfr_init(r7821);
        mpfr_init(r7822);
        mpfr_init(r7823);
        mpfr_init(r7824);
        mpfr_init(r7825);
        mpfr_init(r7826);
        mpfr_init(r7827);
        mpfr_init(r7828);
        mpfr_init(r7829);
        mpfr_init(r7830);
        mpfr_init(r7831);
        mpfr_init(r7832);
        mpfr_init(r7833);
        mpfr_init_set_str(r7834, "-1", 10, MPFR_RNDN);
        mpfr_init(r7835);
        mpfr_init(r7836);
        mpfr_init(r7837);
        mpfr_init(r7838);
        mpfr_init(r7839);
        mpfr_init(r7840);
        mpfr_init_set_str(r7841, "5.6913666915155e-310", 10, MPFR_RNDN);
        mpfr_init(r7842);
        mpfr_init_set_str(r7843, "4.377233373094623e+307", 10, MPFR_RNDN);
        mpfr_init(r7844);
        mpfr_init(r7845);
        mpfr_init(r7846);
        mpfr_init(r7847);
        mpfr_init(r7848);
        mpfr_init(r7849);
        mpfr_init(r7850);
        mpfr_init(r7851);
        mpfr_init(r7852);
        mpfr_init(r7853);
        mpfr_init(r7854);
        mpfr_init(r7855);
        mpfr_init(r7856);
        mpfr_init(r7857);
        mpfr_init(r7858);
        mpfr_init(r7859);
        mpfr_init(r7860);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7819, y_re, MPFR_RNDN);
        mpfr_set_d(r7820, x_re, MPFR_RNDN);
        mpfr_mul(r7821, r7820, r7820, MPFR_RNDN);
        mpfr_set_d(r7822, x_im, MPFR_RNDN);
        mpfr_mul(r7823, r7822, r7822, MPFR_RNDN);
        mpfr_add(r7824, r7821, r7823, MPFR_RNDN);
        mpfr_sqrt(r7825, r7824, MPFR_RNDN);
        mpfr_log(r7826, r7825, MPFR_RNDN);
        mpfr_mul(r7827, r7819, r7826, MPFR_RNDN);
        mpfr_atan2(r7828, r7822, r7820, MPFR_RNDN);
        mpfr_set_d(r7829, y_im, MPFR_RNDN);
        mpfr_mul(r7830, r7828, r7829, MPFR_RNDN);
        mpfr_sub(r7831, r7827, r7830, MPFR_RNDN);
        mpfr_exp(r7832, r7831, MPFR_RNDN);
        mpfr_mul(r7833, r7828, r7819, MPFR_RNDN);
        ;
        mpfr_div(r7835, r7834, r7820, MPFR_RNDN);
        mpfr_log(r7836, r7835, MPFR_RNDN);
        mpfr_mul(r7837, r7829, r7836, MPFR_RNDN);
        mpfr_sub(r7838, r7833, r7837, MPFR_RNDN);
        mpfr_sin(r7839, r7838, MPFR_RNDN);
        mpfr_mul(r7840, r7832, r7839, MPFR_RNDN);
        ;
        mpfr_set_si(r7842, mpfr_cmp(r7840, r7841) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r7844, mpfr_cmp(r7840, r7843) <= 0, MPFR_RNDN);
        mpfr_mul(r7845, r7829, r7826, MPFR_RNDN);
        mpfr_add(r7846, r7845, r7833, MPFR_RNDN);
        mpfr_sin(r7847, r7846, MPFR_RNDN);
        mpfr_neg(r7848, r7829, MPFR_RNDN);
        mpfr_mul(r7849, r7848, r7828, MPFR_RNDN);
        mpfr_exp(r7850, r7849, MPFR_RNDN);
        mpfr_pow(r7851, r7825, r7819, MPFR_RNDN);
        mpfr_mul(r7852, r7850, r7851, MPFR_RNDN);
        mpfr_mul(r7853, r7847, r7852, MPFR_RNDN);
        mpfr_log(r7854, r7820, MPFR_RNDN);
        mpfr_mul(r7855, r7854, r7829, MPFR_RNDN);
        mpfr_add(r7856, r7855, r7833, MPFR_RNDN);
        mpfr_sin(r7857, r7856, MPFR_RNDN);
        mpfr_mul(r7858, r7857, r7832, MPFR_RNDN);
        if (mpfr_get_si(r7844, MPFR_RNDN)) { mpfr_set(r7859, r7853, MPFR_RNDN); } else { mpfr_set(r7859, r7858, MPFR_RNDN); };
        if (mpfr_get_si(r7842, MPFR_RNDN)) { mpfr_set(r7860, r7840, MPFR_RNDN); } else { mpfr_set(r7860, r7859, MPFR_RNDN); };
        return mpfr_get_d(r7860, MPFR_RNDN);
}

