#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 r8401 = re;
        float r8402 = r8401 * r8401;
        float r8403 = im;
        float r8404 = r8403 * r8403;
        float r8405 = r8402 + r8404;
        float r8406 = sqrt(r8405);
        float r8407 = log(r8406);
        float r8408 = 10;
        float r8409 = log(r8408);
        float r8410 = r8407 / r8409;
        return r8410;
}

double f_id(double re, double im) {
        double r8411 = re;
        double r8412 = r8411 * r8411;
        double r8413 = im;
        double r8414 = r8413 * r8413;
        double r8415 = r8412 + r8414;
        double r8416 = sqrt(r8415);
        double r8417 = log(r8416);
        double r8418 = 10;
        double r8419 = log(r8418);
        double r8420 = r8417 / r8419;
        return r8420;
}


double f_of(float re, float im) {
        float r8421 = re;
        float r8422 = im;
        float r8423 = hypot(r8421, r8422);
        float r8424 = log(r8423);
        float r8425 = 10;
        float r8426 = log(r8425);
        float r8427 = r8424 / r8426;
        return r8427;
}

double f_od(double re, double im) {
        double r8428 = re;
        double r8429 = im;
        double r8430 = hypot(r8428, r8429);
        double r8431 = log(r8430);
        double r8432 = 10;
        double r8433 = log(r8432);
        double r8434 = r8431 / r8433;
        return r8434;
}

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 r8435, r8436, r8437, r8438, r8439, r8440, r8441, r8442, r8443, r8444;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8435);
        mpfr_init(r8436);
        mpfr_init(r8437);
        mpfr_init(r8438);
        mpfr_init(r8439);
        mpfr_init(r8440);
        mpfr_init(r8441);
        mpfr_init_set_str(r8442, "10", 10, MPFR_RNDN);
        mpfr_init(r8443);
        mpfr_init(r8444);
}

double f_im(double re, double im) {
        mpfr_set_d(r8435, re, MPFR_RNDN);
        mpfr_mul(r8436, r8435, r8435, MPFR_RNDN);
        mpfr_set_d(r8437, im, MPFR_RNDN);
        mpfr_mul(r8438, r8437, r8437, MPFR_RNDN);
        mpfr_add(r8439, r8436, r8438, MPFR_RNDN);
        mpfr_sqrt(r8440, r8439, MPFR_RNDN);
        mpfr_log(r8441, r8440, MPFR_RNDN);
        ;
        mpfr_log(r8443, r8442, MPFR_RNDN);
        mpfr_div(r8444, r8441, r8443, MPFR_RNDN);
        return mpfr_get_d(r8444, MPFR_RNDN);
}

static mpfr_t r8445, r8446, r8447, r8448, r8449, r8450, r8451;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8445);
        mpfr_init(r8446);
        mpfr_init(r8447);
        mpfr_init(r8448);
        mpfr_init_set_str(r8449, "10", 10, MPFR_RNDN);
        mpfr_init(r8450);
        mpfr_init(r8451);
}

double f_fm(double re, double im) {
        mpfr_set_d(r8445, re, MPFR_RNDN);
        mpfr_set_d(r8446, im, MPFR_RNDN);
        mpfr_hypot(r8447, r8445, r8446, MPFR_RNDN);
        mpfr_log(r8448, r8447, MPFR_RNDN);
        ;
        mpfr_log(r8450, r8449, MPFR_RNDN);
        mpfr_div(r8451, r8448, r8450, MPFR_RNDN);
        return mpfr_get_d(r8451, MPFR_RNDN);
}

static mpfr_t r8452, r8453, r8454, r8455, r8456, r8457, r8458;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8452);
        mpfr_init(r8453);
        mpfr_init(r8454);
        mpfr_init(r8455);
        mpfr_init_set_str(r8456, "10", 10, MPFR_RNDN);
        mpfr_init(r8457);
        mpfr_init(r8458);
}

double f_dm(double re, double im) {
        mpfr_set_d(r8452, re, MPFR_RNDN);
        mpfr_set_d(r8453, im, MPFR_RNDN);
        mpfr_hypot(r8454, r8452, r8453, MPFR_RNDN);
        mpfr_log(r8455, r8454, MPFR_RNDN);
        ;
        mpfr_log(r8457, r8456, MPFR_RNDN);
        mpfr_div(r8458, r8455, r8457, MPFR_RNDN);
        return mpfr_get_d(r8458, MPFR_RNDN);
}

