#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 r28133 = wj;
        float r28134 = exp(r28133);
        float r28135 = r28133 * r28134;
        float r28136 = x;
        float r28137 = r28135 - r28136;
        float r28138 = r28134 + r28135;
        float r28139 = r28137 / r28138;
        float r28140 = r28133 - r28139;
        return r28140;
}

double f_id(double wj, double x) {
        double r28141 = wj;
        double r28142 = exp(r28141);
        double r28143 = r28141 * r28142;
        double r28144 = x;
        double r28145 = r28143 - r28144;
        double r28146 = r28142 + r28143;
        double r28147 = r28145 / r28146;
        double r28148 = r28141 - r28147;
        return r28148;
}


double f_of(float wj, float x) {
        float r28149 = wj;
        float r28150 = -1.2258032662059475e-16;
        bool r28151 = r28149 <= r28150;
        float r28152 = 1;
        float r28153 = exp(r28149);
        float r28154 = fma(r28149, r28153, r28153);
        float r28155 = x;
        float r28156 = -r28155;
        float r28157 = fma(r28153, r28149, r28156);
        float r28158 = r28154 / r28157;
        float r28159 = r28152 / r28158;
        float r28160 = r28149 - r28159;
        float r28161 = 1.179072063820203;
        bool r28162 = r28149 <= r28161;
        float r28163 = fma(r28149, r28149, r28155);
        float r28164 = 2;
        float r28165 = pow(r28149, r28164);
        float r28166 = r28153 * r28165;
        float r28167 = r28155 / r28166;
        float r28168 = r28152 + r28167;
        float r28169 = r28153 * r28149;
        float r28170 = r28155 / r28169;
        float r28171 = r28168 - r28170;
        float r28172 = r28149 - r28171;
        float r28173 = r28162 ? r28163 : r28172;
        float r28174 = r28151 ? r28160 : r28173;
        return r28174;
}

double f_od(double wj, double x) {
        double r28175 = wj;
        double r28176 = -1.2258032662059475e-16;
        bool r28177 = r28175 <= r28176;
        double r28178 = 1;
        double r28179 = exp(r28175);
        double r28180 = fma(r28175, r28179, r28179);
        double r28181 = x;
        double r28182 = -r28181;
        double r28183 = fma(r28179, r28175, r28182);
        double r28184 = r28180 / r28183;
        double r28185 = r28178 / r28184;
        double r28186 = r28175 - r28185;
        double r28187 = 1.179072063820203;
        bool r28188 = r28175 <= r28187;
        double r28189 = fma(r28175, r28175, r28181);
        double r28190 = 2;
        double r28191 = pow(r28175, r28190);
        double r28192 = r28179 * r28191;
        double r28193 = r28181 / r28192;
        double r28194 = r28178 + r28193;
        double r28195 = r28179 * r28175;
        double r28196 = r28181 / r28195;
        double r28197 = r28194 - r28196;
        double r28198 = r28175 - r28197;
        double r28199 = r28188 ? r28189 : r28198;
        double r28200 = r28177 ? r28186 : r28199;
        return r28200;
}

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 r28201, r28202, r28203, r28204, r28205, r28206, r28207, r28208;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r28201);
        mpfr_init(r28202);
        mpfr_init(r28203);
        mpfr_init(r28204);
        mpfr_init(r28205);
        mpfr_init(r28206);
        mpfr_init(r28207);
        mpfr_init(r28208);
}

double f_im(double wj, double x) {
        mpfr_set_d(r28201, wj, MPFR_RNDN);
        mpfr_exp(r28202, r28201, MPFR_RNDN);
        mpfr_mul(r28203, r28201, r28202, MPFR_RNDN);
        mpfr_set_d(r28204, x, MPFR_RNDN);
        mpfr_sub(r28205, r28203, r28204, MPFR_RNDN);
        mpfr_add(r28206, r28202, r28203, MPFR_RNDN);
        mpfr_div(r28207, r28205, r28206, MPFR_RNDN);
        mpfr_sub(r28208, r28201, r28207, MPFR_RNDN);
        return mpfr_get_d(r28208, MPFR_RNDN);
}

