#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 r10942 = x;
        float r10943 = log(r10942);
        float r10944 = log(r10943);
        float r10945 = r10943 - r10944;
        return r10945;
}

double f_id(double x) {
        double r10946 = x;
        double r10947 = log(r10946);
        double r10948 = log(r10947);
        double r10949 = r10947 - r10948;
        return r10949;
}


double f_of(float x) {
        float r10950 = x;
        float r10951 = log(r10950);
        float r10952 = r10950 / r10951;
        float r10953 = log(r10952);
        return r10953;
}

double f_od(double x) {
        double r10954 = x;
        double r10955 = log(r10954);
        double r10956 = r10954 / r10955;
        double r10957 = log(r10956);
        return r10957;
}

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 r10958, r10959, r10960, r10961;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r10958);
        mpfr_init(r10959);
        mpfr_init(r10960);
        mpfr_init(r10961);
}

double f_im(double x) {
        mpfr_set_d(r10958, x, MPFR_RNDN);
        mpfr_log(r10959, r10958, MPFR_RNDN);
        mpfr_log(r10960, r10959, MPFR_RNDN);
        mpfr_sub(r10961, r10959, r10960, MPFR_RNDN);
        return mpfr_get_d(r10961, MPFR_RNDN);
}

static mpfr_t r10962, r10963, r10964, r10965;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r10962);
        mpfr_init(r10963);
        mpfr_init(r10964);
        mpfr_init(r10965);
}

double f_fm(double x) {
        mpfr_set_d(r10962, x, MPFR_RNDN);
        mpfr_log(r10963, r10962, MPFR_RNDN);
        mpfr_div(r10964, r10962, r10963, MPFR_RNDN);
        mpfr_log(r10965, r10964, MPFR_RNDN);
        return mpfr_get_d(r10965, MPFR_RNDN);
}

static mpfr_t r10966, r10967, r10968, r10969;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r10966);
        mpfr_init(r10967);
        mpfr_init(r10968);
        mpfr_init(r10969);
}

double f_dm(double x) {
        mpfr_set_d(r10966, x, MPFR_RNDN);
        mpfr_log(r10967, r10966, MPFR_RNDN);
        mpfr_div(r10968, r10966, r10967, MPFR_RNDN);
        mpfr_log(r10969, r10968, MPFR_RNDN);
        return mpfr_get_d(r10969, MPFR_RNDN);
}

