#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 r8749 = re;
        float r8750 = r8749 * r8749;
        float r8751 = im;
        float r8752 = r8751 * r8751;
        float r8753 = r8750 + r8752;
        float r8754 = sqrt(r8753);
        float r8755 = log(r8754);
        float r8756 = base;
        float r8757 = log(r8756);
        float r8758 = r8755 * r8757;
        float r8759 = atan2(r8751, r8749);
        float r8760 = 0;
        float r8761 = r8759 * r8760;
        float r8762 = r8758 + r8761;
        float r8763 = r8757 * r8757;
        float r8764 = r8760 * r8760;
        float r8765 = r8763 + r8764;
        float r8766 = r8762 / r8765;
        return r8766;
}

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


double f_of(float re, float im, float base) {
        float r8785 = re;
        float r8786 = im;
        float r8787 = hypot(r8785, r8786);
        float r8788 = log(r8787);
        float r8789 = 1;
        float r8790 = base;
        float r8791 = log(r8790);
        float r8792 = r8789 / r8791;
        float r8793 = r8788 * r8792;
        return r8793;
}

double f_od(double re, double im, double base) {
        double r8794 = re;
        double r8795 = im;
        double r8796 = hypot(r8794, r8795);
        double r8797 = log(r8796);
        double r8798 = 1;
        double r8799 = base;
        double r8800 = log(r8799);
        double r8801 = r8798 / r8800;
        double r8802 = r8797 * r8801;
        return r8802;
}

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 r8803, r8804, r8805, r8806, r8807, r8808, r8809, r8810, r8811, r8812, r8813, r8814, r8815, r8816, r8817, r8818, r8819, r8820;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r8803);
        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);
}

double f_im(double re, double im, double base) {
        mpfr_set_d(r8803, re, MPFR_RNDN);
        mpfr_mul(r8804, r8803, r8803, MPFR_RNDN);
        mpfr_set_d(r8805, im, MPFR_RNDN);
        mpfr_mul(r8806, r8805, r8805, MPFR_RNDN);
        mpfr_add(r8807, r8804, r8806, MPFR_RNDN);
        mpfr_sqrt(r8808, r8807, MPFR_RNDN);
        mpfr_log(r8809, r8808, MPFR_RNDN);
        mpfr_set_d(r8810, base, MPFR_RNDN);
        mpfr_log(r8811, r8810, MPFR_RNDN);
        mpfr_mul(r8812, r8809, r8811, MPFR_RNDN);
        mpfr_atan2(r8813, r8805, r8803, MPFR_RNDN);
        ;
        mpfr_mul(r8815, r8813, r8814, MPFR_RNDN);
        mpfr_add(r8816, r8812, r8815, MPFR_RNDN);
        mpfr_mul(r8817, r8811, r8811, MPFR_RNDN);
        mpfr_mul(r8818, r8814, r8814, MPFR_RNDN);
        mpfr_add(r8819, r8817, r8818, MPFR_RNDN);
        mpfr_div(r8820, r8816, r8819, MPFR_RNDN);
        return mpfr_get_d(r8820, MPFR_RNDN);
}

static mpfr_t r8821, r8822, r8823, r8824, r8825, r8826, r8827, r8828, r8829;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r8821);
        mpfr_init(r8822);
        mpfr_init(r8823);
        mpfr_init(r8824);
        mpfr_init_set_str(r8825, "1", 10, MPFR_RNDN);
        mpfr_init(r8826);
        mpfr_init(r8827);
        mpfr_init(r8828);
        mpfr_init(r8829);
}

double f_fm(double re, double im, double base) {
        mpfr_set_d(r8821, re, MPFR_RNDN);
        mpfr_set_d(r8822, im, MPFR_RNDN);
        mpfr_hypot(r8823, r8821, r8822, MPFR_RNDN);
        mpfr_log(r8824, r8823, MPFR_RNDN);
        ;
        mpfr_set_d(r8826, base, MPFR_RNDN);
        mpfr_log(r8827, r8826, MPFR_RNDN);
        mpfr_div(r8828, r8825, r8827, MPFR_RNDN);
        mpfr_mul(r8829, r8824, r8828, MPFR_RNDN);
        return mpfr_get_d(r8829, MPFR_RNDN);
}

static mpfr_t r8830, r8831, r8832, r8833, r8834, r8835, r8836, r8837, r8838;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r8830);
        mpfr_init(r8831);
        mpfr_init(r8832);
        mpfr_init(r8833);
        mpfr_init_set_str(r8834, "1", 10, MPFR_RNDN);
        mpfr_init(r8835);
        mpfr_init(r8836);
        mpfr_init(r8837);
        mpfr_init(r8838);
}

double f_dm(double re, double im, double base) {
        mpfr_set_d(r8830, re, MPFR_RNDN);
        mpfr_set_d(r8831, im, MPFR_RNDN);
        mpfr_hypot(r8832, r8830, r8831, MPFR_RNDN);
        mpfr_log(r8833, r8832, MPFR_RNDN);
        ;
        mpfr_set_d(r8835, base, MPFR_RNDN);
        mpfr_log(r8836, r8835, MPFR_RNDN);
        mpfr_div(r8837, r8834, r8836, MPFR_RNDN);
        mpfr_mul(r8838, r8833, r8837, MPFR_RNDN);
        return mpfr_get_d(r8838, MPFR_RNDN);
}

