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

char *name = "math.log10 on complex, real part";

double f_if(float re, float im) {
        float r8040 = re;
        float r8041 = r8040 * r8040;
        float r8042 = im;
        float r8043 = r8042 * r8042;
        float r8044 = r8041 + r8043;
        float r8045 = sqrt(r8044);
        float r8046 = log(r8045);
        float r8047 = 10.0f;
        float r8048 = log(r8047);
        float r8049 = r8046 / r8048;
        return r8049;
}

double f_id(double re, double im) {
        double r8050 = re;
        double r8051 = r8050 * r8050;
        double r8052 = im;
        double r8053 = r8052 * r8052;
        double r8054 = r8051 + r8053;
        double r8055 = sqrt(r8054);
        double r8056 = log(r8055);
        double r8057 = 10.0;
        double r8058 = log(r8057);
        double r8059 = r8056 / r8058;
        return r8059;
}


double f_of(float re, float im) {
        float r8060 = re;
        float r8061 = im;
        float r8062 = hypot(r8060, r8061);
        float r8063 = cbrt(r8062);
        float r8064 = log(r8063);
        float r8065 = 10.0f;
        float r8066 = log(r8065);
        float r8067 = r8064 / r8066;
        float r8068 = 1.0f;
        float r8069 = sqrt(r8066);
        float r8070 = r8068 / r8069;
        float r8071 = r8063 * r8063;
        float r8072 = log(r8071);
        float r8073 = r8070 * r8072;
        float r8074 = r8073 * r8070;
        float r8075 = r8067 + r8074;
        return r8075;
}

double f_od(double re, double im) {
        double r8076 = re;
        double r8077 = im;
        double r8078 = hypot(r8076, r8077);
        double r8079 = cbrt(r8078);
        double r8080 = log(r8079);
        double r8081 = 10.0;
        double r8082 = log(r8081);
        double r8083 = r8080 / r8082;
        double r8084 = 1.0;
        double r8085 = sqrt(r8082);
        double r8086 = r8084 / r8085;
        double r8087 = r8079 * r8079;
        double r8088 = log(r8087);
        double r8089 = r8086 * r8088;
        double r8090 = r8089 * r8086;
        double r8091 = r8083 + r8090;
        return r8091;
}

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 r8092, r8093, r8094, r8095, r8096, r8097, r8098, r8099, r8100, r8101;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r8092);
        mpfr_init(r8093);
        mpfr_init(r8094);
        mpfr_init(r8095);
        mpfr_init(r8096);
        mpfr_init(r8097);
        mpfr_init(r8098);
        mpfr_init_set_str(r8099, "10", 10, MPFR_RNDN);
        mpfr_init(r8100);
        mpfr_init(r8101);
}

double f_im(double re, double im) {
        mpfr_set_d(r8092, re, MPFR_RNDN);
        mpfr_mul(r8093, r8092, r8092, MPFR_RNDN);
        mpfr_set_d(r8094, im, MPFR_RNDN);
        mpfr_mul(r8095, r8094, r8094, MPFR_RNDN);
        mpfr_add(r8096, r8093, r8095, MPFR_RNDN);
        mpfr_sqrt(r8097, r8096, MPFR_RNDN);
        mpfr_log(r8098, r8097, MPFR_RNDN);
        ;
        mpfr_log(r8100, r8099, MPFR_RNDN);
        mpfr_div(r8101, r8098, r8100, MPFR_RNDN);
        return mpfr_get_d(r8101, MPFR_RNDN);
}

static mpfr_t r8102, r8103, r8104, r8105, r8106, r8107, r8108, r8109, r8110, r8111, r8112, r8113, r8114, r8115, r8116, r8117;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r8102);
        mpfr_init(r8103);
        mpfr_init(r8104);
        mpfr_init(r8105);
        mpfr_init(r8106);
        mpfr_init_set_str(r8107, "10", 10, MPFR_RNDN);
        mpfr_init(r8108);
        mpfr_init(r8109);
        mpfr_init_set_str(r8110, "1", 10, MPFR_RNDN);
        mpfr_init(r8111);
        mpfr_init(r8112);
        mpfr_init(r8113);
        mpfr_init(r8114);
        mpfr_init(r8115);
        mpfr_init(r8116);
        mpfr_init(r8117);
}

double f_fm(double re, double im) {
        mpfr_set_d(r8102, re, MPFR_RNDN);
        mpfr_set_d(r8103, im, MPFR_RNDN);
        mpfr_hypot(r8104, r8102, r8103, MPFR_RNDN);
        mpfr_cbrt(r8105, r8104, MPFR_RNDN);
        mpfr_log(r8106, r8105, MPFR_RNDN);
        ;
        mpfr_log(r8108, r8107, MPFR_RNDN);
        mpfr_div(r8109, r8106, r8108, MPFR_RNDN);
        ;
        mpfr_sqrt(r8111, r8108, MPFR_RNDN);
        mpfr_div(r8112, r8110, r8111, MPFR_RNDN);
        mpfr_mul(r8113, r8105, r8105, MPFR_RNDN);
        mpfr_log(r8114, r8113, MPFR_RNDN);
        mpfr_mul(r8115, r8112, r8114, MPFR_RNDN);
        mpfr_mul(r8116, r8115, r8112, MPFR_RNDN);
        mpfr_add(r8117, r8109, r8116, MPFR_RNDN);
        return mpfr_get_d(r8117, MPFR_RNDN);
}

static mpfr_t r8118, r8119, r8120, r8121, r8122, r8123, r8124, r8125, r8126, r8127, r8128, r8129, r8130, r8131, r8132, r8133;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r8118);
        mpfr_init(r8119);
        mpfr_init(r8120);
        mpfr_init(r8121);
        mpfr_init(r8122);
        mpfr_init_set_str(r8123, "10", 10, MPFR_RNDN);
        mpfr_init(r8124);
        mpfr_init(r8125);
        mpfr_init_set_str(r8126, "1", 10, MPFR_RNDN);
        mpfr_init(r8127);
        mpfr_init(r8128);
        mpfr_init(r8129);
        mpfr_init(r8130);
        mpfr_init(r8131);
        mpfr_init(r8132);
        mpfr_init(r8133);
}

double f_dm(double re, double im) {
        mpfr_set_d(r8118, re, MPFR_RNDN);
        mpfr_set_d(r8119, im, MPFR_RNDN);
        mpfr_hypot(r8120, r8118, r8119, MPFR_RNDN);
        mpfr_cbrt(r8121, r8120, MPFR_RNDN);
        mpfr_log(r8122, r8121, MPFR_RNDN);
        ;
        mpfr_log(r8124, r8123, MPFR_RNDN);
        mpfr_div(r8125, r8122, r8124, MPFR_RNDN);
        ;
        mpfr_sqrt(r8127, r8124, MPFR_RNDN);
        mpfr_div(r8128, r8126, r8127, MPFR_RNDN);
        mpfr_mul(r8129, r8121, r8121, MPFR_RNDN);
        mpfr_log(r8130, r8129, MPFR_RNDN);
        mpfr_mul(r8131, r8128, r8130, MPFR_RNDN);
        mpfr_mul(r8132, r8131, r8128, MPFR_RNDN);
        mpfr_add(r8133, r8125, r8132, MPFR_RNDN);
        return mpfr_get_d(r8133, MPFR_RNDN);
}

