#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 r8376 = re;
        float r8377 = r8376 * r8376;
        float r8378 = im;
        float r8379 = r8378 * r8378;
        float r8380 = r8377 + r8379;
        float r8381 = sqrt(r8380);
        float r8382 = log(r8381);
        return r8382;
}

double f_id(double re, double im) {
        double r8383 = re;
        double r8384 = r8383 * r8383;
        double r8385 = im;
        double r8386 = r8385 * r8385;
        double r8387 = r8384 + r8386;
        double r8388 = sqrt(r8387);
        double r8389 = log(r8388);
        return r8389;
}


double f_of(float re, float im) {
        float r8390 = re;
        float r8391 = im;
        float r8392 = hypot(r8390, r8391);
        float r8393 = log(r8392);
        return r8393;
}

double f_od(double re, double im) {
        double r8394 = re;
        double r8395 = im;
        double r8396 = hypot(r8394, r8395);
        double r8397 = log(r8396);
        return r8397;
}

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 r8398, r8399, r8400, r8401, r8402, r8403, r8404;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8398);
        mpfr_init(r8399);
        mpfr_init(r8400);
        mpfr_init(r8401);
        mpfr_init(r8402);
        mpfr_init(r8403);
        mpfr_init(r8404);
}

double f_im(double re, double im) {
        mpfr_set_d(r8398, re, MPFR_RNDN);
        mpfr_mul(r8399, r8398, r8398, MPFR_RNDN);
        mpfr_set_d(r8400, im, MPFR_RNDN);
        mpfr_mul(r8401, r8400, r8400, MPFR_RNDN);
        mpfr_add(r8402, r8399, r8401, MPFR_RNDN);
        mpfr_sqrt(r8403, r8402, MPFR_RNDN);
        mpfr_log(r8404, r8403, MPFR_RNDN);
        return mpfr_get_d(r8404, MPFR_RNDN);
}

static mpfr_t r8405, r8406, r8407, r8408;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8405);
        mpfr_init(r8406);
        mpfr_init(r8407);
        mpfr_init(r8408);
}

double f_fm(double re, double im) {
        mpfr_set_d(r8405, re, MPFR_RNDN);
        mpfr_set_d(r8406, im, MPFR_RNDN);
        mpfr_hypot(r8407, r8405, r8406, MPFR_RNDN);
        mpfr_log(r8408, r8407, MPFR_RNDN);
        return mpfr_get_d(r8408, MPFR_RNDN);
}

static mpfr_t r8409, r8410, r8411, r8412;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8409);
        mpfr_init(r8410);
        mpfr_init(r8411);
        mpfr_init(r8412);
}

double f_dm(double re, double im) {
        mpfr_set_d(r8409, re, MPFR_RNDN);
        mpfr_set_d(r8410, im, MPFR_RNDN);
        mpfr_hypot(r8411, r8409, r8410, MPFR_RNDN);
        mpfr_log(r8412, r8411, MPFR_RNDN);
        return mpfr_get_d(r8412, MPFR_RNDN);
}