static mpfr_t r28209, r28210, r28211, r28212, r28213, r28214, r28215, r28216, r28217, r28218, r28219, r28220, r28221, r28222, r28223, r28224, r28225, r28226, r28227, r28228, r28229, r28230, r28231, r28232, r28233, r28234;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init(r28209);
        mpfr_init_set_str(r28210, "-1.2258032662059475e-16", 10, MPFR_RNDN);
        mpfr_init(r28211);
        mpfr_init_set_str(r28212, "1", 10, MPFR_RNDN);
        mpfr_init(r28213);
        mpfr_init(r28214);
        mpfr_init(r28215);
        mpfr_init(r28216);
        mpfr_init(r28217);
        mpfr_init(r28218);
        mpfr_init(r28219);
        mpfr_init(r28220);
        mpfr_init_set_str(r28221, "1.179072063820203", 10, MPFR_RNDN);
        mpfr_init(r28222);
        mpfr_init(r28223);
        mpfr_init_set_str(r28224, "2", 10, MPFR_RNDN);
        mpfr_init(r28225);
        mpfr_init(r28226);
        mpfr_init(r28227);
        mpfr_init(r28228);
        mpfr_init(r28229);
        mpfr_init(r28230);
        mpfr_init(r28231);
        mpfr_init(r28232);
        mpfr_init(r28233);
        mpfr_init(r28234);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r28209, wj, MPFR_RNDN);
        ;
        mpfr_set_si(r28211, mpfr_cmp(r28209, r28210) <= 0, MPFR_RNDN);
        ;
        mpfr_exp(r28213, r28209, MPFR_RNDN);
        mpfr_fma(r28214, r28209, r28213, r28213, MPFR_RNDN);
        mpfr_set_d(r28215, x, MPFR_RNDN);
        mpfr_neg(r28216, r28215, MPFR_RNDN);
        mpfr_fma(r28217, r28213, r28209, r28216, MPFR_RNDN);
        mpfr_div(r28218, r28214, r28217, MPFR_RNDN);
        mpfr_div(r28219, r28212, r28218, MPFR_RNDN);
        mpfr_sub(r28220, r28209, r28219, MPFR_RNDN);
        ;
        mpfr_set_si(r28222, mpfr_cmp(r28209, r28221) <= 0, MPFR_RNDN);
        mpfr_fma(r28223, r28209, r28209, r28215, MPFR_RNDN);
        ;
        mpfr_pow(r28225, r28209, r28224, MPFR_RNDN);
        mpfr_mul(r28226, r28213, r28225, MPFR_RNDN);
        mpfr_div(r28227, r28215, r28226, MPFR_RNDN);
        mpfr_add(r28228, r28212, r28227, MPFR_RNDN);
        mpfr_mul(r28229, r28213, r28209, MPFR_RNDN);
        mpfr_div(r28230, r28215, r28229, MPFR_RNDN);
        mpfr_sub(r28231, r28228, r28230, MPFR_RNDN);
        mpfr_sub(r28232, r28209, r28231, MPFR_RNDN);
        if (mpfr_get_si(r28222, MPFR_RNDN)) { mpfr_set(r28233, r28223, MPFR_RNDN); } else { mpfr_set(r28233, r28232, MPFR_RNDN); };
        if (mpfr_get_si(r28211, MPFR_RNDN)) { mpfr_set(r28234, r28220, MPFR_RNDN); } else { mpfr_set(r28234, r28233, MPFR_RNDN); };
        return mpfr_get_d(r28234, MPFR_RNDN);
}

static mpfr_t r28235, r28236, r28237, r28238, r28239, r28240, r28241, r28242, r28243, r28244, r28245, r28246, r28247, r28248, r28249, r28250, r28251, r28252, r28253, r28254, r28255, r28256, r28257, r28258, r28259, r28260;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init(r28235);
        mpfr_init_set_str(r28236, "-1.2258032662059475e-16", 10, MPFR_RNDN);
        mpfr_init(r28237);
        mpfr_init_set_str(r28238, "1", 10, MPFR_RNDN);
        mpfr_init(r28239);
        mpfr_init(r28240);
        mpfr_init(r28241);
        mpfr_init(r28242);
        mpfr_init(r28243);
        mpfr_init(r28244);
        mpfr_init(r28245);
        mpfr_init(r28246);
        mpfr_init_set_str(r28247, "1.179072063820203", 10, MPFR_RNDN);
        mpfr_init(r28248);
        mpfr_init(r28249);
        mpfr_init_set_str(r28250, "2", 10, MPFR_RNDN);
        mpfr_init(r28251);
        mpfr_init(r28252);
        mpfr_init(r28253);
        mpfr_init(r28254);
        mpfr_init(r28255);
        mpfr_init(r28256);
        mpfr_init(r28257);
        mpfr_init(r28258);
        mpfr_init(r28259);
        mpfr_init(r28260);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r28235, wj, MPFR_RNDN);
        ;
        mpfr_set_si(r28237, mpfr_cmp(r28235, r28236) <= 0, MPFR_RNDN);
        ;
        mpfr_exp(r28239, r28235, MPFR_RNDN);
        mpfr_fma(r28240, r28235, r28239, r28239, MPFR_RNDN);
        mpfr_set_d(r28241, x, MPFR_RNDN);
        mpfr_neg(r28242, r28241, MPFR_RNDN);
        mpfr_fma(r28243, r28239, r28235, r28242, MPFR_RNDN);
        mpfr_div(r28244, r28240, r28243, MPFR_RNDN);
        mpfr_div(r28245, r28238, r28244, MPFR_RNDN);
        mpfr_sub(r28246, r28235, r28245, MPFR_RNDN);
        ;
        mpfr_set_si(r28248, mpfr_cmp(r28235, r28247) <= 0, MPFR_RNDN);
        mpfr_fma(r28249, r28235, r28235, r28241, MPFR_RNDN);
        ;
        mpfr_pow(r28251, r28235, r28250, MPFR_RNDN);
        mpfr_mul(r28252, r28239, r28251, MPFR_RNDN);
        mpfr_div(r28253, r28241, r28252, MPFR_RNDN);
        mpfr_add(r28254, r28238, r28253, MPFR_RNDN);
        mpfr_mul(r28255, r28239, r28235, MPFR_RNDN);
        mpfr_div(r28256, r28241, r28255, MPFR_RNDN);
        mpfr_sub(r28257, r28254, r28256, MPFR_RNDN);
        mpfr_sub(r28258, r28235, r28257, MPFR_RNDN);
        if (mpfr_get_si(r28248, MPFR_RNDN)) { mpfr_set(r28259, r28249, MPFR_RNDN); } else { mpfr_set(r28259, r28258, MPFR_RNDN); };
        if (mpfr_get_si(r28237, MPFR_RNDN)) { mpfr_set(r28260, r28246, MPFR_RNDN); } else { mpfr_set(r28260, r28259, MPFR_RNDN); };
        return mpfr_get_d(r28260, MPFR_RNDN);
}

