#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 r17871 = x;
        float r17872 = log(r17871);
        float r17873 = log(r17872);
        float r17874 = r17872 - r17873;
        return r17874;
}

double f_id(double x) {
        double r17875 = x;
        double r17876 = log(r17875);
        double r17877 = log(r17876);
        double r17878 = r17876 - r17877;
        return r17878;
}


double f_of(float x) {
        float r17879 = x;
        float r17880 = log(r17879);
        float r17881 = r17879 / r17880;
        float r17882 = log(r17881);
        return r17882;
}

double f_od(double x) {
        double r17883 = x;
        double r17884 = log(r17883);
        double r17885 = r17883 / r17884;
        double r17886 = log(r17885);
        return r17886;
}

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 r17887, r17888, r17889, r17890;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r17887);
        mpfr_init(r17888);
        mpfr_init(r17889);
        mpfr_init(r17890);
}

double f_im(double x) {
        mpfr_set_d(r17887, x, MPFR_RNDN);
        mpfr_log(r17888, r17887, MPFR_RNDN);
        mpfr_log(r17889, r17888, MPFR_RNDN);
        mpfr_sub(r17890, r17888, r17889, MPFR_RNDN);
        return mpfr_get_d(r17890, MPFR_RNDN);
}

static mpfr_t r17891, r17892, r17893, r17894;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r17891);
        mpfr_init(r17892);
        mpfr_init(r17893);
        mpfr_init(r17894);
}

double f_fm(double x) {
        mpfr_set_d(r17891, x, MPFR_RNDN);
        mpfr_log(r17892, r17891, MPFR_RNDN);
        mpfr_div(r17893, r17891, r17892, MPFR_RNDN);
        mpfr_log(r17894, r17893, MPFR_RNDN);
        return mpfr_get_d(r17894, MPFR_RNDN);
}

static mpfr_t r17895, r17896, r17897, r17898;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r17895);
        mpfr_init(r17896);
        mpfr_init(r17897);
        mpfr_init(r17898);
}

double f_dm(double x) {
        mpfr_set_d(r17895, x, MPFR_RNDN);
        mpfr_log(r17896, r17895, MPFR_RNDN);
        mpfr_div(r17897, r17895, r17896, MPFR_RNDN);
        mpfr_log(r17898, r17897, MPFR_RNDN);
        return mpfr_get_d(r17898, MPFR_RNDN);
}

