#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 r28195 = wj;
        float r28196 = exp(r28195);
        float r28197 = r28195 * r28196;
        float r28198 = x;
        float r28199 = r28197 - r28198;
        float r28200 = r28196 + r28197;
        float r28201 = r28199 / r28200;
        float r28202 = r28195 - r28201;
        return r28202;
}

double f_id(double wj, double x) {
        double r28203 = wj;
        double r28204 = exp(r28203);
        double r28205 = r28203 * r28204;
        double r28206 = x;
        double r28207 = r28205 - r28206;
        double r28208 = r28204 + r28205;
        double r28209 = r28207 / r28208;
        double r28210 = r28203 - r28209;
        return r28210;
}


double f_of(float wj, float x) {
        float r28211 = wj;
        float r28212 = exp(r28211);
        float r28213 = r28211 * r28212;
        float r28214 = x;
        float r28215 = r28213 - r28214;
        float r28216 = r28212 + r28213;
        float r28217 = r28215 / r28216;
        float r28218 = r28211 - r28217;
        float r28219 = 4.5497853715898254e-12;
        bool r28220 = r28218 <= r28219;
        float r28221 = fma(r28211, r28212, r28212);
        float r28222 = r28214 / r28221;
        float r28223 = r28211 * r28211;
        float r28224 = 1;
        float r28225 = r28224 - r28211;
        float r28226 = r28223 * r28225;
        float r28227 = 4;
        float r28228 = pow(r28211, r28227);
        float r28229 = r28226 + r28228;
        float r28230 = r28222 + r28229;
        float r28231 = r28224 + r28211;
        float r28232 = r28211 / r28231;
        float r28233 = r28211 - r28232;
        float r28234 = r28214 / r28216;
        float r28235 = r28233 + r28234;
        float r28236 = r28220 ? r28230 : r28235;
        return r28236;
}

double f_od(double wj, double x) {
        double r28237 = wj;
        double r28238 = exp(r28237);
        double r28239 = r28237 * r28238;
        double r28240 = x;
        double r28241 = r28239 - r28240;
        double r28242 = r28238 + r28239;
        double r28243 = r28241 / r28242;
        double r28244 = r28237 - r28243;
        double r28245 = 4.5497853715898254e-12;
        bool r28246 = r28244 <= r28245;
        double r28247 = fma(r28237, r28238, r28238);
        double r28248 = r28240 / r28247;
        double r28249 = r28237 * r28237;
        double r28250 = 1;
        double r28251 = r28250 - r28237;
        double r28252 = r28249 * r28251;
        double r28253 = 4;
        double r28254 = pow(r28237, r28253);
        double r28255 = r28252 + r28254;
        double r28256 = r28248 + r28255;
        double r28257 = r28250 + r28237;
        double r28258 = r28237 / r28257;
        double r28259 = r28237 - r28258;
        double r28260 = r28240 / r28242;
        double r28261 = r28259 + r28260;
        double r28262 = r28246 ? r28256 : r28261;
        return r28262;
}

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 r28263, r28264, r28265, r28266, r28267, r28268, r28269, r28270;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r28263);
        mpfr_init(r28264);
        mpfr_init(r28265);
        mpfr_init(r28266);
        mpfr_init(r28267);
        mpfr_init(r28268);
        mpfr_init(r28269);
        mpfr_init(r28270);
}

double f_im(double wj, double x) {
        mpfr_set_d(r28263, wj, MPFR_RNDN);
        mpfr_exp(r28264, r28263, MPFR_RNDN);
        mpfr_mul(r28265, r28263, r28264, MPFR_RNDN);
        mpfr_set_d(r28266, x, MPFR_RNDN);
        mpfr_sub(r28267, r28265, r28266, MPFR_RNDN);
        mpfr_add(r28268, r28264, r28265, MPFR_RNDN);
        mpfr_div(r28269, r28267, r28268, MPFR_RNDN);
        mpfr_sub(r28270, r28263, r28269, MPFR_RNDN);
        return mpfr_get_d(r28270, MPFR_RNDN);
}

