#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 r27571 = x;
        float r27572 = log(r27571);
        float r27573 = log(r27572);
        float r27574 = r27572 - r27573;
        return r27574;
}

double f_id(double x) {
        double r27575 = x;
        double r27576 = log(r27575);
        double r27577 = log(r27576);
        double r27578 = r27576 - r27577;
        return r27578;
}


double f_of(float x) {
        float r27579 = x;
        float r27580 = log(r27579);
        float r27581 = r27579 / r27580;
        float r27582 = log(r27581);
        return r27582;
}

double f_od(double x) {
        double r27583 = x;
        double r27584 = log(r27583);
        double r27585 = r27583 / r27584;
        double r27586 = log(r27585);
        return r27586;
}

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 r27587, r27588, r27589, r27590;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r27587);
        mpfr_init(r27588);
        mpfr_init(r27589);
        mpfr_init(r27590);
}

double f_im(double x) {
        mpfr_set_d(r27587, x, MPFR_RNDN);
        mpfr_log(r27588, r27587, MPFR_RNDN);
        mpfr_log(r27589, r27588, MPFR_RNDN);
        mpfr_sub(r27590, r27588, r27589, MPFR_RNDN);
        return mpfr_get_d(r27590, MPFR_RNDN);
}

static mpfr_t r27591, r27592, r27593, r27594;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r27591);
        mpfr_init(r27592);
        mpfr_init(r27593);
        mpfr_init(r27594);
}

double f_fm(double x) {
        mpfr_set_d(r27591, x, MPFR_RNDN);
        mpfr_log(r27592, r27591, MPFR_RNDN);
        mpfr_div(r27593, r27591, r27592, MPFR_RNDN);
        mpfr_log(r27594, r27593, MPFR_RNDN);
        return mpfr_get_d(r27594, MPFR_RNDN);
}

static mpfr_t r27595, r27596, r27597, r27598;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r27595);
        mpfr_init(r27596);
        mpfr_init(r27597);
        mpfr_init(r27598);
}

double f_dm(double x) {
        mpfr_set_d(r27595, x, MPFR_RNDN);
        mpfr_log(r27596, r27595, MPFR_RNDN);
        mpfr_div(r27597, r27595, r27596, MPFR_RNDN);
        mpfr_log(r27598, r27597, MPFR_RNDN);
        return mpfr_get_d(r27598, MPFR_RNDN);
}

