#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 r10485 = x;
        float r10486 = log(r10485);
        float r10487 = log(r10486);
        float r10488 = r10486 - r10487;
        return r10488;
}

double f_id(double x) {
        double r10489 = x;
        double r10490 = log(r10489);
        double r10491 = log(r10490);
        double r10492 = r10490 - r10491;
        return r10492;
}


double f_of(float x) {
        float r10493 = x;
        float r10494 = log(r10493);
        float r10495 = r10493 / r10494;
        float r10496 = log(r10495);
        return r10496;
}

double f_od(double x) {
        double r10497 = x;
        double r10498 = log(r10497);
        double r10499 = r10497 / r10498;
        double r10500 = log(r10499);
        return r10500;
}

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 r10501, r10502, r10503, r10504;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r10501);
        mpfr_init(r10502);
        mpfr_init(r10503);
        mpfr_init(r10504);
}

double f_im(double x) {
        mpfr_set_d(r10501, x, MPFR_RNDN);
        mpfr_log(r10502, r10501, MPFR_RNDN);
        mpfr_log(r10503, r10502, MPFR_RNDN);
        mpfr_sub(r10504, r10502, r10503, MPFR_RNDN);
        return mpfr_get_d(r10504, MPFR_RNDN);
}

static mpfr_t r10505, r10506, r10507, r10508;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r10505);
        mpfr_init(r10506);
        mpfr_init(r10507);
        mpfr_init(r10508);
}

double f_fm(double x) {
        mpfr_set_d(r10505, x, MPFR_RNDN);
        mpfr_log(r10506, r10505, MPFR_RNDN);
        mpfr_div(r10507, r10505, r10506, MPFR_RNDN);
        mpfr_log(r10508, r10507, MPFR_RNDN);
        return mpfr_get_d(r10508, MPFR_RNDN);
}

static mpfr_t r10509, r10510, r10511, r10512;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r10509);
        mpfr_init(r10510);
        mpfr_init(r10511);
        mpfr_init(r10512);
}

double f_dm(double x) {
        mpfr_set_d(r10509, x, MPFR_RNDN);
        mpfr_log(r10510, r10509, MPFR_RNDN);
        mpfr_div(r10511, r10509, r10510, MPFR_RNDN);
        mpfr_log(r10512, r10511, MPFR_RNDN);
        return mpfr_get_d(r10512, MPFR_RNDN);
}