static mpfr_t r28271, r28272, r28273, r28274, r28275, r28276, r28277, r28278, r28279, r28280, r28281, r28282, r28283, r28284, r28285, r28286, r28287, r28288, r28289, r28290, r28291, r28292, r28293, r28294, r28295, r28296;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init(r28271);
        mpfr_init(r28272);
        mpfr_init(r28273);
        mpfr_init(r28274);
        mpfr_init(r28275);
        mpfr_init(r28276);
        mpfr_init(r28277);
        mpfr_init(r28278);
        mpfr_init_set_str(r28279, "4.5497853715898254e-12", 10, MPFR_RNDN);
        mpfr_init(r28280);
        mpfr_init(r28281);
        mpfr_init(r28282);
        mpfr_init(r28283);
        mpfr_init_set_str(r28284, "1", 10, MPFR_RNDN);
        mpfr_init(r28285);
        mpfr_init(r28286);
        mpfr_init_set_str(r28287, "4", 10, MPFR_RNDN);
        mpfr_init(r28288);
        mpfr_init(r28289);
        mpfr_init(r28290);
        mpfr_init(r28291);
        mpfr_init(r28292);
        mpfr_init(r28293);
        mpfr_init(r28294);
        mpfr_init(r28295);
        mpfr_init(r28296);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r28271, wj, MPFR_RNDN);
        mpfr_exp(r28272, r28271, MPFR_RNDN);
        mpfr_mul(r28273, r28271, r28272, MPFR_RNDN);
        mpfr_set_d(r28274, x, MPFR_RNDN);
        mpfr_sub(r28275, r28273, r28274, MPFR_RNDN);
        mpfr_add(r28276, r28272, r28273, MPFR_RNDN);
        mpfr_div(r28277, r28275, r28276, MPFR_RNDN);
        mpfr_sub(r28278, r28271, r28277, MPFR_RNDN);
        ;
        mpfr_set_si(r28280, mpfr_cmp(r28278, r28279) <= 0, MPFR_RNDN);
        mpfr_fma(r28281, r28271, r28272, r28272, MPFR_RNDN);
        mpfr_div(r28282, r28274, r28281, MPFR_RNDN);
        mpfr_mul(r28283, r28271, r28271, MPFR_RNDN);
        ;
        mpfr_sub(r28285, r28284, r28271, MPFR_RNDN);
        mpfr_mul(r28286, r28283, r28285, MPFR_RNDN);
        ;
        mpfr_pow(r28288, r28271, r28287, MPFR_RNDN);
        mpfr_add(r28289, r28286, r28288, MPFR_RNDN);
        mpfr_add(r28290, r28282, r28289, MPFR_RNDN);
        mpfr_add(r28291, r28284, r28271, MPFR_RNDN);
        mpfr_div(r28292, r28271, r28291, MPFR_RNDN);
        mpfr_sub(r28293, r28271, r28292, MPFR_RNDN);
        mpfr_div(r28294, r28274, r28276, MPFR_RNDN);
        mpfr_add(r28295, r28293, r28294, MPFR_RNDN);
        if (mpfr_get_si(r28280, MPFR_RNDN)) { mpfr_set(r28296, r28290, MPFR_RNDN); } else { mpfr_set(r28296, r28295, MPFR_RNDN); };
        return mpfr_get_d(r28296, MPFR_RNDN);
}

static mpfr_t r28297, r28298, r28299, r28300, r28301, r28302, r28303, r28304, r28305, r28306, r28307, r28308, r28309, r28310, r28311, r28312, r28313, r28314, r28315, r28316, r28317, r28318, r28319, r28320, r28321, r28322;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init(r28297);
        mpfr_init(r28298);
        mpfr_init(r28299);
        mpfr_init(r28300);
        mpfr_init(r28301);
        mpfr_init(r28302);
        mpfr_init(r28303);
        mpfr_init(r28304);
        mpfr_init_set_str(r28305, "4.5497853715898254e-12", 10, MPFR_RNDN);
        mpfr_init(r28306);
        mpfr_init(r28307);
        mpfr_init(r28308);
        mpfr_init(r28309);
        mpfr_init_set_str(r28310, "1", 10, MPFR_RNDN);
        mpfr_init(r28311);
        mpfr_init(r28312);
        mpfr_init_set_str(r28313, "4", 10, MPFR_RNDN);
        mpfr_init(r28314);
        mpfr_init(r28315);
        mpfr_init(r28316);
        mpfr_init(r28317);
        mpfr_init(r28318);
        mpfr_init(r28319);
        mpfr_init(r28320);
        mpfr_init(r28321);
        mpfr_init(r28322);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r28297, wj, MPFR_RNDN);
        mpfr_exp(r28298, r28297, MPFR_RNDN);
        mpfr_mul(r28299, r28297, r28298, MPFR_RNDN);
        mpfr_set_d(r28300, x, MPFR_RNDN);
        mpfr_sub(r28301, r28299, r28300, MPFR_RNDN);
        mpfr_add(r28302, r28298, r28299, MPFR_RNDN);
        mpfr_div(r28303, r28301, r28302, MPFR_RNDN);
        mpfr_sub(r28304, r28297, r28303, MPFR_RNDN);
        ;
        mpfr_set_si(r28306, mpfr_cmp(r28304, r28305) <= 0, MPFR_RNDN);
        mpfr_fma(r28307, r28297, r28298, r28298, MPFR_RNDN);
        mpfr_div(r28308, r28300, r28307, MPFR_RNDN);
        mpfr_mul(r28309, r28297, r28297, MPFR_RNDN);
        ;
        mpfr_sub(r28311, r28310, r28297, MPFR_RNDN);
        mpfr_mul(r28312, r28309, r28311, MPFR_RNDN);
        ;
        mpfr_pow(r28314, r28297, r28313, MPFR_RNDN);
        mpfr_add(r28315, r28312, r28314, MPFR_RNDN);
        mpfr_add(r28316, r28308, r28315, MPFR_RNDN);
        mpfr_add(r28317, r28310, r28297, MPFR_RNDN);
        mpfr_div(r28318, r28297, r28317, MPFR_RNDN);
        mpfr_sub(r28319, r28297, r28318, MPFR_RNDN);
        mpfr_div(r28320, r28300, r28302, MPFR_RNDN);
        mpfr_add(r28321, r28319, r28320, MPFR_RNDN);
        if (mpfr_get_si(r28306, MPFR_RNDN)) { mpfr_set(r28322, r28316, MPFR_RNDN); } else { mpfr_set(r28322, r28321, MPFR_RNDN); };
        return mpfr_get_d(r28322, MPFR_RNDN);
}

