#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Jmat.Real.lambertw, newton loop step";

double f_if(float wj, float x) {
        float r18958 = wj;
        float r18959 = exp(r18958);
        float r18960 = r18958 * r18959;
        float r18961 = x;
        float r18962 = r18960 - r18961;
        float r18963 = r18959 + r18960;
        float r18964 = r18962 / r18963;
        float r18965 = r18958 - r18964;
        return r18965;
}

double f_id(double wj, double x) {
        double r18966 = wj;
        double r18967 = exp(r18966);
        double r18968 = r18966 * r18967;
        double r18969 = x;
        double r18970 = r18968 - r18969;
        double r18971 = r18967 + r18968;
        double r18972 = r18970 / r18971;
        double r18973 = r18966 - r18972;
        return r18973;
}


double f_of(float wj, float x) {
        float r18974 = wj;
        float r18975 = 0.307891845703125f;
        bool r18976 = r18974 <= r18975;
        float r18977 = exp(r18974);
        float r18978 = r18974 * r18977;
        float r18979 = x;
        float r18980 = r18978 - r18979;
        float r18981 = r18977 + r18978;
        float r18982 = r18980 / r18981;
        float r18983 = r18974 - r18982;
        float r18984 = 1.0f;
        float r18985 = r18984 + r18974;
        float r18986 = r18974 / r18985;
        float r18987 = r18974 - r18986;
        float r18988 = r18979 / r18981;
        float r18989 = r18987 + r18988;
        float r18990 = r18976 ? r18983 : r18989;
        return r18990;
}

double f_od(double wj, double x) {
        double r18991 = wj;
        double r18992 = 0.307891845703125;
        bool r18993 = r18991 <= r18992;
        double r18994 = exp(r18991);
        double r18995 = r18991 * r18994;
        double r18996 = x;
        double r18997 = r18995 - r18996;
        double r18998 = r18994 + r18995;
        double r18999 = r18997 / r18998;
        double r19000 = r18991 - r18999;
        double r19001 = 1.0;
        double r19002 = r19001 + r18991;
        double r19003 = r18991 / r19002;
        double r19004 = r18991 - r19003;
        double r19005 = r18996 / r18998;
        double r19006 = r19004 + r19005;
        double r19007 = r18993 ? r19000 : r19006;
        return r19007;
}

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 r19008, r19009, r19010, r19011, r19012, r19013, r19014, r19015;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r19008);
        mpfr_init(r19009);
        mpfr_init(r19010);
        mpfr_init(r19011);
        mpfr_init(r19012);
        mpfr_init(r19013);
        mpfr_init(r19014);
        mpfr_init(r19015);
}

double f_im(double wj, double x) {
        mpfr_set_d(r19008, wj, MPFR_RNDN);
        mpfr_exp(r19009, r19008, MPFR_RNDN);
        mpfr_mul(r19010, r19008, r19009, MPFR_RNDN);
        mpfr_set_d(r19011, x, MPFR_RNDN);
        mpfr_sub(r19012, r19010, r19011, MPFR_RNDN);
        mpfr_add(r19013, r19009, r19010, MPFR_RNDN);
        mpfr_div(r19014, r19012, r19013, MPFR_RNDN);
        mpfr_sub(r19015, r19008, r19014, MPFR_RNDN);
        return mpfr_get_d(r19015, MPFR_RNDN);
}

