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

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

double f_if(float re, float im) {
        float r8925 = re;
        float r8926 = r8925 * r8925;
        float r8927 = im;
        float r8928 = r8927 * r8927;
        float r8929 = r8926 + r8928;
        float r8930 = sqrt(r8929);
        float r8931 = log(r8930);
        return r8931;
}

double f_id(double re, double im) {
        double r8932 = re;
        double r8933 = r8932 * r8932;
        double r8934 = im;
        double r8935 = r8934 * r8934;
        double r8936 = r8933 + r8935;
        double r8937 = sqrt(r8936);
        double r8938 = log(r8937);
        return r8938;
}


double f_of(float re, float im) {
        float r8939 = re;
        float r8940 = im;
        float r8941 = hypot(r8939, r8940);
        float r8942 = log(r8941);
        return r8942;
}

double f_od(double re, double im) {
        double r8943 = re;
        double r8944 = im;
        double r8945 = hypot(r8943, r8944);
        double r8946 = log(r8945);
        return r8946;
}

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 r8947, r8948, r8949, r8950, r8951, r8952, r8953;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r8947);
        mpfr_init(r8948);
        mpfr_init(r8949);
        mpfr_init(r8950);
        mpfr_init(r8951);
        mpfr_init(r8952);
        mpfr_init(r8953);
}

double f_im(double re, double im) {
        mpfr_set_d(r8947, re, MPFR_RNDN);
        mpfr_mul(r8948, r8947, r8947, MPFR_RNDN);
        mpfr_set_d(r8949, im, MPFR_RNDN);
        mpfr_mul(r8950, r8949, r8949, MPFR_RNDN);
        mpfr_add(r8951, r8948, r8950, MPFR_RNDN);
        mpfr_sqrt(r8952, r8951, MPFR_RNDN);
        mpfr_log(r8953, r8952, MPFR_RNDN);
        return mpfr_get_d(r8953, MPFR_RNDN);
}

static mpfr_t r8954, r8955, r8956, r8957;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r8954);
        mpfr_init(r8955);
        mpfr_init(r8956);
        mpfr_init(r8957);
}

double f_fm(double re, double im) {
        mpfr_set_d(r8954, re, MPFR_RNDN);
        mpfr_set_d(r8955, im, MPFR_RNDN);
        mpfr_hypot(r8956, r8954, r8955, MPFR_RNDN);
        mpfr_log(r8957, r8956, MPFR_RNDN);
        return mpfr_get_d(r8957, MPFR_RNDN);
}

static mpfr_t r8958, r8959, r8960, r8961;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r8958);
        mpfr_init(r8959);
        mpfr_init(r8960);
        mpfr_init(r8961);
}

double f_dm(double re, double im) {
        mpfr_set_d(r8958, re, MPFR_RNDN);
        mpfr_set_d(r8959, im, MPFR_RNDN);
        mpfr_hypot(r8960, r8958, r8959, MPFR_RNDN);
        mpfr_log(r8961, r8960, MPFR_RNDN);
        return mpfr_get_d(r8961, MPFR_RNDN);
}

