#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 r19803 = wj;
        float r19804 = exp(r19803);
        float r19805 = r19803 * r19804;
        float r19806 = x;
        float r19807 = r19805 - r19806;
        float r19808 = r19804 + r19805;
        float r19809 = r19807 / r19808;
        float r19810 = r19803 - r19809;
        return r19810;
}

double f_id(double wj, double x) {
        double r19811 = wj;
        double r19812 = exp(r19811);
        double r19813 = r19811 * r19812;
        double r19814 = x;
        double r19815 = r19813 - r19814;
        double r19816 = r19812 + r19813;
        double r19817 = r19815 / r19816;
        double r19818 = r19811 - r19817;
        return r19818;
}


double f_of(float wj, float x) {
        float r19819 = wj;
        float r19820 = 0.4936105012893677f;
        bool r19821 = r19819 <= r19820;
        float r19822 = exp(r19819);
        float r19823 = r19819 * r19822;
        float r19824 = x;
        float r19825 = r19823 - r19824;
        float r19826 = r19822 + r19823;
        float r19827 = r19825 / r19826;
        float r19828 = r19819 - r19827;
        float r19829 = 1.0f;
        float r19830 = r19819 + r19829;
        float r19831 = r19819 / r19830;
        float r19832 = r19829 + r19819;
        float r19833 = r19824 / r19832;
        float r19834 = r19833 / r19822;
        float r19835 = r19831 - r19834;
        float r19836 = r19819 - r19835;
        float r19837 = r19821 ? r19828 : r19836;
        return r19837;
}

double f_od(double wj, double x) {
        double r19838 = wj;
        double r19839 = 0.4936105012893677;
        bool r19840 = r19838 <= r19839;
        double r19841 = exp(r19838);
        double r19842 = r19838 * r19841;
        double r19843 = x;
        double r19844 = r19842 - r19843;
        double r19845 = r19841 + r19842;
        double r19846 = r19844 / r19845;
        double r19847 = r19838 - r19846;
        double r19848 = 1.0;
        double r19849 = r19838 + r19848;
        double r19850 = r19838 / r19849;
        double r19851 = r19848 + r19838;
        double r19852 = r19843 / r19851;
        double r19853 = r19852 / r19841;
        double r19854 = r19850 - r19853;
        double r19855 = r19838 - r19854;
        double r19856 = r19840 ? r19847 : r19855;
        return r19856;
}

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 r19857, r19858, r19859, r19860, r19861, r19862, r19863, r19864;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r19857);
        mpfr_init(r19858);
        mpfr_init(r19859);
        mpfr_init(r19860);
        mpfr_init(r19861);
        mpfr_init(r19862);
        mpfr_init(r19863);
        mpfr_init(r19864);
}

double f_im(double wj, double x) {
        mpfr_set_d(r19857, wj, MPFR_RNDN);
        mpfr_exp(r19858, r19857, MPFR_RNDN);
        mpfr_mul(r19859, r19857, r19858, MPFR_RNDN);
        mpfr_set_d(r19860, x, MPFR_RNDN);
        mpfr_sub(r19861, r19859, r19860, MPFR_RNDN);
        mpfr_add(r19862, r19858, r19859, MPFR_RNDN);
        mpfr_div(r19863, r19861, r19862, MPFR_RNDN);
        mpfr_sub(r19864, r19857, r19863, MPFR_RNDN);
        return mpfr_get_d(r19864, MPFR_RNDN);
}

