#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "math.log/2 on complex, real part";

double f_if(float re, float im, float base) {
        float r8745 = re;
        float r8746 = r8745 * r8745;
        float r8747 = im;
        float r8748 = r8747 * r8747;
        float r8749 = r8746 + r8748;
        float r8750 = sqrt(r8749);
        float r8751 = log(r8750);
        float r8752 = base;
        float r8753 = log(r8752);
        float r8754 = r8751 * r8753;
        float r8755 = atan2(r8747, r8745);
        float r8756 = 0;
        float r8757 = r8755 * r8756;
        float r8758 = r8754 + r8757;
        float r8759 = r8753 * r8753;
        float r8760 = r8756 * r8756;
        float r8761 = r8759 + r8760;
        float r8762 = r8758 / r8761;
        return r8762;
}

double f_id(double re, double im, double base) {
        double r8763 = re;
        double r8764 = r8763 * r8763;
        double r8765 = im;
        double r8766 = r8765 * r8765;
        double r8767 = r8764 + r8766;
        double r8768 = sqrt(r8767);
        double r8769 = log(r8768);
        double r8770 = base;
        double r8771 = log(r8770);
        double r8772 = r8769 * r8771;
        double r8773 = atan2(r8765, r8763);
        double r8774 = 0;
        double r8775 = r8773 * r8774;
        double r8776 = r8772 + r8775;
        double r8777 = r8771 * r8771;
        double r8778 = r8774 * r8774;
        double r8779 = r8777 + r8778;
        double r8780 = r8776 / r8779;
        return r8780;
}


double f_of(float re, float im, float base) {
        float r8781 = re;
        float r8782 = -r8781;
        float r8783 = -3.5537533183095413e+130;
        bool r8784 = r8782 <= r8783;
        float r8785 = log(r8781);
        float r8786 = -r8785;
        float r8787 = base;
        float r8788 = log(r8787);
        float r8789 = -r8788;
        float r8790 = r8786 / r8789;
        float r8791 = 2.2616487221266898e+146;
        bool r8792 = r8782 <= r8791;
        float r8793 = 1;
        float r8794 = r8788 * r8788;
        float r8795 = sqrt(r8794);
        float r8796 = r8793 / r8795;
        float r8797 = r8781 * r8781;
        float r8798 = im;
        float r8799 = r8798 * r8798;
        float r8800 = r8797 + r8799;
        float r8801 = sqrt(r8800);
        float r8802 = log(r8801);
        float r8803 = r8802 * r8788;
        float r8804 = r8803 / r8795;
        float r8805 = r8796 * r8804;
        float r8806 = -1;
        float r8807 = r8806 / r8781;
        float r8808 = log(r8807);
        float r8809 = r8794 / r8789;
        float r8810 = r8808 / r8809;
        float r8811 = r8792 ? r8805 : r8810;
        float r8812 = r8784 ? r8790 : r8811;
        return r8812;
}

double f_od(double re, double im, double base) {
        double r8813 = re;
        double r8814 = -r8813;
        double r8815 = -3.5537533183095413e+130;
        bool r8816 = r8814 <= r8815;
        double r8817 = log(r8813);
        double r8818 = -r8817;
        double r8819 = base;
        double r8820 = log(r8819);
        double r8821 = -r8820;
        double r8822 = r8818 / r8821;
        double r8823 = 2.2616487221266898e+146;
        bool r8824 = r8814 <= r8823;
        double r8825 = 1;
        double r8826 = r8820 * r8820;
        double r8827 = sqrt(r8826);
        double r8828 = r8825 / r8827;
        double r8829 = r8813 * r8813;
        double r8830 = im;
        double r8831 = r8830 * r8830;
        double r8832 = r8829 + r8831;
        double r8833 = sqrt(r8832);
        double r8834 = log(r8833);
        double r8835 = r8834 * r8820;
        double r8836 = r8835 / r8827;
        double r8837 = r8828 * r8836;
        double r8838 = -1;
        double r8839 = r8838 / r8813;
        double r8840 = log(r8839);
        double r8841 = r8826 / r8821;
        double r8842 = r8840 / r8841;
        double r8843 = r8824 ? r8837 : r8842;
        double r8844 = r8816 ? r8822 : r8843;
        return r8844;
}

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 r8845, r8846, r8847, r8848, r8849, r8850, r8851, r8852, r8853, r8854, r8855, r8856, r8857, r8858, r8859, r8860, r8861, r8862;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8845);
        mpfr_init(r8846);
        mpfr_init(r8847);
        mpfr_init(r8848);
        mpfr_init(r8849);
        mpfr_init(r8850);
        mpfr_init(r8851);
        mpfr_init(r8852);
        mpfr_init(r8853);
        mpfr_init(r8854);
        mpfr_init(r8855);
        mpfr_init_set_str(r8856, "0", 10, MPFR_RNDN);
        mpfr_init(r8857);
        mpfr_init(r8858);
        mpfr_init(r8859);
        mpfr_init(r8860);
        mpfr_init(r8861);
        mpfr_init(r8862);
}

