#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 r19199 = wj;
        float r19200 = exp(r19199);
        float r19201 = r19199 * r19200;
        float r19202 = x;
        float r19203 = r19201 - r19202;
        float r19204 = r19200 + r19201;
        float r19205 = r19203 / r19204;
        float r19206 = r19199 - r19205;
        return r19206;
}

double f_id(double wj, double x) {
        double r19207 = wj;
        double r19208 = exp(r19207);
        double r19209 = r19207 * r19208;
        double r19210 = x;
        double r19211 = r19209 - r19210;
        double r19212 = r19208 + r19209;
        double r19213 = r19211 / r19212;
        double r19214 = r19207 - r19213;
        return r19214;
}


double f_of(float wj, float x) {
        float r19215 = wj;
        float r19216 = exp(r19215);
        float r19217 = r19215 * r19216;
        float r19218 = x;
        float r19219 = r19217 - r19218;
        float r19220 = r19216 + r19217;
        float r19221 = r19219 / r19220;
        float r19222 = r19215 - r19221;
        float r19223 = -2.4472481520804102e+30f;
        bool r19224 = r19222 <= r19223;
        float r19225 = r19216 * r19215;
        float r19226 = r19225 - r19218;
        float r19227 = -r19226;
        float r19228 = fma(r19215, r19216, r19216);
        float r19229 = r19227 / r19228;
        float r19230 = r19215 + r19229;
        float r19231 = 1.0792540822943409e-17f;
        bool r19232 = r19222 <= r19231;
        float r19233 = 2.0f;
        float r19234 = r19233 * r19218;
        float r19235 = r19215 - r19234;
        float r19236 = fma(r19235, r19215, r19218);
        float r19237 = 1.0f;
        float r19238 = r19237 + r19215;
        float r19239 = r19215 / r19238;
        float r19240 = r19215 - r19239;
        float r19241 = r19218 / r19220;
        float r19242 = r19240 + r19241;
        float r19243 = r19232 ? r19236 : r19242;
        float r19244 = r19224 ? r19230 : r19243;
        return r19244;
}

double f_od(double wj, double x) {
        double r19245 = wj;
        double r19246 = exp(r19245);
        double r19247 = r19245 * r19246;
        double r19248 = x;
        double r19249 = r19247 - r19248;
        double r19250 = r19246 + r19247;
        double r19251 = r19249 / r19250;
        double r19252 = r19245 - r19251;
        double r19253 = -2.4472481520804102e+30;
        bool r19254 = r19252 <= r19253;
        double r19255 = r19246 * r19245;
        double r19256 = r19255 - r19248;
        double r19257 = -r19256;
        double r19258 = fma(r19245, r19246, r19246);
        double r19259 = r19257 / r19258;
        double r19260 = r19245 + r19259;
        double r19261 = 1.0792540822943409e-17;
        bool r19262 = r19252 <= r19261;
        double r19263 = 2.0;
        double r19264 = r19263 * r19248;
        double r19265 = r19245 - r19264;
        double r19266 = fma(r19265, r19245, r19248);
        double r19267 = 1.0;
        double r19268 = r19267 + r19245;
        double r19269 = r19245 / r19268;
        double r19270 = r19245 - r19269;
        double r19271 = r19248 / r19250;
        double r19272 = r19270 + r19271;
        double r19273 = r19262 ? r19266 : r19272;
        double r19274 = r19254 ? r19260 : r19273;
        return r19274;
}

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 r19275, r19276, r19277, r19278, r19279, r19280, r19281, r19282;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r19275);
        mpfr_init(r19276);
        mpfr_init(r19277);
        mpfr_init(r19278);
        mpfr_init(r19279);
        mpfr_init(r19280);
        mpfr_init(r19281);
        mpfr_init(r19282);
}

