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

char *name = "Jmat.Real.lambertw, estimator";

double f_if(float x) {
        float r10432 = x;
        float r10433 = log(r10432);
        float r10434 = log(r10433);
        float r10435 = r10433 - r10434;
        return r10435;
}

double f_id(double x) {
        double r10436 = x;
        double r10437 = log(r10436);
        double r10438 = log(r10437);
        double r10439 = r10437 - r10438;
        return r10439;
}


double f_of(float x) {
        float r10440 = x;
        float r10441 = log(r10440);
        float r10442 = r10440 / r10441;
        float r10443 = log(r10442);
        return r10443;
}

double f_od(double x) {
        double r10444 = x;
        double r10445 = log(r10444);
        double r10446 = r10444 / r10445;
        double r10447 = log(r10446);
        return r10447;
}

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 r10448, r10449, r10450, r10451;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r10448);
        mpfr_init(r10449);
        mpfr_init(r10450);
        mpfr_init(r10451);
}

double f_im(double x) {
        mpfr_set_d(r10448, x, MPFR_RNDN);
        mpfr_log(r10449, r10448, MPFR_RNDN);
        mpfr_log(r10450, r10449, MPFR_RNDN);
        mpfr_sub(r10451, r10449, r10450, MPFR_RNDN);
        return mpfr_get_d(r10451, MPFR_RNDN);
}

static mpfr_t r10452, r10453, r10454, r10455;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10452);
        mpfr_init(r10453);
        mpfr_init(r10454);
        mpfr_init(r10455);
}

double f_fm(double x) {
        mpfr_set_d(r10452, x, MPFR_RNDN);
        mpfr_log(r10453, r10452, MPFR_RNDN);
        mpfr_div(r10454, r10452, r10453, MPFR_RNDN);
        mpfr_log(r10455, r10454, MPFR_RNDN);
        return mpfr_get_d(r10455, MPFR_RNDN);
}

static mpfr_t r10456, r10457, r10458, r10459;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10456);
        mpfr_init(r10457);
        mpfr_init(r10458);
        mpfr_init(r10459);
}

double f_dm(double x) {
        mpfr_set_d(r10456, x, MPFR_RNDN);
        mpfr_log(r10457, r10456, MPFR_RNDN);
        mpfr_div(r10458, r10456, r10457, MPFR_RNDN);
        mpfr_log(r10459, r10458, MPFR_RNDN);
        return mpfr_get_d(r10459, MPFR_RNDN);
}

