#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 r29807 = x;
        float r29808 = log(r29807);
        float r29809 = log(r29808);
        float r29810 = r29808 - r29809;
        return r29810;
}

double f_id(double x) {
        double r29811 = x;
        double r29812 = log(r29811);
        double r29813 = log(r29812);
        double r29814 = r29812 - r29813;
        return r29814;
}


double f_of(float x) {
        float r29815 = x;
        float r29816 = log(r29815);
        float r29817 = log(r29816);
        float r29818 = r29816 - r29817;
        return r29818;
}

double f_od(double x) {
        double r29819 = x;
        double r29820 = log(r29819);
        double r29821 = log(r29820);
        double r29822 = r29820 - r29821;
        return r29822;
}

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 r29823, r29824, r29825, r29826;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r29823);
        mpfr_init(r29824);
        mpfr_init(r29825);
        mpfr_init(r29826);
}

double f_im(double x) {
        mpfr_set_d(r29823, x, MPFR_RNDN);
        mpfr_log(r29824, r29823, MPFR_RNDN);
        mpfr_log(r29825, r29824, MPFR_RNDN);
        mpfr_sub(r29826, r29824, r29825, MPFR_RNDN);
        return mpfr_get_d(r29826, MPFR_RNDN);
}

static mpfr_t r29827, r29828, r29829, r29830;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r29827);
        mpfr_init(r29828);
        mpfr_init(r29829);
        mpfr_init(r29830);
}

double f_fm(double x) {
        mpfr_set_d(r29827, x, MPFR_RNDN);
        mpfr_log(r29828, r29827, MPFR_RNDN);
        mpfr_log(r29829, r29828, MPFR_RNDN);
        mpfr_sub(r29830, r29828, r29829, MPFR_RNDN);
        return mpfr_get_d(r29830, MPFR_RNDN);
}

static mpfr_t r29831, r29832, r29833, r29834;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r29831);
        mpfr_init(r29832);
        mpfr_init(r29833);
        mpfr_init(r29834);
}

double f_dm(double x) {
        mpfr_set_d(r29831, x, MPFR_RNDN);
        mpfr_log(r29832, r29831, MPFR_RNDN);
        mpfr_log(r29833, r29832, MPFR_RNDN);
        mpfr_sub(r29834, r29832, r29833, MPFR_RNDN);
        return mpfr_get_d(r29834, MPFR_RNDN);
}