double f_im(double re, double im, double base) {
        mpfr_set_d(r8845, re, MPFR_RNDN);
        mpfr_mul(r8846, r8845, r8845, MPFR_RNDN);
        mpfr_set_d(r8847, im, MPFR_RNDN);
        mpfr_mul(r8848, r8847, r8847, MPFR_RNDN);
        mpfr_add(r8849, r8846, r8848, MPFR_RNDN);
        mpfr_sqrt(r8850, r8849, MPFR_RNDN);
        mpfr_log(r8851, r8850, MPFR_RNDN);
        mpfr_set_d(r8852, base, MPFR_RNDN);
        mpfr_log(r8853, r8852, MPFR_RNDN);
        mpfr_mul(r8854, r8851, r8853, MPFR_RNDN);
        mpfr_atan2(r8855, r8847, r8845, MPFR_RNDN);
        ;
        mpfr_mul(r8857, r8855, r8856, MPFR_RNDN);
        mpfr_add(r8858, r8854, r8857, MPFR_RNDN);
        mpfr_mul(r8859, r8853, r8853, MPFR_RNDN);
        mpfr_mul(r8860, r8856, r8856, MPFR_RNDN);
        mpfr_add(r8861, r8859, r8860, MPFR_RNDN);
        mpfr_div(r8862, r8858, r8861, MPFR_RNDN);
        return mpfr_get_d(r8862, MPFR_RNDN);
}

static mpfr_t r8863, r8864, r8865, r8866, r8867, r8868, r8869, r8870, r8871, r8872, r8873, r8874, r8875, r8876, r8877, r8878, r8879, r8880, r8881, r8882, r8883, r8884, r8885, r8886, r8887, r8888, r8889, r8890, r8891, r8892, r8893, r8894;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8863);
        mpfr_init(r8864);
        mpfr_init_set_str(r8865, "-3.5537533183095413e+130", 10, MPFR_RNDN);
        mpfr_init(r8866);
        mpfr_init(r8867);
        mpfr_init(r8868);
        mpfr_init(r8869);
        mpfr_init(r8870);
        mpfr_init(r8871);
        mpfr_init(r8872);
        mpfr_init_set_str(r8873, "2.2616487221266898e+146", 10, MPFR_RNDN);
        mpfr_init(r8874);
        mpfr_init_set_str(r8875, "1", 10, MPFR_RNDN);
        mpfr_init(r8876);
        mpfr_init(r8877);
        mpfr_init(r8878);
        mpfr_init(r8879);
        mpfr_init(r8880);
        mpfr_init(r8881);
        mpfr_init(r8882);
        mpfr_init(r8883);
        mpfr_init(r8884);
        mpfr_init(r8885);
        mpfr_init(r8886);
        mpfr_init(r8887);
        mpfr_init_set_str(r8888, "-1", 10, MPFR_RNDN);
        mpfr_init(r8889);
        mpfr_init(r8890);
        mpfr_init(r8891);
        mpfr_init(r8892);
        mpfr_init(r8893);
        mpfr_init(r8894);
}

double f_fm(double re, double im, double base) {
        mpfr_set_d(r8863, re, MPFR_RNDN);
        mpfr_neg(r8864, r8863, MPFR_RNDN);
        ;
        mpfr_set_si(r8866, mpfr_cmp(r8864, r8865) <= 0, MPFR_RNDN);
        mpfr_log(r8867, r8863, MPFR_RNDN);
        mpfr_neg(r8868, r8867, MPFR_RNDN);
        mpfr_set_d(r8869, base, MPFR_RNDN);
        mpfr_log(r8870, r8869, MPFR_RNDN);
        mpfr_neg(r8871, r8870, MPFR_RNDN);
        mpfr_div(r8872, r8868, r8871, MPFR_RNDN);
        ;
        mpfr_set_si(r8874, mpfr_cmp(r8864, r8873) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r8876, r8870, r8870, MPFR_RNDN);
        mpfr_sqrt(r8877, r8876, MPFR_RNDN);
        mpfr_div(r8878, r8875, r8877, MPFR_RNDN);
        mpfr_mul(r8879, r8863, r8863, MPFR_RNDN);
        mpfr_set_d(r8880, im, MPFR_RNDN);
        mpfr_mul(r8881, r8880, r8880, MPFR_RNDN);
        mpfr_add(r8882, r8879, r8881, MPFR_RNDN);
        mpfr_sqrt(r8883, r8882, MPFR_RNDN);
        mpfr_log(r8884, r8883, MPFR_RNDN);
        mpfr_mul(r8885, r8884, r8870, MPFR_RNDN);
        mpfr_div(r8886, r8885, r8877, MPFR_RNDN);
        mpfr_mul(r8887, r8878, r8886, MPFR_RNDN);
        ;
        mpfr_div(r8889, r8888, r8863, MPFR_RNDN);
        mpfr_log(r8890, r8889, MPFR_RNDN);
        mpfr_div(r8891, r8876, r8871, MPFR_RNDN);
        mpfr_div(r8892, r8890, r8891, MPFR_RNDN);
        if (mpfr_get_si(r8874, MPFR_RNDN)) { mpfr_set(r8893, r8887, MPFR_RNDN); } else { mpfr_set(r8893, r8892, MPFR_RNDN); };
        if (mpfr_get_si(r8866, MPFR_RNDN)) { mpfr_set(r8894, r8872, MPFR_RNDN); } else { mpfr_set(r8894, r8893, MPFR_RNDN); };
        return mpfr_get_d(r8894, MPFR_RNDN);
}

