#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 r8208 = re;
        float r8209 = r8208 * r8208;
        float r8210 = im;
        float r8211 = r8210 * r8210;
        float r8212 = r8209 + r8211;
        float r8213 = sqrt(r8212);
        float r8214 = log(r8213);
        float r8215 = base;
        float r8216 = log(r8215);
        float r8217 = r8214 * r8216;
        float r8218 = atan2(r8210, r8208);
        float r8219 = 0.0f;
        float r8220 = r8218 * r8219;
        float r8221 = r8217 + r8220;
        float r8222 = r8216 * r8216;
        float r8223 = r8219 * r8219;
        float r8224 = r8222 + r8223;
        float r8225 = r8221 / r8224;
        return r8225;
}

double f_id(double re, double im, double base) {
        double r8226 = re;
        double r8227 = r8226 * r8226;
        double r8228 = im;
        double r8229 = r8228 * r8228;
        double r8230 = r8227 + r8229;
        double r8231 = sqrt(r8230);
        double r8232 = log(r8231);
        double r8233 = base;
        double r8234 = log(r8233);
        double r8235 = r8232 * r8234;
        double r8236 = atan2(r8228, r8226);
        double r8237 = 0.0;
        double r8238 = r8236 * r8237;
        double r8239 = r8235 + r8238;
        double r8240 = r8234 * r8234;
        double r8241 = r8237 * r8237;
        double r8242 = r8240 + r8241;
        double r8243 = r8239 / r8242;
        return r8243;
}


double f_of(float re, float im, float base) {
        float r8244 = 1.0f;
        float r8245 = base;
        float r8246 = log(r8245);
        float r8247 = re;
        float r8248 = im;
        float r8249 = hypot(r8247, r8248);
        float r8250 = log(r8249);
        float r8251 = r8246 / r8250;
        float r8252 = r8244 / r8251;
        return r8252;
}

double f_od(double re, double im, double base) {
        double r8253 = 1.0;
        double r8254 = base;
        double r8255 = log(r8254);
        double r8256 = re;
        double r8257 = im;
        double r8258 = hypot(r8256, r8257);
        double r8259 = log(r8258);
        double r8260 = r8255 / r8259;
        double r8261 = r8253 / r8260;
        return r8261;
}

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 r8262, r8263, r8264, r8265, r8266, r8267, r8268, r8269, r8270, r8271, r8272, r8273, r8274, r8275, r8276, r8277, r8278, r8279;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r8262);
        mpfr_init(r8263);
        mpfr_init(r8264);
        mpfr_init(r8265);
        mpfr_init(r8266);
        mpfr_init(r8267);
        mpfr_init(r8268);
        mpfr_init(r8269);
        mpfr_init(r8270);
        mpfr_init(r8271);
        mpfr_init(r8272);
        mpfr_init_set_str(r8273, "0", 10, MPFR_RNDN);
        mpfr_init(r8274);
        mpfr_init(r8275);
        mpfr_init(r8276);
        mpfr_init(r8277);
        mpfr_init(r8278);
        mpfr_init(r8279);
}

double f_im(double re, double im, double base) {
        mpfr_set_d(r8262, re, MPFR_RNDN);
        mpfr_mul(r8263, r8262, r8262, MPFR_RNDN);
        mpfr_set_d(r8264, im, MPFR_RNDN);
        mpfr_mul(r8265, r8264, r8264, MPFR_RNDN);
        mpfr_add(r8266, r8263, r8265, MPFR_RNDN);
        mpfr_sqrt(r8267, r8266, MPFR_RNDN);
        mpfr_log(r8268, r8267, MPFR_RNDN);
        mpfr_set_d(r8269, base, MPFR_RNDN);
        mpfr_log(r8270, r8269, MPFR_RNDN);
        mpfr_mul(r8271, r8268, r8270, MPFR_RNDN);
        mpfr_atan2(r8272, r8264, r8262, MPFR_RNDN);
        ;
        mpfr_mul(r8274, r8272, r8273, MPFR_RNDN);
        mpfr_add(r8275, r8271, r8274, MPFR_RNDN);
        mpfr_mul(r8276, r8270, r8270, MPFR_RNDN);
        mpfr_mul(r8277, r8273, r8273, MPFR_RNDN);
        mpfr_add(r8278, r8276, r8277, MPFR_RNDN);
        mpfr_div(r8279, r8275, r8278, MPFR_RNDN);
        return mpfr_get_d(r8279, MPFR_RNDN);
}

static mpfr_t r8280, r8281, r8282, r8283, r8284, r8285, r8286, r8287, r8288;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8280, "1", 10, MPFR_RNDN);
        mpfr_init(r8281);
        mpfr_init(r8282);
        mpfr_init(r8283);
        mpfr_init(r8284);
        mpfr_init(r8285);
        mpfr_init(r8286);
        mpfr_init(r8287);
        mpfr_init(r8288);
}

double f_fm(double re, double im, double base) {
        ;
        mpfr_set_d(r8281, base, MPFR_RNDN);
        mpfr_log(r8282, r8281, MPFR_RNDN);
        mpfr_set_d(r8283, re, MPFR_RNDN);
        mpfr_set_d(r8284, im, MPFR_RNDN);
        mpfr_hypot(r8285, r8283, r8284, MPFR_RNDN);
        mpfr_log(r8286, r8285, MPFR_RNDN);
        mpfr_div(r8287, r8282, r8286, MPFR_RNDN);
        mpfr_div(r8288, r8280, r8287, MPFR_RNDN);
        return mpfr_get_d(r8288, MPFR_RNDN);
}

static mpfr_t r8289, r8290, r8291, r8292, r8293, r8294, r8295, r8296, r8297;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8289, "1", 10, MPFR_RNDN);
        mpfr_init(r8290);
        mpfr_init(r8291);
        mpfr_init(r8292);
        mpfr_init(r8293);
        mpfr_init(r8294);
        mpfr_init(r8295);
        mpfr_init(r8296);
        mpfr_init(r8297);
}

double f_dm(double re, double im, double base) {
        ;
        mpfr_set_d(r8290, base, MPFR_RNDN);
        mpfr_log(r8291, r8290, MPFR_RNDN);
        mpfr_set_d(r8292, re, MPFR_RNDN);
        mpfr_set_d(r8293, im, MPFR_RNDN);
        mpfr_hypot(r8294, r8292, r8293, MPFR_RNDN);
        mpfr_log(r8295, r8294, MPFR_RNDN);
        mpfr_div(r8296, r8291, r8295, MPFR_RNDN);
        mpfr_div(r8297, r8289, r8296, MPFR_RNDN);
        return mpfr_get_d(r8297, MPFR_RNDN);
}