double f_im(double wj, double x) {
        mpfr_set_d(r19275, wj, MPFR_RNDN);
        mpfr_exp(r19276, r19275, MPFR_RNDN);
        mpfr_mul(r19277, r19275, r19276, MPFR_RNDN);
        mpfr_set_d(r19278, x, MPFR_RNDN);
        mpfr_sub(r19279, r19277, r19278, MPFR_RNDN);
        mpfr_add(r19280, r19276, r19277, MPFR_RNDN);
        mpfr_div(r19281, r19279, r19280, MPFR_RNDN);
        mpfr_sub(r19282, r19275, r19281, MPFR_RNDN);
        return mpfr_get_d(r19282, MPFR_RNDN);
}

static mpfr_t r19283, r19284, r19285, r19286, r19287, r19288, r19289, r19290, r19291, r19292, r19293, r19294, r19295, r19296, r19297, r19298, r19299, r19300, r19301, r19302, r19303, r19304, r19305, r19306, r19307, r19308, r19309, r19310, r19311, r19312;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r19283);
        mpfr_init(r19284);
        mpfr_init(r19285);
        mpfr_init(r19286);
        mpfr_init(r19287);
        mpfr_init(r19288);
        mpfr_init(r19289);
        mpfr_init(r19290);
        mpfr_init_set_str(r19291, "-2.4472481520804102e+30", 10, MPFR_RNDN);
        mpfr_init(r19292);
        mpfr_init(r19293);
        mpfr_init(r19294);
        mpfr_init(r19295);
        mpfr_init(r19296);
        mpfr_init(r19297);
        mpfr_init(r19298);
        mpfr_init_set_str(r19299, "1.0792540822943409e-17", 10, MPFR_RNDN);
        mpfr_init(r19300);
        mpfr_init_set_str(r19301, "2", 10, MPFR_RNDN);
        mpfr_init(r19302);
        mpfr_init(r19303);
        mpfr_init(r19304);
        mpfr_init_set_str(r19305, "1", 10, MPFR_RNDN);
        mpfr_init(r19306);
        mpfr_init(r19307);
        mpfr_init(r19308);
        mpfr_init(r19309);
        mpfr_init(r19310);
        mpfr_init(r19311);
        mpfr_init(r19312);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r19283, wj, MPFR_RNDN);
        mpfr_exp(r19284, r19283, MPFR_RNDN);
        mpfr_mul(r19285, r19283, r19284, MPFR_RNDN);
        mpfr_set_d(r19286, x, MPFR_RNDN);
        mpfr_sub(r19287, r19285, r19286, MPFR_RNDN);
        mpfr_add(r19288, r19284, r19285, MPFR_RNDN);
        mpfr_div(r19289, r19287, r19288, MPFR_RNDN);
        mpfr_sub(r19290, r19283, r19289, MPFR_RNDN);
        ;
        mpfr_set_si(r19292, mpfr_cmp(r19290, r19291) <= 0, MPFR_RNDN);
        mpfr_mul(r19293, r19284, r19283, MPFR_RNDN);
        mpfr_sub(r19294, r19293, r19286, MPFR_RNDN);
        mpfr_neg(r19295, r19294, MPFR_RNDN);
        mpfr_fma(r19296, r19283, r19284, r19284, MPFR_RNDN);
        mpfr_div(r19297, r19295, r19296, MPFR_RNDN);
        mpfr_add(r19298, r19283, r19297, MPFR_RNDN);
        ;
        mpfr_set_si(r19300, mpfr_cmp(r19290, r19299) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r19302, r19301, r19286, MPFR_RNDN);
        mpfr_sub(r19303, r19283, r19302, MPFR_RNDN);
        mpfr_fma(r19304, r19303, r19283, r19286, MPFR_RNDN);
        ;
        mpfr_add(r19306, r19305, r19283, MPFR_RNDN);
        mpfr_div(r19307, r19283, r19306, MPFR_RNDN);
        mpfr_sub(r19308, r19283, r19307, MPFR_RNDN);
        mpfr_div(r19309, r19286, r19288, MPFR_RNDN);
        mpfr_add(r19310, r19308, r19309, MPFR_RNDN);
        if (mpfr_get_si(r19300, MPFR_RNDN)) { mpfr_set(r19311, r19304, MPFR_RNDN); } else { mpfr_set(r19311, r19310, MPFR_RNDN); };
        if (mpfr_get_si(r19292, MPFR_RNDN)) { mpfr_set(r19312, r19298, MPFR_RNDN); } else { mpfr_set(r19312, r19311, MPFR_RNDN); };
        return mpfr_get_d(r19312, MPFR_RNDN);
}