static mpfr_t r8895, r8896, r8897, r8898, r8899, r8900, r8901, r8902, r8903, r8904, r8905, r8906, r8907, r8908, r8909, r8910, r8911, r8912, r8913, r8914, r8915, r8916, r8917, r8918, r8919, r8920, r8921, r8922, r8923, r8924, r8925, r8926;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8895);
        mpfr_init(r8896);
        mpfr_init_set_str(r8897, "-3.5537533183095413e+130", 10, MPFR_RNDN);
        mpfr_init(r8898);
        mpfr_init(r8899);
        mpfr_init(r8900);
        mpfr_init(r8901);
        mpfr_init(r8902);
        mpfr_init(r8903);
        mpfr_init(r8904);
        mpfr_init_set_str(r8905, "2.2616487221266898e+146", 10, MPFR_RNDN);
        mpfr_init(r8906);
        mpfr_init_set_str(r8907, "1", 10, MPFR_RNDN);
        mpfr_init(r8908);
        mpfr_init(r8909);
        mpfr_init(r8910);
        mpfr_init(r8911);
        mpfr_init(r8912);
        mpfr_init(r8913);
        mpfr_init(r8914);
        mpfr_init(r8915);
        mpfr_init(r8916);
        mpfr_init(r8917);
        mpfr_init(r8918);
        mpfr_init(r8919);
        mpfr_init_set_str(r8920, "-1", 10, MPFR_RNDN);
        mpfr_init(r8921);
        mpfr_init(r8922);
        mpfr_init(r8923);
        mpfr_init(r8924);
        mpfr_init(r8925);
        mpfr_init(r8926);
}

double f_dm(double re, double im, double base) {
        mpfr_set_d(r8895, re, MPFR_RNDN);
        mpfr_neg(r8896, r8895, MPFR_RNDN);
        ;
        mpfr_set_si(r8898, mpfr_cmp(r8896, r8897) <= 0, MPFR_RNDN);
        mpfr_log(r8899, r8895, MPFR_RNDN);
        mpfr_neg(r8900, r8899, MPFR_RNDN);
        mpfr_set_d(r8901, base, MPFR_RNDN);
        mpfr_log(r8902, r8901, MPFR_RNDN);
        mpfr_neg(r8903, r8902, MPFR_RNDN);
        mpfr_div(r8904, r8900, r8903, MPFR_RNDN);
        ;
        mpfr_set_si(r8906, mpfr_cmp(r8896, r8905) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r8908, r8902, r8902, MPFR_RNDN);
        mpfr_sqrt(r8909, r8908, MPFR_RNDN);
        mpfr_div(r8910, r8907, r8909, MPFR_RNDN);
        mpfr_mul(r8911, r8895, r8895, MPFR_RNDN);
        mpfr_set_d(r8912, im, MPFR_RNDN);
        mpfr_mul(r8913, r8912, r8912, MPFR_RNDN);
        mpfr_add(r8914, r8911, r8913, MPFR_RNDN);
        mpfr_sqrt(r8915, r8914, MPFR_RNDN);
        mpfr_log(r8916, r8915, MPFR_RNDN);
        mpfr_mul(r8917, r8916, r8902, MPFR_RNDN);
        mpfr_div(r8918, r8917, r8909, MPFR_RNDN);
        mpfr_mul(r8919, r8910, r8918, MPFR_RNDN);
        ;
        mpfr_div(r8921, r8920, r8895, MPFR_RNDN);
        mpfr_log(r8922, r8921, MPFR_RNDN);
        mpfr_div(r8923, r8908, r8903, MPFR_RNDN);
        mpfr_div(r8924, r8922, r8923, MPFR_RNDN);
        if (mpfr_get_si(r8906, MPFR_RNDN)) { mpfr_set(r8925, r8919, MPFR_RNDN); } else { mpfr_set(r8925, r8924, MPFR_RNDN); };
        if (mpfr_get_si(r8898, MPFR_RNDN)) { mpfr_set(r8926, r8904, MPFR_RNDN); } else { mpfr_set(r8926, r8925, MPFR_RNDN); };
        return mpfr_get_d(r8926, MPFR_RNDN);
}

