#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 r8662 = re;
        float r8663 = r8662 * r8662;
        float r8664 = im;
        float r8665 = r8664 * r8664;
        float r8666 = r8663 + r8665;
        float r8667 = sqrt(r8666);
        float r8668 = log(r8667);
        float r8669 = base;
        float r8670 = log(r8669);
        float r8671 = r8668 * r8670;
        float r8672 = atan2(r8664, r8662);
        float r8673 = 0.0f;
        float r8674 = r8672 * r8673;
        float r8675 = r8671 + r8674;
        float r8676 = r8670 * r8670;
        float r8677 = r8673 * r8673;
        float r8678 = r8676 + r8677;
        float r8679 = r8675 / r8678;
        return r8679;
}

double f_id(double re, double im, double base) {
        double r8680 = re;
        double r8681 = r8680 * r8680;
        double r8682 = im;
        double r8683 = r8682 * r8682;
        double r8684 = r8681 + r8683;
        double r8685 = sqrt(r8684);
        double r8686 = log(r8685);
        double r8687 = base;
        double r8688 = log(r8687);
        double r8689 = r8686 * r8688;
        double r8690 = atan2(r8682, r8680);
        double r8691 = 0.0;
        double r8692 = r8690 * r8691;
        double r8693 = r8689 + r8692;
        double r8694 = r8688 * r8688;
        double r8695 = r8691 * r8691;
        double r8696 = r8694 + r8695;
        double r8697 = r8693 / r8696;
        return r8697;
}


double f_of(float re, float im, float base) {
        float r8698 = -1.0f;
        float r8699 = re;
        float r8700 = r8698 / r8699;
        float r8701 = -8.743263611195967e-98f;
        bool r8702 = r8700 <= r8701;
        float r8703 = base;
        float r8704 = log(r8703);
        float r8705 = r8699 * r8699;
        float r8706 = im;
        float r8707 = r8706 * r8706;
        float r8708 = r8705 + r8707;
        float r8709 = sqrt(r8708);
        float r8710 = log(r8709);
        float r8711 = r8704 * r8710;
        float r8712 = 0.0f;
        float r8713 = atan2(r8706, r8699);
        float r8714 = r8712 * r8713;
        float r8715 = r8711 + r8714;
        float r8716 = r8712 * r8712;
        float r8717 = r8704 * r8704;
        float r8718 = r8717 * r8717;
        float r8719 = r8717 * r8718;
        float r8720 = cbrt(r8719);
        float r8721 = r8716 + r8720;
        float r8722 = r8715 / r8721;
        float r8723 = 6.17756244838362e-309f;
        bool r8724 = r8700 <= r8723;
        float r8725 = log(r8699);
        float r8726 = r8725 * r8704;
        float r8727 = r8714 + r8726;
        float r8728 = r8717 + r8716;
        float r8729 = r8727 / r8728;
        float r8730 = 7.160600680030045e-126f;
        bool r8731 = r8700 <= r8730;
        float r8732 = -r8699;
        float r8733 = log(r8732);
        float r8734 = r8733 * r8704;
        float r8735 = r8734 + r8714;
        float r8736 = r8735 / r8728;
        float r8737 = r8731 ? r8736 : r8722;
        float r8738 = r8724 ? r8729 : r8737;
        float r8739 = r8702 ? r8722 : r8738;
        return r8739;
}