static mpfr_t r19865, r19866, r19867, r19868, r19869, r19870, r19871, r19872, r19873, r19874, r19875, r19876, r19877, r19878, r19879, r19880, r19881, r19882, r19883;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r19865);
        mpfr_init_set_str(r19866, "0.4936105f0", 10, MPFR_RNDN);
        mpfr_init(r19867);
        mpfr_init(r19868);
        mpfr_init(r19869);
        mpfr_init(r19870);
        mpfr_init(r19871);
        mpfr_init(r19872);
        mpfr_init(r19873);
        mpfr_init(r19874);
        mpfr_init_set_str(r19875, "1", 10, MPFR_RNDN);
        mpfr_init(r19876);
        mpfr_init(r19877);
        mpfr_init(r19878);
        mpfr_init(r19879);
        mpfr_init(r19880);
        mpfr_init(r19881);
        mpfr_init(r19882);
        mpfr_init(r19883);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r19865, wj, MPFR_RNDN);
        ;
        mpfr_set_si(r19867, mpfr_cmp(r19865, r19866) <= 0, MPFR_RNDN);
        mpfr_exp(r19868, r19865, MPFR_RNDN);
        mpfr_mul(r19869, r19865, r19868, MPFR_RNDN);
        mpfr_set_d(r19870, x, MPFR_RNDN);
        mpfr_sub(r19871, r19869, r19870, MPFR_RNDN);
        mpfr_add(r19872, r19868, r19869, MPFR_RNDN);
        mpfr_div(r19873, r19871, r19872, MPFR_RNDN);
        mpfr_sub(r19874, r19865, r19873, MPFR_RNDN);
        ;
        mpfr_add(r19876, r19865, r19875, MPFR_RNDN);
        mpfr_div(r19877, r19865, r19876, MPFR_RNDN);
        mpfr_add(r19878, r19875, r19865, MPFR_RNDN);
        mpfr_div(r19879, r19870, r19878, MPFR_RNDN);
        mpfr_div(r19880, r19879, r19868, MPFR_RNDN);
        mpfr_sub(r19881, r19877, r19880, MPFR_RNDN);
        mpfr_sub(r19882, r19865, r19881, MPFR_RNDN);
        if (mpfr_get_si(r19867, MPFR_RNDN)) { mpfr_set(r19883, r19874, MPFR_RNDN); } else { mpfr_set(r19883, r19882, MPFR_RNDN); };
        return mpfr_get_d(r19883, MPFR_RNDN);
}

static mpfr_t r19884, r19885, r19886, r19887, r19888, r19889, r19890, r19891, r19892, r19893, r19894, r19895, r19896, r19897, r19898, r19899, r19900, r19901, r19902;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r19884);
        mpfr_init_set_str(r19885, "0.4936105f0", 10, MPFR_RNDN);
        mpfr_init(r19886);
        mpfr_init(r19887);
        mpfr_init(r19888);
        mpfr_init(r19889);
        mpfr_init(r19890);
        mpfr_init(r19891);
        mpfr_init(r19892);
        mpfr_init(r19893);
        mpfr_init_set_str(r19894, "1", 10, MPFR_RNDN);
        mpfr_init(r19895);
        mpfr_init(r19896);
        mpfr_init(r19897);
        mpfr_init(r19898);
        mpfr_init(r19899);
        mpfr_init(r19900);
        mpfr_init(r19901);
        mpfr_init(r19902);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r19884, wj, MPFR_RNDN);
        ;
        mpfr_set_si(r19886, mpfr_cmp(r19884, r19885) <= 0, MPFR_RNDN);
        mpfr_exp(r19887, r19884, MPFR_RNDN);
        mpfr_mul(r19888, r19884, r19887, MPFR_RNDN);
        mpfr_set_d(r19889, x, MPFR_RNDN);
        mpfr_sub(r19890, r19888, r19889, MPFR_RNDN);
        mpfr_add(r19891, r19887, r19888, MPFR_RNDN);
        mpfr_div(r19892, r19890, r19891, MPFR_RNDN);
        mpfr_sub(r19893, r19884, r19892, MPFR_RNDN);
        ;
        mpfr_add(r19895, r19884, r19894, MPFR_RNDN);
        mpfr_div(r19896, r19884, r19895, MPFR_RNDN);
        mpfr_add(r19897, r19894, r19884, MPFR_RNDN);
        mpfr_div(r19898, r19889, r19897, MPFR_RNDN);
        mpfr_div(r19899, r19898, r19887, MPFR_RNDN);
        mpfr_sub(r19900, r19896, r19899, MPFR_RNDN);
        mpfr_sub(r19901, r19884, r19900, MPFR_RNDN);
        if (mpfr_get_si(r19886, MPFR_RNDN)) { mpfr_set(r19902, r19893, MPFR_RNDN); } else { mpfr_set(r19902, r19901, MPFR_RNDN); };
        return mpfr_get_d(r19902, MPFR_RNDN);
}

