#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 r8537 = re;
        float r8538 = r8537 * r8537;
        float r8539 = im;
        float r8540 = r8539 * r8539;
        float r8541 = r8538 + r8540;
        float r8542 = sqrt(r8541);
        float r8543 = log(r8542);
        float r8544 = base;
        float r8545 = log(r8544);
        float r8546 = r8543 * r8545;
        float r8547 = atan2(r8539, r8537);
        float r8548 = 0;
        float r8549 = r8547 * r8548;
        float r8550 = r8546 + r8549;
        float r8551 = r8545 * r8545;
        float r8552 = r8548 * r8548;
        float r8553 = r8551 + r8552;
        float r8554 = r8550 / r8553;
        return r8554;
}

double f_id(double re, double im, double base) {
        double r8555 = re;
        double r8556 = r8555 * r8555;
        double r8557 = im;
        double r8558 = r8557 * r8557;
        double r8559 = r8556 + r8558;
        double r8560 = sqrt(r8559);
        double r8561 = log(r8560);
        double r8562 = base;
        double r8563 = log(r8562);
        double r8564 = r8561 * r8563;
        double r8565 = atan2(r8557, r8555);
        double r8566 = 0;
        double r8567 = r8565 * r8566;
        double r8568 = r8564 + r8567;
        double r8569 = r8563 * r8563;
        double r8570 = r8566 * r8566;
        double r8571 = r8569 + r8570;
        double r8572 = r8568 / r8571;
        return r8572;
}


double f_of(float re, float im, float base) {
        float r8573 = re;
        float r8574 = im;
        float r8575 = hypot(r8573, r8574);
        float r8576 = log(r8575);
        float r8577 = 1;
        float r8578 = base;
        float r8579 = log(r8578);
        float r8580 = r8577 / r8579;
        float r8581 = r8576 * r8580;
        return r8581;
}

double f_od(double re, double im, double base) {
        double r8582 = re;
        double r8583 = im;
        double r8584 = hypot(r8582, r8583);
        double r8585 = log(r8584);
        double r8586 = 1;
        double r8587 = base;
        double r8588 = log(r8587);
        double r8589 = r8586 / r8588;
        double r8590 = r8585 * r8589;
        return r8590;
}

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 r8591, r8592, r8593, r8594, r8595, r8596, r8597, r8598, r8599, r8600, r8601, r8602, r8603, r8604, r8605, r8606, r8607, r8608;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8591);
        mpfr_init(r8592);
        mpfr_init(r8593);
        mpfr_init(r8594);
        mpfr_init(r8595);
        mpfr_init(r8596);
        mpfr_init(r8597);
        mpfr_init(r8598);
        mpfr_init(r8599);
        mpfr_init(r8600);
        mpfr_init(r8601);
        mpfr_init_set_str(r8602, "0", 10, MPFR_RNDN);
        mpfr_init(r8603);
        mpfr_init(r8604);
        mpfr_init(r8605);
        mpfr_init(r8606);
        mpfr_init(r8607);
        mpfr_init(r8608);
}

double f_im(double re, double im, double base) {
        mpfr_set_d(r8591, re, MPFR_RNDN);
        mpfr_mul(r8592, r8591, r8591, MPFR_RNDN);
        mpfr_set_d(r8593, im, MPFR_RNDN);
        mpfr_mul(r8594, r8593, r8593, MPFR_RNDN);
        mpfr_add(r8595, r8592, r8594, MPFR_RNDN);
        mpfr_sqrt(r8596, r8595, MPFR_RNDN);
        mpfr_log(r8597, r8596, MPFR_RNDN);
        mpfr_set_d(r8598, base, MPFR_RNDN);
        mpfr_log(r8599, r8598, MPFR_RNDN);
        mpfr_mul(r8600, r8597, r8599, MPFR_RNDN);
        mpfr_atan2(r8601, r8593, r8591, MPFR_RNDN);
        ;
        mpfr_mul(r8603, r8601, r8602, MPFR_RNDN);
        mpfr_add(r8604, r8600, r8603, MPFR_RNDN);
        mpfr_mul(r8605, r8599, r8599, MPFR_RNDN);
        mpfr_mul(r8606, r8602, r8602, MPFR_RNDN);
        mpfr_add(r8607, r8605, r8606, MPFR_RNDN);
        mpfr_div(r8608, r8604, r8607, MPFR_RNDN);
        return mpfr_get_d(r8608, MPFR_RNDN);
}

static mpfr_t r8609, r8610, r8611, r8612, r8613, r8614, r8615, r8616, r8617;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8609);
        mpfr_init(r8610);
        mpfr_init(r8611);
        mpfr_init(r8612);
        mpfr_init_set_str(r8613, "1", 10, MPFR_RNDN);
        mpfr_init(r8614);
        mpfr_init(r8615);
        mpfr_init(r8616);
        mpfr_init(r8617);
}

double f_fm(double re, double im, double base) {
        mpfr_set_d(r8609, re, MPFR_RNDN);
        mpfr_set_d(r8610, im, MPFR_RNDN);
        mpfr_hypot(r8611, r8609, r8610, MPFR_RNDN);
        mpfr_log(r8612, r8611, MPFR_RNDN);
        ;
        mpfr_set_d(r8614, base, MPFR_RNDN);
        mpfr_log(r8615, r8614, MPFR_RNDN);
        mpfr_div(r8616, r8613, r8615, MPFR_RNDN);
        mpfr_mul(r8617, r8612, r8616, MPFR_RNDN);
        return mpfr_get_d(r8617, MPFR_RNDN);
}

static mpfr_t r8618, r8619, r8620, r8621, r8622, r8623, r8624, r8625, r8626;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8618);
        mpfr_init(r8619);
        mpfr_init(r8620);
        mpfr_init(r8621);
        mpfr_init_set_str(r8622, "1", 10, MPFR_RNDN);
        mpfr_init(r8623);
        mpfr_init(r8624);
        mpfr_init(r8625);
        mpfr_init(r8626);
}

double f_dm(double re, double im, double base) {
        mpfr_set_d(r8618, re, MPFR_RNDN);
        mpfr_set_d(r8619, im, MPFR_RNDN);
        mpfr_hypot(r8620, r8618, r8619, MPFR_RNDN);
        mpfr_log(r8621, r8620, MPFR_RNDN);
        ;
        mpfr_set_d(r8623, base, MPFR_RNDN);
        mpfr_log(r8624, r8623, MPFR_RNDN);
        mpfr_div(r8625, r8622, r8624, MPFR_RNDN);
        mpfr_mul(r8626, r8621, r8625, MPFR_RNDN);
        return mpfr_get_d(r8626, MPFR_RNDN);
}