static mpfr_t r19016, r19017, r19018, r19019, r19020, r19021, r19022, r19023, r19024, r19025, r19026, r19027, r19028, r19029, r19030, r19031, r19032;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r19016);
        mpfr_init_set_str(r19017, "0.30789185f0", 10, MPFR_RNDN);
        mpfr_init(r19018);
        mpfr_init(r19019);
        mpfr_init(r19020);
        mpfr_init(r19021);
        mpfr_init(r19022);
        mpfr_init(r19023);
        mpfr_init(r19024);
        mpfr_init(r19025);
        mpfr_init_set_str(r19026, "1", 10, MPFR_RNDN);
        mpfr_init(r19027);
        mpfr_init(r19028);
        mpfr_init(r19029);
        mpfr_init(r19030);
        mpfr_init(r19031);
        mpfr_init(r19032);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r19016, wj, MPFR_RNDN);
        ;
        mpfr_set_si(r19018, mpfr_cmp(r19016, r19017) <= 0, MPFR_RNDN);
        mpfr_exp(r19019, r19016, MPFR_RNDN);
        mpfr_mul(r19020, r19016, r19019, MPFR_RNDN);
        mpfr_set_d(r19021, x, MPFR_RNDN);
        mpfr_sub(r19022, r19020, r19021, MPFR_RNDN);
        mpfr_add(r19023, r19019, r19020, MPFR_RNDN);
        mpfr_div(r19024, r19022, r19023, MPFR_RNDN);
        mpfr_sub(r19025, r19016, r19024, MPFR_RNDN);
        ;
        mpfr_add(r19027, r19026, r19016, MPFR_RNDN);
        mpfr_div(r19028, r19016, r19027, MPFR_RNDN);
        mpfr_sub(r19029, r19016, r19028, MPFR_RNDN);
        mpfr_div(r19030, r19021, r19023, MPFR_RNDN);
        mpfr_add(r19031, r19029, r19030, MPFR_RNDN);
        if (mpfr_get_si(r19018, MPFR_RNDN)) { mpfr_set(r19032, r19025, MPFR_RNDN); } else { mpfr_set(r19032, r19031, MPFR_RNDN); };
        return mpfr_get_d(r19032, MPFR_RNDN);
}

static mpfr_t r19033, r19034, r19035, r19036, r19037, r19038, r19039, r19040, r19041, r19042, r19043, r19044, r19045, r19046, r19047, r19048, r19049;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r19033);
        mpfr_init_set_str(r19034, "0.30789185f0", 10, MPFR_RNDN);
        mpfr_init(r19035);
        mpfr_init(r19036);
        mpfr_init(r19037);
        mpfr_init(r19038);
        mpfr_init(r19039);
        mpfr_init(r19040);
        mpfr_init(r19041);
        mpfr_init(r19042);
        mpfr_init_set_str(r19043, "1", 10, MPFR_RNDN);
        mpfr_init(r19044);
        mpfr_init(r19045);
        mpfr_init(r19046);
        mpfr_init(r19047);
        mpfr_init(r19048);
        mpfr_init(r19049);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r19033, wj, MPFR_RNDN);
        ;
        mpfr_set_si(r19035, mpfr_cmp(r19033, r19034) <= 0, MPFR_RNDN);
        mpfr_exp(r19036, r19033, MPFR_RNDN);
        mpfr_mul(r19037, r19033, r19036, MPFR_RNDN);
        mpfr_set_d(r19038, x, MPFR_RNDN);
        mpfr_sub(r19039, r19037, r19038, MPFR_RNDN);
        mpfr_add(r19040, r19036, r19037, MPFR_RNDN);
        mpfr_div(r19041, r19039, r19040, MPFR_RNDN);
        mpfr_sub(r19042, r19033, r19041, MPFR_RNDN);
        ;
        mpfr_add(r19044, r19043, r19033, MPFR_RNDN);
        mpfr_div(r19045, r19033, r19044, MPFR_RNDN);
        mpfr_sub(r19046, r19033, r19045, MPFR_RNDN);
        mpfr_div(r19047, r19038, r19040, MPFR_RNDN);
        mpfr_add(r19048, r19046, r19047, MPFR_RNDN);
        if (mpfr_get_si(r19035, MPFR_RNDN)) { mpfr_set(r19049, r19042, MPFR_RNDN); } else { mpfr_set(r19049, r19048, MPFR_RNDN); };
        return mpfr_get_d(r19049, MPFR_RNDN);
}

