#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 r17767 = x;
        float r17768 = log(r17767);
        float r17769 = log(r17768);
        float r17770 = r17768 - r17769;
        return r17770;
}

double f_id(double x) {
        double r17771 = x;
        double r17772 = log(r17771);
        double r17773 = log(r17772);
        double r17774 = r17772 - r17773;
        return r17774;
}


double f_of(float x) {
        float r17775 = x;
        float r17776 = log(r17775);
        float r17777 = r17775 / r17776;
        float r17778 = log(r17777);
        return r17778;
}

double f_od(double x) {
        double r17779 = x;
        double r17780 = log(r17779);
        double r17781 = r17779 / r17780;
        double r17782 = log(r17781);
        return r17782;
}

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 r17783, r17784, r17785, r17786;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r17783);
        mpfr_init(r17784);
        mpfr_init(r17785);
        mpfr_init(r17786);
}

double f_im(double x) {
        mpfr_set_d(r17783, x, MPFR_RNDN);
        mpfr_log(r17784, r17783, MPFR_RNDN);
        mpfr_log(r17785, r17784, MPFR_RNDN);
        mpfr_sub(r17786, r17784, r17785, MPFR_RNDN);
        return mpfr_get_d(r17786, MPFR_RNDN);
}

static mpfr_t r17787, r17788, r17789, r17790;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r17787);
        mpfr_init(r17788);
        mpfr_init(r17789);
        mpfr_init(r17790);
}

double f_fm(double x) {
        mpfr_set_d(r17787, x, MPFR_RNDN);
        mpfr_log(r17788, r17787, MPFR_RNDN);
        mpfr_div(r17789, r17787, r17788, MPFR_RNDN);
        mpfr_log(r17790, r17789, MPFR_RNDN);
        return mpfr_get_d(r17790, MPFR_RNDN);
}

static mpfr_t r17791, r17792, r17793, r17794;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r17791);
        mpfr_init(r17792);
        mpfr_init(r17793);
        mpfr_init(r17794);
}

double f_dm(double x) {
        mpfr_set_d(r17791, x, MPFR_RNDN);
        mpfr_log(r17792, r17791, MPFR_RNDN);
        mpfr_div(r17793, r17791, r17792, MPFR_RNDN);
        mpfr_log(r17794, r17793, MPFR_RNDN);
        return mpfr_get_d(r17794, MPFR_RNDN);
}

