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

char *name = "math.log/2 on complex, imaginary part";

double f_if(float re, float im, float base) {
        float r9155 = im;
        float r9156 = re;
        float r9157 = atan2(r9155, r9156);
        float r9158 = base;
        float r9159 = log(r9158);
        float r9160 = r9157 * r9159;
        float r9161 = r9156 * r9156;
        float r9162 = r9155 * r9155;
        float r9163 = r9161 + r9162;
        float r9164 = sqrt(r9163);
        float r9165 = log(r9164);
        float r9166 = 0;
        float r9167 = r9165 * r9166;
        float r9168 = r9160 - r9167;
        float r9169 = r9159 * r9159;
        float r9170 = r9166 * r9166;
        float r9171 = r9169 + r9170;
        float r9172 = r9168 / r9171;
        return r9172;
}

double f_id(double re, double im, double base) {
        double r9173 = im;
        double r9174 = re;
        double r9175 = atan2(r9173, r9174);
        double r9176 = base;
        double r9177 = log(r9176);
        double r9178 = r9175 * r9177;
        double r9179 = r9174 * r9174;
        double r9180 = r9173 * r9173;
        double r9181 = r9179 + r9180;
        double r9182 = sqrt(r9181);
        double r9183 = log(r9182);
        double r9184 = 0;
        double r9185 = r9183 * r9184;
        double r9186 = r9178 - r9185;
        double r9187 = r9177 * r9177;
        double r9188 = r9184 * r9184;
        double r9189 = r9187 + r9188;
        double r9190 = r9186 / r9189;
        return r9190;
}


double f_of(float re, float im, float base) {
        float r9191 = im;
        float r9192 = re;
        float r9193 = atan2(r9191, r9192);
        float r9194 = base;
        float r9195 = log(r9194);
        float r9196 = r9193 / r9195;
        return r9196;
}

double f_od(double re, double im, double base) {
        double r9197 = im;
        double r9198 = re;
        double r9199 = atan2(r9197, r9198);
        double r9200 = base;
        double r9201 = log(r9200);
        double r9202 = r9199 / r9201;
        return r9202;
}

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 r9203, r9204, r9205, r9206, r9207, r9208, r9209, r9210, r9211, r9212, r9213, r9214, r9215, r9216, r9217, r9218, r9219, r9220;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9203);
        mpfr_init(r9204);
        mpfr_init(r9205);
        mpfr_init(r9206);
        mpfr_init(r9207);
        mpfr_init(r9208);
        mpfr_init(r9209);
        mpfr_init(r9210);
        mpfr_init(r9211);
        mpfr_init(r9212);
        mpfr_init(r9213);
        mpfr_init_set_str(r9214, "0", 10, MPFR_RNDN);
        mpfr_init(r9215);
        mpfr_init(r9216);
        mpfr_init(r9217);
        mpfr_init(r9218);
        mpfr_init(r9219);
        mpfr_init(r9220);
}

double f_im(double re, double im, double base) {
        mpfr_set_d(r9203, im, MPFR_RNDN);
        mpfr_set_d(r9204, re, MPFR_RNDN);
        mpfr_atan2(r9205, r9203, r9204, MPFR_RNDN);
        mpfr_set_d(r9206, base, MPFR_RNDN);
        mpfr_log(r9207, r9206, MPFR_RNDN);
        mpfr_mul(r9208, r9205, r9207, MPFR_RNDN);
        mpfr_mul(r9209, r9204, r9204, MPFR_RNDN);
        mpfr_mul(r9210, r9203, r9203, MPFR_RNDN);
        mpfr_add(r9211, r9209, r9210, MPFR_RNDN);
        mpfr_sqrt(r9212, r9211, MPFR_RNDN);
        mpfr_log(r9213, r9212, MPFR_RNDN);
        ;
        mpfr_mul(r9215, r9213, r9214, MPFR_RNDN);
        mpfr_sub(r9216, r9208, r9215, MPFR_RNDN);
        mpfr_mul(r9217, r9207, r9207, MPFR_RNDN);
        mpfr_mul(r9218, r9214, r9214, MPFR_RNDN);
        mpfr_add(r9219, r9217, r9218, MPFR_RNDN);
        mpfr_div(r9220, r9216, r9219, MPFR_RNDN);
        return mpfr_get_d(r9220, MPFR_RNDN);
}

static mpfr_t r9221, r9222, r9223, r9224, r9225, r9226;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9221);
        mpfr_init(r9222);
        mpfr_init(r9223);
        mpfr_init(r9224);
        mpfr_init(r9225);
        mpfr_init(r9226);
}

double f_fm(double re, double im, double base) {
        mpfr_set_d(r9221, im, MPFR_RNDN);
        mpfr_set_d(r9222, re, MPFR_RNDN);
        mpfr_atan2(r9223, r9221, r9222, MPFR_RNDN);
        mpfr_set_d(r9224, base, MPFR_RNDN);
        mpfr_log(r9225, r9224, MPFR_RNDN);
        mpfr_div(r9226, r9223, r9225, MPFR_RNDN);
        return mpfr_get_d(r9226, MPFR_RNDN);
}

static mpfr_t r9227, r9228, r9229, r9230, r9231, r9232;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9227);
        mpfr_init(r9228);
        mpfr_init(r9229);
        mpfr_init(r9230);
        mpfr_init(r9231);
        mpfr_init(r9232);
}

double f_dm(double re, double im, double base) {
        mpfr_set_d(r9227, im, MPFR_RNDN);
        mpfr_set_d(r9228, re, MPFR_RNDN);
        mpfr_atan2(r9229, r9227, r9228, MPFR_RNDN);
        mpfr_set_d(r9230, base, MPFR_RNDN);
        mpfr_log(r9231, r9230, MPFR_RNDN);
        mpfr_div(r9232, r9229, r9231, MPFR_RNDN);
        return mpfr_get_d(r9232, MPFR_RNDN);
}