double f_od(double re, double im, double base) {
        double r8740 = -1.0;
        double r8741 = re;
        double r8742 = r8740 / r8741;
        double r8743 = -8.743263611195967e-98;
        bool r8744 = r8742 <= r8743;
        double r8745 = base;
        double r8746 = log(r8745);
        double r8747 = r8741 * r8741;
        double r8748 = im;
        double r8749 = r8748 * r8748;
        double r8750 = r8747 + r8749;
        double r8751 = sqrt(r8750);
        double r8752 = log(r8751);
        double r8753 = r8746 * r8752;
        double r8754 = 0.0;
        double r8755 = atan2(r8748, r8741);
        double r8756 = r8754 * r8755;
        double r8757 = r8753 + r8756;
        double r8758 = r8754 * r8754;
        double r8759 = r8746 * r8746;
        double r8760 = r8759 * r8759;
        double r8761 = r8759 * r8760;
        double r8762 = cbrt(r8761);
        double r8763 = r8758 + r8762;
        double r8764 = r8757 / r8763;
        double r8765 = 6.17756244838362e-309;
        bool r8766 = r8742 <= r8765;
        double r8767 = log(r8741);
        double r8768 = r8767 * r8746;
        double r8769 = r8756 + r8768;
        double r8770 = r8759 + r8758;
        double r8771 = r8769 / r8770;
        double r8772 = 7.160600680030045e-126;
        bool r8773 = r8742 <= r8772;
        double r8774 = -r8741;
        double r8775 = log(r8774);
        double r8776 = r8775 * r8746;
        double r8777 = r8776 + r8756;
        double r8778 = r8777 / r8770;
        double r8779 = r8773 ? r8778 : r8764;
        double r8780 = r8766 ? r8771 : r8779;
        double r8781 = r8744 ? r8764 : r8780;
        return r8781;
}

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 r8782, r8783, r8784, r8785, r8786, r8787, r8788, r8789, r8790, r8791, r8792, r8793, r8794, r8795, r8796, r8797, r8798, r8799;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8782);
        mpfr_init(r8783);
        mpfr_init(r8784);
        mpfr_init(r8785);
        mpfr_init(r8786);
        mpfr_init(r8787);
        mpfr_init(r8788);
        mpfr_init(r8789);
        mpfr_init(r8790);
        mpfr_init(r8791);
        mpfr_init(r8792);
        mpfr_init_set_str(r8793, "0", 10, MPFR_RNDN);
        mpfr_init(r8794);
        mpfr_init(r8795);
        mpfr_init(r8796);
        mpfr_init(r8797);
        mpfr_init(r8798);
        mpfr_init(r8799);
}

double f_im(double re, double im, double base) {
        mpfr_set_d(r8782, re, MPFR_RNDN);
        mpfr_mul(r8783, r8782, r8782, MPFR_RNDN);
        mpfr_set_d(r8784, im, MPFR_RNDN);
        mpfr_mul(r8785, r8784, r8784, MPFR_RNDN);
        mpfr_add(r8786, r8783, r8785, MPFR_RNDN);
        mpfr_sqrt(r8787, r8786, MPFR_RNDN);
        mpfr_log(r8788, r8787, MPFR_RNDN);
        mpfr_set_d(r8789, base, MPFR_RNDN);
        mpfr_log(r8790, r8789, MPFR_RNDN);
        mpfr_mul(r8791, r8788, r8790, MPFR_RNDN);
        mpfr_atan2(r8792, r8784, r8782, MPFR_RNDN);
        ;
        mpfr_mul(r8794, r8792, r8793, MPFR_RNDN);
        mpfr_add(r8795, r8791, r8794, MPFR_RNDN);
        mpfr_mul(r8796, r8790, r8790, MPFR_RNDN);
        mpfr_mul(r8797, r8793, r8793, MPFR_RNDN);
        mpfr_add(r8798, r8796, r8797, MPFR_RNDN);
        mpfr_div(r8799, r8795, r8798, MPFR_RNDN);
        return mpfr_get_d(r8799, MPFR_RNDN);
}

static mpfr_t r8800, r8801, r8802, r8803, r8804, r8805, r8806, r8807, r8808, r8809, r8810, r8811, r8812, r8813, r8814, r8815, r8816, r8817, r8818, r8819, r8820, r8821, r8822, r8823, r8824, r8825, r8826, r8827, r8828, r8829, r8830, r8831, r8832, r8833, r8834, r8835, r8836, r8837, r8838, r8839, r8840, r8841;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8800, "-1", 10, MPFR_RNDN);
        mpfr_init(r8801);
        mpfr_init(r8802);
        mpfr_init_set_str(r8803, "-8.743263611195967e-98", 10, MPFR_RNDN);
        mpfr_init(r8804);
        mpfr_init(r8805);
        mpfr_init(r8806);
        mpfr_init(r8807);
        mpfr_init(r8808);
        mpfr_init(r8809);
        mpfr_init(r8810);
        mpfr_init(r8811);
        mpfr_init(r8812);
        mpfr_init(r8813);
        mpfr_init_set_str(r8814, "0", 10, MPFR_RNDN);
        mpfr_init(r8815);
        mpfr_init(r8816);
        mpfr_init(r8817);
        mpfr_init(r8818);
        mpfr_init(r8819);
        mpfr_init(r8820);
        mpfr_init(r8821);
        mpfr_init(r8822);
        mpfr_init(r8823);
        mpfr_init(r8824);
        mpfr_init_set_str(r8825, "6.17756244838362e-309", 10, MPFR_RNDN);
        mpfr_init(r8826);
        mpfr_init(r8827);
        mpfr_init(r8828);
        mpfr_init(r8829);
        mpfr_init(r8830);
        mpfr_init(r8831);
        mpfr_init_set_str(r8832, "7.160600680030045e-126", 10, MPFR_RNDN);
        mpfr_init(r8833);
        mpfr_init(r8834);
        mpfr_init(r8835);
        mpfr_init(r8836);
        mpfr_init(r8837);
        mpfr_init(r8838);
        mpfr_init(r8839);
        mpfr_init(r8840);
        mpfr_init(r8841);
}