static mpfr_t r19313, r19314, r19315, r19316, r19317, r19318, r19319, r19320, r19321, r19322, r19323, r19324, r19325, r19326, r19327, r19328, r19329, r19330, r19331, r19332, r19333, r19334, r19335, r19336, r19337, r19338, r19339, r19340, r19341, r19342;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r19313);
        mpfr_init(r19314);
        mpfr_init(r19315);
        mpfr_init(r19316);
        mpfr_init(r19317);
        mpfr_init(r19318);
        mpfr_init(r19319);
        mpfr_init(r19320);
        mpfr_init_set_str(r19321, "-2.4472481520804102e+30", 10, MPFR_RNDN);
        mpfr_init(r19322);
        mpfr_init(r19323);
        mpfr_init(r19324);
        mpfr_init(r19325);
        mpfr_init(r19326);
        mpfr_init(r19327);
        mpfr_init(r19328);
        mpfr_init_set_str(r19329, "1.0792540822943409e-17", 10, MPFR_RNDN);
        mpfr_init(r19330);
        mpfr_init_set_str(r19331, "2", 10, MPFR_RNDN);
        mpfr_init(r19332);
        mpfr_init(r19333);
        mpfr_init(r19334);
        mpfr_init_set_str(r19335, "1", 10, MPFR_RNDN);
        mpfr_init(r19336);
        mpfr_init(r19337);
        mpfr_init(r19338);
        mpfr_init(r19339);
        mpfr_init(r19340);
        mpfr_init(r19341);
        mpfr_init(r19342);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r19313, wj, MPFR_RNDN);
        mpfr_exp(r19314, r19313, MPFR_RNDN);
        mpfr_mul(r19315, r19313, r19314, MPFR_RNDN);
        mpfr_set_d(r19316, x, MPFR_RNDN);
        mpfr_sub(r19317, r19315, r19316, MPFR_RNDN);
        mpfr_add(r19318, r19314, r19315, MPFR_RNDN);
        mpfr_div(r19319, r19317, r19318, MPFR_RNDN);
        mpfr_sub(r19320, r19313, r19319, MPFR_RNDN);
        ;
        mpfr_set_si(r19322, mpfr_cmp(r19320, r19321) <= 0, MPFR_RNDN);
        mpfr_mul(r19323, r19314, r19313, MPFR_RNDN);
        mpfr_sub(r19324, r19323, r19316, MPFR_RNDN);
        mpfr_neg(r19325, r19324, MPFR_RNDN);
        mpfr_fma(r19326, r19313, r19314, r19314, MPFR_RNDN);
        mpfr_div(r19327, r19325, r19326, MPFR_RNDN);
        mpfr_add(r19328, r19313, r19327, MPFR_RNDN);
        ;
        mpfr_set_si(r19330, mpfr_cmp(r19320, r19329) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r19332, r19331, r19316, MPFR_RNDN);
        mpfr_sub(r19333, r19313, r19332, MPFR_RNDN);
        mpfr_fma(r19334, r19333, r19313, r19316, MPFR_RNDN);
        ;
        mpfr_add(r19336, r19335, r19313, MPFR_RNDN);
        mpfr_div(r19337, r19313, r19336, MPFR_RNDN);
        mpfr_sub(r19338, r19313, r19337, MPFR_RNDN);
        mpfr_div(r19339, r19316, r19318, MPFR_RNDN);
        mpfr_add(r19340, r19338, r19339, MPFR_RNDN);
        if (mpfr_get_si(r19330, MPFR_RNDN)) { mpfr_set(r19341, r19334, MPFR_RNDN); } else { mpfr_set(r19341, r19340, MPFR_RNDN); };
        if (mpfr_get_si(r19322, MPFR_RNDN)) { mpfr_set(r19342, r19328, MPFR_RNDN); } else { mpfr_set(r19342, r19341, MPFR_RNDN); };
        return mpfr_get_d(r19342, MPFR_RNDN);
}

