#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 r29867 = x;
        float r29868 = log(r29867);
        float r29869 = log(r29868);
        float r29870 = r29868 - r29869;
        return r29870;
}

double f_id(double x) {
        double r29871 = x;
        double r29872 = log(r29871);
        double r29873 = log(r29872);
        double r29874 = r29872 - r29873;
        return r29874;
}


double f_of(float x) {
        float r29875 = x;
        float r29876 = log(r29875);
        float r29877 = r29875 / r29876;
        float r29878 = log(r29877);
        return r29878;
}

double f_od(double x) {
        double r29879 = x;
        double r29880 = log(r29879);
        double r29881 = r29879 / r29880;
        double r29882 = log(r29881);
        return r29882;
}

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 r29883, r29884, r29885, r29886;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r29883);
        mpfr_init(r29884);
        mpfr_init(r29885);
        mpfr_init(r29886);
}

double f_im(double x) {
        mpfr_set_d(r29883, x, MPFR_RNDN);
        mpfr_log(r29884, r29883, MPFR_RNDN);
        mpfr_log(r29885, r29884, MPFR_RNDN);
        mpfr_sub(r29886, r29884, r29885, MPFR_RNDN);
        return mpfr_get_d(r29886, MPFR_RNDN);
}

static mpfr_t r29887, r29888, r29889, r29890;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r29887);
        mpfr_init(r29888);
        mpfr_init(r29889);
        mpfr_init(r29890);
}

double f_fm(double x) {
        mpfr_set_d(r29887, x, MPFR_RNDN);
        mpfr_log(r29888, r29887, MPFR_RNDN);
        mpfr_div(r29889, r29887, r29888, MPFR_RNDN);
        mpfr_log(r29890, r29889, MPFR_RNDN);
        return mpfr_get_d(r29890, MPFR_RNDN);
}

static mpfr_t r29891, r29892, r29893, r29894;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r29891);
        mpfr_init(r29892);
        mpfr_init(r29893);
        mpfr_init(r29894);
}

double f_dm(double x) {
        mpfr_set_d(r29891, x, MPFR_RNDN);
        mpfr_log(r29892, r29891, MPFR_RNDN);
        mpfr_div(r29893, r29891, r29892, MPFR_RNDN);
        mpfr_log(r29894, r29893, MPFR_RNDN);
        return mpfr_get_d(r29894, MPFR_RNDN);
}

