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

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

double f_if(float re, float im) {
        float r8459 = im;
        float r8460 = re;
        float r8461 = atan2(r8459, r8460);
        float r8462 = 10;
        float r8463 = log(r8462);
        float r8464 = r8461 / r8463;
        return r8464;
}

double f_id(double re, double im) {
        double r8465 = im;
        double r8466 = re;
        double r8467 = atan2(r8465, r8466);
        double r8468 = 10;
        double r8469 = log(r8468);
        double r8470 = r8467 / r8469;
        return r8470;
}


double f_of(float re, float im) {
        float r8471 = im;
        float r8472 = re;
        float r8473 = atan2(r8471, r8472);
        float r8474 = 10;
        float r8475 = log(r8474);
        float r8476 = sqrt(r8475);
        float r8477 = r8473 / r8476;
        float r8478 = cbrt(r8477);
        float r8479 = r8478 / r8476;
        float r8480 = cbrt(r8473);
        float r8481 = r8479 * r8480;
        float r8482 = r8481 * r8480;
        float r8483 = cbrt(r8476);
        float r8484 = r8483 * r8483;
        float r8485 = r8482 / r8484;
        return r8485;
}

double f_od(double re, double im) {
        double r8486 = im;
        double r8487 = re;
        double r8488 = atan2(r8486, r8487);
        double r8489 = 10;
        double r8490 = log(r8489);
        double r8491 = sqrt(r8490);
        double r8492 = r8488 / r8491;
        double r8493 = cbrt(r8492);
        double r8494 = r8493 / r8491;
        double r8495 = cbrt(r8488);
        double r8496 = r8494 * r8495;
        double r8497 = r8496 * r8495;
        double r8498 = cbrt(r8491);
        double r8499 = r8498 * r8498;
        double r8500 = r8497 / r8499;
        return r8500;
}

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 r8501, r8502, r8503, r8504, r8505, r8506;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r8501);
        mpfr_init(r8502);
        mpfr_init(r8503);
        mpfr_init_set_str(r8504, "10", 10, MPFR_RNDN);
        mpfr_init(r8505);
        mpfr_init(r8506);
}

double f_im(double re, double im) {
        mpfr_set_d(r8501, im, MPFR_RNDN);
        mpfr_set_d(r8502, re, MPFR_RNDN);
        mpfr_atan2(r8503, r8501, r8502, MPFR_RNDN);
        ;
        mpfr_log(r8505, r8504, MPFR_RNDN);
        mpfr_div(r8506, r8503, r8505, MPFR_RNDN);
        return mpfr_get_d(r8506, MPFR_RNDN);
}

static mpfr_t r8507, r8508, r8509, r8510, r8511, r8512, r8513, r8514, r8515, r8516, r8517, r8518, r8519, r8520, r8521;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r8507);
        mpfr_init(r8508);
        mpfr_init(r8509);
        mpfr_init_set_str(r8510, "10", 10, MPFR_RNDN);
        mpfr_init(r8511);
        mpfr_init(r8512);
        mpfr_init(r8513);
        mpfr_init(r8514);
        mpfr_init(r8515);
        mpfr_init(r8516);
        mpfr_init(r8517);
        mpfr_init(r8518);
        mpfr_init(r8519);
        mpfr_init(r8520);
        mpfr_init(r8521);
}

double f_fm(double re, double im) {
        mpfr_set_d(r8507, im, MPFR_RNDN);
        mpfr_set_d(r8508, re, MPFR_RNDN);
        mpfr_atan2(r8509, r8507, r8508, MPFR_RNDN);
        ;
        mpfr_log(r8511, r8510, MPFR_RNDN);
        mpfr_sqrt(r8512, r8511, MPFR_RNDN);
        mpfr_div(r8513, r8509, r8512, MPFR_RNDN);
        mpfr_cbrt(r8514, r8513, MPFR_RNDN);
        mpfr_div(r8515, r8514, r8512, MPFR_RNDN);
        mpfr_cbrt(r8516, r8509, MPFR_RNDN);
        mpfr_mul(r8517, r8515, r8516, MPFR_RNDN);
        mpfr_mul(r8518, r8517, r8516, MPFR_RNDN);
        mpfr_cbrt(r8519, r8512, MPFR_RNDN);
        mpfr_mul(r8520, r8519, r8519, MPFR_RNDN);
        mpfr_div(r8521, r8518, r8520, MPFR_RNDN);
        return mpfr_get_d(r8521, MPFR_RNDN);
}

static mpfr_t r8522, r8523, r8524, r8525, r8526, r8527, r8528, r8529, r8530, r8531, r8532, r8533, r8534, r8535, r8536;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r8522);
        mpfr_init(r8523);
        mpfr_init(r8524);
        mpfr_init_set_str(r8525, "10", 10, MPFR_RNDN);
        mpfr_init(r8526);
        mpfr_init(r8527);
        mpfr_init(r8528);
        mpfr_init(r8529);
        mpfr_init(r8530);
        mpfr_init(r8531);
        mpfr_init(r8532);
        mpfr_init(r8533);
        mpfr_init(r8534);
        mpfr_init(r8535);
        mpfr_init(r8536);
}

double f_dm(double re, double im) {
        mpfr_set_d(r8522, im, MPFR_RNDN);
        mpfr_set_d(r8523, re, MPFR_RNDN);
        mpfr_atan2(r8524, r8522, r8523, MPFR_RNDN);
        ;
        mpfr_log(r8526, r8525, MPFR_RNDN);
        mpfr_sqrt(r8527, r8526, MPFR_RNDN);
        mpfr_div(r8528, r8524, r8527, MPFR_RNDN);
        mpfr_cbrt(r8529, r8528, MPFR_RNDN);
        mpfr_div(r8530, r8529, r8527, MPFR_RNDN);
        mpfr_cbrt(r8531, r8524, MPFR_RNDN);
        mpfr_mul(r8532, r8530, r8531, MPFR_RNDN);
        mpfr_mul(r8533, r8532, r8531, MPFR_RNDN);
        mpfr_cbrt(r8534, r8527, MPFR_RNDN);
        mpfr_mul(r8535, r8534, r8534, MPFR_RNDN);
        mpfr_div(r8536, r8533, r8535, MPFR_RNDN);
        return mpfr_get_d(r8536, MPFR_RNDN);
}

