#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 r7786 = x_re;
        float r7787 = r7786 * r7786;
        float r7788 = x_im;
        float r7789 = r7788 * r7788;
        float r7790 = r7787 + r7789;
        float r7791 = sqrt(r7790);
        float r7792 = log(r7791);
        float r7793 = y_re;
        float r7794 = r7792 * r7793;
        float r7795 = atan2(r7788, r7786);
        float r7796 = y_im;
        float r7797 = r7795 * r7796;
        float r7798 = r7794 - r7797;
        float r7799 = exp(r7798);
        float r7800 = r7792 * r7796;
        float r7801 = r7795 * r7793;
        float r7802 = r7800 + r7801;
        float r7803 = cos(r7802);
        float r7804 = r7799 * r7803;
        return r7804;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r7805 = x_re;
        double r7806 = r7805 * r7805;
        double r7807 = x_im;
        double r7808 = r7807 * r7807;
        double r7809 = r7806 + r7808;
        double r7810 = sqrt(r7809);
        double r7811 = log(r7810);
        double r7812 = y_re;
        double r7813 = r7811 * r7812;
        double r7814 = atan2(r7807, r7805);
        double r7815 = y_im;
        double r7816 = r7814 * r7815;
        double r7817 = r7813 - r7816;
        double r7818 = exp(r7817);
        double r7819 = r7811 * r7815;
        double r7820 = r7814 * r7812;
        double r7821 = r7819 + r7820;
        double r7822 = cos(r7821);
        double r7823 = r7818 * r7822;
        return r7823;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r7824 = x_re;
        float r7825 = -r7824;
        float r7826 = y_re;
        float r7827 = pow(r7825, r7826);
        float r7828 = y_im;
        float r7829 = exp(r7828);
        float r7830 = x_im;
        float r7831 = atan2(r7830, r7824);
        float r7832 = pow(r7829, r7831);
        float r7833 = r7827 / r7832;
        float r7834 = 1.000000000041244;
        bool r7835 = r7833 <= r7834;
        float r7836 = r7830 * r7830;
        float r7837 = r7824 * r7824;
        float r7838 = r7836 + r7837;
        float r7839 = sqrt(r7838);
        float r7840 = log(r7839);
        float r7841 = r7840 * r7826;
        float r7842 = r7831 * r7828;
        float r7843 = r7841 - r7842;
        float r7844 = exp(r7843);
        float r7845 = r7835 ? r7833 : r7844;
        return r7845;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r7846 = x_re;
        double r7847 = -r7846;
        double r7848 = y_re;
        double r7849 = pow(r7847, r7848);
        double r7850 = y_im;
        double r7851 = exp(r7850);
        double r7852 = x_im;
        double r7853 = atan2(r7852, r7846);
        double r7854 = pow(r7851, r7853);
        double r7855 = r7849 / r7854;
        double r7856 = 1.000000000041244;
        bool r7857 = r7855 <= r7856;
        double r7858 = r7852 * r7852;
        double r7859 = r7846 * r7846;
        double r7860 = r7858 + r7859;
        double r7861 = sqrt(r7860);
        double r7862 = log(r7861);
        double r7863 = r7862 * r7848;
        double r7864 = r7853 * r7850;
        double r7865 = r7863 - r7864;
        double r7866 = exp(r7865);
        double r7867 = r7857 ? r7855 : r7866;
        return r7867;
}

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 r7868, r7869, r7870, r7871, r7872, r7873, r7874, r7875, r7876, r7877, r7878, r7879, r7880, r7881, r7882, r7883, r7884, r7885, r7886;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r7868);
        mpfr_init(r7869);
        mpfr_init(r7870);
        mpfr_init(r7871);
        mpfr_init(r7872);
        mpfr_init(r7873);
        mpfr_init(r7874);
        mpfr_init(r7875);
        mpfr_init(r7876);
        mpfr_init(r7877);
        mpfr_init(r7878);
        mpfr_init(r7879);
        mpfr_init(r7880);
        mpfr_init(r7881);
        mpfr_init(r7882);
        mpfr_init(r7883);
        mpfr_init(r7884);
        mpfr_init(r7885);
        mpfr_init(r7886);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7868, x_re, MPFR_RNDN);
        mpfr_mul(r7869, r7868, r7868, MPFR_RNDN);
        mpfr_set_d(r7870, x_im, MPFR_RNDN);
        mpfr_mul(r7871, r7870, r7870, MPFR_RNDN);
        mpfr_add(r7872, r7869, r7871, MPFR_RNDN);
        mpfr_sqrt(r7873, r7872, MPFR_RNDN);
        mpfr_log(r7874, r7873, MPFR_RNDN);
        mpfr_set_d(r7875, y_re, MPFR_RNDN);
        mpfr_mul(r7876, r7874, r7875, MPFR_RNDN);
        mpfr_atan2(r7877, r7870, r7868, MPFR_RNDN);
        mpfr_set_d(r7878, y_im, MPFR_RNDN);
        mpfr_mul(r7879, r7877, r7878, MPFR_RNDN);
        mpfr_sub(r7880, r7876, r7879, MPFR_RNDN);
        mpfr_exp(r7881, r7880, MPFR_RNDN);
        mpfr_mul(r7882, r7874, r7878, MPFR_RNDN);
        mpfr_mul(r7883, r7877, r7875, MPFR_RNDN);
        mpfr_add(r7884, r7882, r7883, MPFR_RNDN);
        mpfr_cos(r7885, r7884, MPFR_RNDN);
        mpfr_mul(r7886, r7881, r7885, MPFR_RNDN);
        return mpfr_get_d(r7886, MPFR_RNDN);
}