double f_fm(double re, double im, double base) {
        ;
        mpfr_set_d(r8801, re, MPFR_RNDN);
        mpfr_div(r8802, r8800, r8801, MPFR_RNDN);
        ;
        mpfr_set_si(r8804, mpfr_cmp(r8802, r8803) <= 0, MPFR_RNDN);
        mpfr_set_d(r8805, base, MPFR_RNDN);
        mpfr_log(r8806, r8805, MPFR_RNDN);
        mpfr_mul(r8807, r8801, r8801, MPFR_RNDN);
        mpfr_set_d(r8808, im, MPFR_RNDN);
        mpfr_mul(r8809, r8808, r8808, MPFR_RNDN);
        mpfr_add(r8810, r8807, r8809, MPFR_RNDN);
        mpfr_sqrt(r8811, r8810, MPFR_RNDN);
        mpfr_log(r8812, r8811, MPFR_RNDN);
        mpfr_mul(r8813, r8806, r8812, MPFR_RNDN);
        ;
        mpfr_atan2(r8815, r8808, r8801, MPFR_RNDN);
        mpfr_mul(r8816, r8814, r8815, MPFR_RNDN);
        mpfr_add(r8817, r8813, r8816, MPFR_RNDN);
        mpfr_mul(r8818, r8814, r8814, MPFR_RNDN);
        mpfr_mul(r8819, r8806, r8806, MPFR_RNDN);
        mpfr_mul(r8820, r8819, r8819, MPFR_RNDN);
        mpfr_mul(r8821, r8819, r8820, MPFR_RNDN);
        mpfr_cbrt(r8822, r8821, MPFR_RNDN);
        mpfr_add(r8823, r8818, r8822, MPFR_RNDN);
        mpfr_div(r8824, r8817, r8823, MPFR_RNDN);
        ;
        mpfr_set_si(r8826, mpfr_cmp(r8802, r8825) <= 0, MPFR_RNDN);
        mpfr_log(r8827, r8801, MPFR_RNDN);
        mpfr_mul(r8828, r8827, r8806, MPFR_RNDN);
        mpfr_add(r8829, r8816, r8828, MPFR_RNDN);
        mpfr_add(r8830, r8819, r8818, MPFR_RNDN);
        mpfr_div(r8831, r8829, r8830, MPFR_RNDN);
        ;
        mpfr_set_si(r8833, mpfr_cmp(r8802, r8832) <= 0, MPFR_RNDN);
        mpfr_neg(r8834, r8801, MPFR_RNDN);
        mpfr_log(r8835, r8834, MPFR_RNDN);
        mpfr_mul(r8836, r8835, r8806, MPFR_RNDN);
        mpfr_add(r8837, r8836, r8816, MPFR_RNDN);
        mpfr_div(r8838, r8837, r8830, MPFR_RNDN);
        if (mpfr_get_si(r8833, MPFR_RNDN)) { mpfr_set(r8839, r8838, MPFR_RNDN); } else { mpfr_set(r8839, r8824, MPFR_RNDN); };
        if (mpfr_get_si(r8826, MPFR_RNDN)) { mpfr_set(r8840, r8831, MPFR_RNDN); } else { mpfr_set(r8840, r8839, MPFR_RNDN); };
        if (mpfr_get_si(r8804, MPFR_RNDN)) { mpfr_set(r8841, r8824, MPFR_RNDN); } else { mpfr_set(r8841, r8840, MPFR_RNDN); };
        return mpfr_get_d(r8841, MPFR_RNDN);
}

