#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 = y_im;
        float r7825 = x_re;
        float r7826 = x_im;
        float r7827 = hypot(r7825, r7826);
        float r7828 = log(r7827);
        float r7829 = atan2(r7826, r7825);
        float r7830 = y_re;
        float r7831 = r7829 * r7830;
        float r7832 = fma(r7824, r7828, r7831);
        float r7833 = cos(r7832);
        float r7834 = expm1(r7833);
        float r7835 = 3;
        float r7836 = pow(r7834, r7835);
        float r7837 = cbrt(r7836);
        float r7838 = log1p(r7837);
        float r7839 = r7824 * r7829;
        float r7840 = r7828 * r7830;
        float r7841 = r7839 - r7840;
        float r7842 = exp(r7841);
        float r7843 = r7838 / r7842;
        return r7843;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r7844 = y_im;
        double r7845 = x_re;
        double r7846 = x_im;
        double r7847 = hypot(r7845, r7846);
        double r7848 = log(r7847);
        double r7849 = atan2(r7846, r7845);
        double r7850 = y_re;
        double r7851 = r7849 * r7850;
        double r7852 = fma(r7844, r7848, r7851);
        double r7853 = cos(r7852);
        double r7854 = expm1(r7853);
        double r7855 = 3;
        double r7856 = pow(r7854, r7855);
        double r7857 = cbrt(r7856);
        double r7858 = log1p(r7857);
        double r7859 = r7844 * r7849;
        double r7860 = r7848 * r7850;
        double r7861 = r7859 - r7860;
        double r7862 = exp(r7861);
        double r7863 = r7858 / r7862;
        return r7863;
}

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 r7864, r7865, r7866, r7867, r7868, r7869, r7870, r7871, r7872, r7873, r7874, r7875, r7876, r7877, r7878, r7879, r7880, r7881, r7882;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r7864);
        mpfr_init(r7865);
        mpfr_init(r7866);
        mpfr_init(r7867);
        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);
}

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

static mpfr_t r7883, r7884, r7885, r7886, r7887, r7888, r7889, r7890, r7891, r7892, r7893, r7894, r7895, r7896, r7897, r7898, r7899, r7900, r7901, r7902;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r7883);
        mpfr_init(r7884);
        mpfr_init(r7885);
        mpfr_init(r7886);
        mpfr_init(r7887);
        mpfr_init(r7888);
        mpfr_init(r7889);
        mpfr_init(r7890);
        mpfr_init(r7891);
        mpfr_init(r7892);
        mpfr_init(r7893);
        mpfr_init_set_str(r7894, "3", 10, MPFR_RNDN);
        mpfr_init(r7895);
        mpfr_init(r7896);
        mpfr_init(r7897);
        mpfr_init(r7898);
        mpfr_init(r7899);
        mpfr_init(r7900);
        mpfr_init(r7901);
        mpfr_init(r7902);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7883, y_im, MPFR_RNDN);
        mpfr_set_d(r7884, x_re, MPFR_RNDN);
        mpfr_set_d(r7885, x_im, MPFR_RNDN);
        mpfr_hypot(r7886, r7884, r7885, MPFR_RNDN);
        mpfr_log(r7887, r7886, MPFR_RNDN);
        mpfr_atan2(r7888, r7885, r7884, MPFR_RNDN);
        mpfr_set_d(r7889, y_re, MPFR_RNDN);
        mpfr_mul(r7890, r7888, r7889, MPFR_RNDN);
        mpfr_fma(r7891, r7883, r7887, r7890, MPFR_RNDN);
        mpfr_cos(r7892, r7891, MPFR_RNDN);
        mpfr_expm1(r7893, r7892, MPFR_RNDN);
        ;
        mpfr_pow(r7895, r7893, r7894, MPFR_RNDN);
        mpfr_cbrt(r7896, r7895, MPFR_RNDN);
        mpfr_log1p(r7897, r7896, MPFR_RNDN);
        mpfr_mul(r7898, r7883, r7888, MPFR_RNDN);
        mpfr_mul(r7899, r7887, r7889, MPFR_RNDN);
        mpfr_sub(r7900, r7898, r7899, MPFR_RNDN);
        mpfr_exp(r7901, r7900, MPFR_RNDN);
        mpfr_div(r7902, r7897, r7901, MPFR_RNDN);
        return mpfr_get_d(r7902, MPFR_RNDN);
}

static mpfr_t r7903, r7904, r7905, r7906, r7907, r7908, r7909, r7910, r7911, r7912, r7913, r7914, r7915, r7916, r7917, r7918, r7919, r7920, r7921, r7922;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r7903);
        mpfr_init(r7904);
        mpfr_init(r7905);
        mpfr_init(r7906);
        mpfr_init(r7907);
        mpfr_init(r7908);
        mpfr_init(r7909);
        mpfr_init(r7910);
        mpfr_init(r7911);
        mpfr_init(r7912);
        mpfr_init(r7913);
        mpfr_init_set_str(r7914, "3", 10, MPFR_RNDN);
        mpfr_init(r7915);
        mpfr_init(r7916);
        mpfr_init(r7917);
        mpfr_init(r7918);
        mpfr_init(r7919);
        mpfr_init(r7920);
        mpfr_init(r7921);
        mpfr_init(r7922);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r7903, y_im, MPFR_RNDN);
        mpfr_set_d(r7904, x_re, MPFR_RNDN);
        mpfr_set_d(r7905, x_im, MPFR_RNDN);
        mpfr_hypot(r7906, r7904, r7905, MPFR_RNDN);
        mpfr_log(r7907, r7906, MPFR_RNDN);
        mpfr_atan2(r7908, r7905, r7904, MPFR_RNDN);
        mpfr_set_d(r7909, y_re, MPFR_RNDN);
        mpfr_mul(r7910, r7908, r7909, MPFR_RNDN);
        mpfr_fma(r7911, r7903, r7907, r7910, MPFR_RNDN);
        mpfr_cos(r7912, r7911, MPFR_RNDN);
        mpfr_expm1(r7913, r7912, MPFR_RNDN);
        ;
        mpfr_pow(r7915, r7913, r7914, MPFR_RNDN);
        mpfr_cbrt(r7916, r7915, MPFR_RNDN);
        mpfr_log1p(r7917, r7916, MPFR_RNDN);
        mpfr_mul(r7918, r7903, r7908, MPFR_RNDN);
        mpfr_mul(r7919, r7907, r7909, MPFR_RNDN);
        mpfr_sub(r7920, r7918, r7919, MPFR_RNDN);
        mpfr_exp(r7921, r7920, MPFR_RNDN);
        mpfr_div(r7922, r7917, r7921, MPFR_RNDN);
        return mpfr_get_d(r7922, MPFR_RNDN);
}