static mpfr_t r7887, r7888, r7889, r7890, r7891, r7892, r7893, r7894, r7895, r7896, r7897, r7898, r7899, r7900, r7901, r7902, r7903, r7904, r7905, r7906, r7907, r7908;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r7887);
        mpfr_init(r7888);
        mpfr_init(r7889);
        mpfr_init(r7890);
        mpfr_init(r7891);
        mpfr_init(r7892);
        mpfr_init(r7893);
        mpfr_init(r7894);
        mpfr_init(r7895);
        mpfr_init(r7896);
        mpfr_init_set_str(r7897, "1.000000000041244", 10, MPFR_RNDN);
        mpfr_init(r7898);
        mpfr_init(r7899);
        mpfr_init(r7900);
        mpfr_init(r7901);
        mpfr_init(r7902);
        mpfr_init(r7903);
        mpfr_init(r7904);
        mpfr_init(r7905);
        mpfr_init(r7906);
        mpfr_init(r7907);
        mpfr_init(r7908);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7887, x_re, MPFR_RNDN);
        mpfr_neg(r7888, r7887, MPFR_RNDN);
        mpfr_set_d(r7889, y_re, MPFR_RNDN);
        mpfr_pow(r7890, r7888, r7889, MPFR_RNDN);
        mpfr_set_d(r7891, y_im, MPFR_RNDN);
        mpfr_exp(r7892, r7891, MPFR_RNDN);
        mpfr_set_d(r7893, x_im, MPFR_RNDN);
        mpfr_atan2(r7894, r7893, r7887, MPFR_RNDN);
        mpfr_pow(r7895, r7892, r7894, MPFR_RNDN);
        mpfr_div(r7896, r7890, r7895, MPFR_RNDN);
        ;
        mpfr_set_si(r7898, mpfr_cmp(r7896, r7897) <= 0, MPFR_RNDN);
        mpfr_mul(r7899, r7893, r7893, MPFR_RNDN);
        mpfr_mul(r7900, r7887, r7887, MPFR_RNDN);
        mpfr_add(r7901, r7899, r7900, MPFR_RNDN);
        mpfr_sqrt(r7902, r7901, MPFR_RNDN);
        mpfr_log(r7903, r7902, MPFR_RNDN);
        mpfr_mul(r7904, r7903, r7889, MPFR_RNDN);
        mpfr_mul(r7905, r7894, r7891, MPFR_RNDN);
        mpfr_sub(r7906, r7904, r7905, MPFR_RNDN);
        mpfr_exp(r7907, r7906, MPFR_RNDN);
        if (mpfr_get_si(r7898, MPFR_RNDN)) { mpfr_set(r7908, r7896, MPFR_RNDN); } else { mpfr_set(r7908, r7907, MPFR_RNDN); };
        return mpfr_get_d(r7908, MPFR_RNDN);
}

static mpfr_t r7909, r7910, r7911, r7912, r7913, r7914, r7915, r7916, r7917, r7918, r7919, r7920, r7921, r7922, r7923, r7924, r7925, r7926, r7927, r7928, r7929, r7930;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r7909);
        mpfr_init(r7910);
        mpfr_init(r7911);
        mpfr_init(r7912);
        mpfr_init(r7913);
        mpfr_init(r7914);
        mpfr_init(r7915);
        mpfr_init(r7916);
        mpfr_init(r7917);
        mpfr_init(r7918);
        mpfr_init_set_str(r7919, "1.000000000041244", 10, MPFR_RNDN);
        mpfr_init(r7920);
        mpfr_init(r7921);
        mpfr_init(r7922);
        mpfr_init(r7923);
        mpfr_init(r7924);
        mpfr_init(r7925);
        mpfr_init(r7926);
        mpfr_init(r7927);
        mpfr_init(r7928);
        mpfr_init(r7929);
        mpfr_init(r7930);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7909, x_re, MPFR_RNDN);
        mpfr_neg(r7910, r7909, MPFR_RNDN);
        mpfr_set_d(r7911, y_re, MPFR_RNDN);
        mpfr_pow(r7912, r7910, r7911, MPFR_RNDN);
        mpfr_set_d(r7913, y_im, MPFR_RNDN);
        mpfr_exp(r7914, r7913, MPFR_RNDN);
        mpfr_set_d(r7915, x_im, MPFR_RNDN);
        mpfr_atan2(r7916, r7915, r7909, MPFR_RNDN);
        mpfr_pow(r7917, r7914, r7916, MPFR_RNDN);
        mpfr_div(r7918, r7912, r7917, MPFR_RNDN);
        ;
        mpfr_set_si(r7920, mpfr_cmp(r7918, r7919) <= 0, MPFR_RNDN);
        mpfr_mul(r7921, r7915, r7915, MPFR_RNDN);
        mpfr_mul(r7922, r7909, r7909, MPFR_RNDN);
        mpfr_add(r7923, r7921, r7922, MPFR_RNDN);
        mpfr_sqrt(r7924, r7923, MPFR_RNDN);
        mpfr_log(r7925, r7924, MPFR_RNDN);
        mpfr_mul(r7926, r7925, r7911, MPFR_RNDN);
        mpfr_mul(r7927, r7916, r7913, MPFR_RNDN);
        mpfr_sub(r7928, r7926, r7927, MPFR_RNDN);
        mpfr_exp(r7929, r7928, MPFR_RNDN);
        if (mpfr_get_si(r7920, MPFR_RNDN)) { mpfr_set(r7930, r7918, MPFR_RNDN); } else { mpfr_set(r7930, r7929, MPFR_RNDN); };
        return mpfr_get_d(r7930, MPFR_RNDN);
}