static mpfr_t r8842, r8843, r8844, r8845, r8846, r8847, r8848, r8849, r8850, r8851, r8852, r8853, r8854, r8855, r8856, r8857, r8858, r8859, r8860, r8861, r8862, r8863, r8864, r8865, r8866, r8867, r8868, r8869, r8870, r8871, r8872, r8873, r8874, r8875, r8876, r8877, r8878, r8879, r8880, r8881, r8882, r8883;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8842, "-1", 10, MPFR_RNDN);
        mpfr_init(r8843);
        mpfr_init(r8844);
        mpfr_init_set_str(r8845, "-8.743263611195967e-98", 10, MPFR_RNDN);
        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);
        mpfr_init(r8863);
        mpfr_init(r8864);
        mpfr_init(r8865);
        mpfr_init(r8866);
        mpfr_init_set_str(r8867, "6.17756244838362e-309", 10, MPFR_RNDN);
        mpfr_init(r8868);
        mpfr_init(r8869);
        mpfr_init(r8870);
        mpfr_init(r8871);
        mpfr_init(r8872);
        mpfr_init(r8873);
        mpfr_init_set_str(r8874, "7.160600680030045e-126", 10, MPFR_RNDN);
        mpfr_init(r8875);
        mpfr_init(r8876);
        mpfr_init(r8877);
        mpfr_init(r8878);
        mpfr_init(r8879);
        mpfr_init(r8880);
        mpfr_init(r8881);
        mpfr_init(r8882);
        mpfr_init(r8883);
}

double f_dm(double re, double im, double base) {
        ;
        mpfr_set_d(r8843, re, MPFR_RNDN);
        mpfr_div(r8844, r8842, r8843, MPFR_RNDN);
        ;
        mpfr_set_si(r8846, mpfr_cmp(r8844, r8845) <= 0, MPFR_RNDN);
        mpfr_set_d(r8847, base, MPFR_RNDN);
        mpfr_log(r8848, r8847, MPFR_RNDN);
        mpfr_mul(r8849, r8843, r8843, MPFR_RNDN);
        mpfr_set_d(r8850, im, MPFR_RNDN);
        mpfr_mul(r8851, r8850, r8850, MPFR_RNDN);
        mpfr_add(r8852, r8849, r8851, MPFR_RNDN);
        mpfr_sqrt(r8853, r8852, MPFR_RNDN);
        mpfr_log(r8854, r8853, MPFR_RNDN);
        mpfr_mul(r8855, r8848, r8854, MPFR_RNDN);
        ;
        mpfr_atan2(r8857, r8850, r8843, MPFR_RNDN);
        mpfr_mul(r8858, r8856, r8857, MPFR_RNDN);
        mpfr_add(r8859, r8855, r8858, MPFR_RNDN);
        mpfr_mul(r8860, r8856, r8856, MPFR_RNDN);
        mpfr_mul(r8861, r8848, r8848, MPFR_RNDN);
        mpfr_mul(r8862, r8861, r8861, MPFR_RNDN);
        mpfr_mul(r8863, r8861, r8862, MPFR_RNDN);
        mpfr_cbrt(r8864, r8863, MPFR_RNDN);
        mpfr_add(r8865, r8860, r8864, MPFR_RNDN);
        mpfr_div(r8866, r8859, r8865, MPFR_RNDN);
        ;
        mpfr_set_si(r8868, mpfr_cmp(r8844, r8867) <= 0, MPFR_RNDN);
        mpfr_log(r8869, r8843, MPFR_RNDN);
        mpfr_mul(r8870, r8869, r8848, MPFR_RNDN);
        mpfr_add(r8871, r8858, r8870, MPFR_RNDN);
        mpfr_add(r8872, r8861, r8860, MPFR_RNDN);
        mpfr_div(r8873, r8871, r8872, MPFR_RNDN);
        ;
        mpfr_set_si(r8875, mpfr_cmp(r8844, r8874) <= 0, MPFR_RNDN);
        mpfr_neg(r8876, r8843, MPFR_RNDN);
        mpfr_log(r8877, r8876, MPFR_RNDN);
        mpfr_mul(r8878, r8877, r8848, MPFR_RNDN);
        mpfr_add(r8879, r8878, r8858, MPFR_RNDN);
        mpfr_div(r8880, r8879, r8872, MPFR_RNDN);
        if (mpfr_get_si(r8875, MPFR_RNDN)) { mpfr_set(r8881, r8880, MPFR_RNDN); } else { mpfr_set(r8881, r8866, MPFR_RNDN); };
        if (mpfr_get_si(r8868, MPFR_RNDN)) { mpfr_set(r8882, r8873, MPFR_RNDN); } else { mpfr_set(r8882, r8881, MPFR_RNDN); };
        if (mpfr_get_si(r8846, MPFR_RNDN)) { mpfr_set(r8883, r8866, MPFR_RNDN); } else { mpfr_set(r8883, r8882, MPFR_RNDN); };
        return mpfr_get_d(r8883, MPFR_RNDN);
}

