#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 r8251 = im;
        float r8252 = re;
        float r8253 = atan2(r8251, r8252);
        float r8254 = base;
        float r8255 = log(r8254);
        float r8256 = r8253 * r8255;
        float r8257 = r8252 * r8252;
        float r8258 = r8251 * r8251;
        float r8259 = r8257 + r8258;
        float r8260 = sqrt(r8259);
        float r8261 = log(r8260);
        float r8262 = 0.0f;
        float r8263 = r8261 * r8262;
        float r8264 = r8256 - r8263;
        float r8265 = r8255 * r8255;
        float r8266 = r8262 * r8262;
        float r8267 = r8265 + r8266;
        float r8268 = r8264 / r8267;
        return r8268;
}

double f_id(double re, double im, double base) {
        double r8269 = im;
        double r8270 = re;
        double r8271 = atan2(r8269, r8270);
        double r8272 = base;
        double r8273 = log(r8272);
        double r8274 = r8271 * r8273;
        double r8275 = r8270 * r8270;
        double r8276 = r8269 * r8269;
        double r8277 = r8275 + r8276;
        double r8278 = sqrt(r8277);
        double r8279 = log(r8278);
        double r8280 = 0.0;
        double r8281 = r8279 * r8280;
        double r8282 = r8274 - r8281;
        double r8283 = r8273 * r8273;
        double r8284 = r8280 * r8280;
        double r8285 = r8283 + r8284;
        double r8286 = r8282 / r8285;
        return r8286;
}


double f_of(float re, float im, float base) {
        float r8287 = 1.0f;
        float r8288 = base;
        float r8289 = log(r8288);
        float r8290 = im;
        float r8291 = re;
        float r8292 = atan2(r8290, r8291);
        float r8293 = r8289 / r8292;
        float r8294 = r8287 / r8293;
        return r8294;
}

double f_od(double re, double im, double base) {
        double r8295 = 1.0;
        double r8296 = base;
        double r8297 = log(r8296);
        double r8298 = im;
        double r8299 = re;
        double r8300 = atan2(r8298, r8299);
        double r8301 = r8297 / r8300;
        double r8302 = r8295 / r8301;
        return r8302;
}

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 r8303, r8304, r8305, r8306, r8307, r8308, r8309, r8310, r8311, r8312, r8313, r8314, r8315, r8316, r8317, r8318, r8319, r8320;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8303);
        mpfr_init(r8304);
        mpfr_init(r8305);
        mpfr_init(r8306);
        mpfr_init(r8307);
        mpfr_init(r8308);
        mpfr_init(r8309);
        mpfr_init(r8310);
        mpfr_init(r8311);
        mpfr_init(r8312);
        mpfr_init(r8313);
        mpfr_init_set_str(r8314, "0", 10, MPFR_RNDN);
        mpfr_init(r8315);
        mpfr_init(r8316);
        mpfr_init(r8317);
        mpfr_init(r8318);
        mpfr_init(r8319);
        mpfr_init(r8320);
}

double f_im(double re, double im, double base) {
        mpfr_set_d(r8303, im, MPFR_RNDN);
        mpfr_set_d(r8304, re, MPFR_RNDN);
        mpfr_atan2(r8305, r8303, r8304, MPFR_RNDN);
        mpfr_set_d(r8306, base, MPFR_RNDN);
        mpfr_log(r8307, r8306, MPFR_RNDN);
        mpfr_mul(r8308, r8305, r8307, MPFR_RNDN);
        mpfr_mul(r8309, r8304, r8304, MPFR_RNDN);
        mpfr_mul(r8310, r8303, r8303, MPFR_RNDN);
        mpfr_add(r8311, r8309, r8310, MPFR_RNDN);
        mpfr_sqrt(r8312, r8311, MPFR_RNDN);
        mpfr_log(r8313, r8312, MPFR_RNDN);
        ;
        mpfr_mul(r8315, r8313, r8314, MPFR_RNDN);
        mpfr_sub(r8316, r8308, r8315, MPFR_RNDN);
        mpfr_mul(r8317, r8307, r8307, MPFR_RNDN);
        mpfr_mul(r8318, r8314, r8314, MPFR_RNDN);
        mpfr_add(r8319, r8317, r8318, MPFR_RNDN);
        mpfr_div(r8320, r8316, r8319, MPFR_RNDN);
        return mpfr_get_d(r8320, MPFR_RNDN);
}

static mpfr_t r8321, r8322, r8323, r8324, r8325, r8326, r8327, r8328;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8321, "1", 10, MPFR_RNDN);
        mpfr_init(r8322);
        mpfr_init(r8323);
        mpfr_init(r8324);
        mpfr_init(r8325);
        mpfr_init(r8326);
        mpfr_init(r8327);
        mpfr_init(r8328);
}

double f_fm(double re, double im, double base) {
        ;
        mpfr_set_d(r8322, base, MPFR_RNDN);
        mpfr_log(r8323, r8322, MPFR_RNDN);
        mpfr_set_d(r8324, im, MPFR_RNDN);
        mpfr_set_d(r8325, re, MPFR_RNDN);
        mpfr_atan2(r8326, r8324, r8325, MPFR_RNDN);
        mpfr_div(r8327, r8323, r8326, MPFR_RNDN);
        mpfr_div(r8328, r8321, r8327, MPFR_RNDN);
        return mpfr_get_d(r8328, MPFR_RNDN);
}

static mpfr_t r8329, r8330, r8331, r8332, r8333, r8334, r8335, r8336;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8329, "1", 10, MPFR_RNDN);
        mpfr_init(r8330);
        mpfr_init(r8331);
        mpfr_init(r8332);
        mpfr_init(r8333);
        mpfr_init(r8334);
        mpfr_init(r8335);
        mpfr_init(r8336);
}

double f_dm(double re, double im, double base) {
        ;
        mpfr_set_d(r8330, base, MPFR_RNDN);
        mpfr_log(r8331, r8330, MPFR_RNDN);
        mpfr_set_d(r8332, im, MPFR_RNDN);
        mpfr_set_d(r8333, re, MPFR_RNDN);
        mpfr_atan2(r8334, r8332, r8333, MPFR_RNDN);
        mpfr_div(r8335, r8331, r8334, MPFR_RNDN);
        mpfr_div(r8336, r8329, r8335, MPFR_RNDN);
        return mpfr_get_d(r8336, MPFR_RNDN);
}

