#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 r26026 = wj;
        float r26027 = exp(r26026);
        float r26028 = r26026 * r26027;
        float r26029 = x;
        float r26030 = r26028 - r26029;
        float r26031 = r26027 + r26028;
        float r26032 = r26030 / r26031;
        float r26033 = r26026 - r26032;
        return r26033;
}

double f_id(double wj, double x) {
        double r26034 = wj;
        double r26035 = exp(r26034);
        double r26036 = r26034 * r26035;
        double r26037 = x;
        double r26038 = r26036 - r26037;
        double r26039 = r26035 + r26036;
        double r26040 = r26038 / r26039;
        double r26041 = r26034 - r26040;
        return r26041;
}


double f_of(float wj, float x) {
        float r26042 = 1;
        float r26043 = wj;
        float r26044 = r26042 / r26043;
        float r26045 = -2;
        float r26046 = pow(r26044, r26045);
        float r26047 = cbrt(r26046);
        float r26048 = r26047 * r26047;
        float r26049 = exp(r26047);
        float r26050 = log(r26049);
        float r26051 = r26048 * r26050;
        float r26052 = x;
        float r26053 = r26051 + r26052;
        float r26054 = 2;
        float r26055 = r26043 * r26052;
        float r26056 = r26054 * r26055;
        float r26057 = r26053 - r26056;
        float r26058 = 3.51914490016807e-11;
        bool r26059 = r26057 <= r26058;
        float r26060 = pow(r26043, r26054);
        float r26061 = r26060 + r26052;
        float r26062 = r26061 - r26056;
        float r26063 = r26042 + r26043;
        float r26064 = r26043 / r26063;
        float r26065 = r26043 - r26064;
        float r26066 = exp(r26043);
        float r26067 = r26043 * r26066;
        float r26068 = r26066 + r26067;
        float r26069 = r26052 / r26068;
        float r26070 = r26065 + r26069;
        float r26071 = r26059 ? r26062 : r26070;
        return r26071;
}

double f_od(double wj, double x) {
        double r26072 = 1;
        double r26073 = wj;
        double r26074 = r26072 / r26073;
        double r26075 = -2;
        double r26076 = pow(r26074, r26075);
        double r26077 = cbrt(r26076);
        double r26078 = r26077 * r26077;
        double r26079 = exp(r26077);
        double r26080 = log(r26079);
        double r26081 = r26078 * r26080;
        double r26082 = x;
        double r26083 = r26081 + r26082;
        double r26084 = 2;
        double r26085 = r26073 * r26082;
        double r26086 = r26084 * r26085;
        double r26087 = r26083 - r26086;
        double r26088 = 3.51914490016807e-11;
        bool r26089 = r26087 <= r26088;
        double r26090 = pow(r26073, r26084);
        double r26091 = r26090 + r26082;
        double r26092 = r26091 - r26086;
        double r26093 = r26072 + r26073;
        double r26094 = r26073 / r26093;
        double r26095 = r26073 - r26094;
        double r26096 = exp(r26073);
        double r26097 = r26073 * r26096;
        double r26098 = r26096 + r26097;
        double r26099 = r26082 / r26098;
        double r26100 = r26095 + r26099;
        double r26101 = r26089 ? r26092 : r26100;
        return r26101;
}

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 r26102, r26103, r26104, r26105, r26106, r26107, r26108, r26109;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(912);
        mpfr_init(r26102);
        mpfr_init(r26103);
        mpfr_init(r26104);
        mpfr_init(r26105);
        mpfr_init(r26106);
        mpfr_init(r26107);
        mpfr_init(r26108);
        mpfr_init(r26109);
}

double f_im(double wj, double x) {
        mpfr_set_d(r26102, wj, MPFR_RNDN);
        mpfr_exp(r26103, r26102, MPFR_RNDN);
        mpfr_mul(r26104, r26102, r26103, MPFR_RNDN);
        mpfr_set_d(r26105, x, MPFR_RNDN);
        mpfr_sub(r26106, r26104, r26105, MPFR_RNDN);
        mpfr_add(r26107, r26103, r26104, MPFR_RNDN);
        mpfr_div(r26108, r26106, r26107, MPFR_RNDN);
        mpfr_sub(r26109, r26102, r26108, MPFR_RNDN);
        return mpfr_get_d(r26109, MPFR_RNDN);
}

static mpfr_t r26110, r26111, r26112, r26113, r26114, r26115, r26116, r26117, r26118, r26119, r26120, r26121, r26122, r26123, r26124, r26125, r26126, r26127, r26128, r26129, r26130, r26131, r26132, r26133, r26134, r26135, r26136, r26137, r26138, r26139;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(912);
        mpfr_init_set_str(r26110, "1", 10, MPFR_RNDN);
        mpfr_init(r26111);
        mpfr_init(r26112);
        mpfr_init_set_str(r26113, "-2", 10, MPFR_RNDN);
        mpfr_init(r26114);
        mpfr_init(r26115);
        mpfr_init(r26116);
        mpfr_init(r26117);
        mpfr_init(r26118);
        mpfr_init(r26119);
        mpfr_init(r26120);
        mpfr_init(r26121);
        mpfr_init_set_str(r26122, "2", 10, MPFR_RNDN);
        mpfr_init(r26123);
        mpfr_init(r26124);
        mpfr_init(r26125);
        mpfr_init_set_str(r26126, "3.51914490016807e-11", 10, MPFR_RNDN);
        mpfr_init(r26127);
        mpfr_init(r26128);
        mpfr_init(r26129);
        mpfr_init(r26130);
        mpfr_init(r26131);
        mpfr_init(r26132);
        mpfr_init(r26133);
        mpfr_init(r26134);
        mpfr_init(r26135);
        mpfr_init(r26136);
        mpfr_init(r26137);
        mpfr_init(r26138);
        mpfr_init(r26139);
}

double f_fm(double wj, double x) {
        ;
        mpfr_set_d(r26111, wj, MPFR_RNDN);
        mpfr_div(r26112, r26110, r26111, MPFR_RNDN);
        ;
        mpfr_pow(r26114, r26112, r26113, MPFR_RNDN);
        mpfr_cbrt(r26115, r26114, MPFR_RNDN);
        mpfr_mul(r26116, r26115, r26115, MPFR_RNDN);
        mpfr_exp(r26117, r26115, MPFR_RNDN);
        mpfr_log(r26118, r26117, MPFR_RNDN);
        mpfr_mul(r26119, r26116, r26118, MPFR_RNDN);
        mpfr_set_d(r26120, x, MPFR_RNDN);
        mpfr_add(r26121, r26119, r26120, MPFR_RNDN);
        ;
        mpfr_mul(r26123, r26111, r26120, MPFR_RNDN);
        mpfr_mul(r26124, r26122, r26123, MPFR_RNDN);
        mpfr_sub(r26125, r26121, r26124, MPFR_RNDN);
        ;
        mpfr_set_si(r26127, mpfr_cmp(r26125, r26126) <= 0, MPFR_RNDN);
        mpfr_pow(r26128, r26111, r26122, MPFR_RNDN);
        mpfr_add(r26129, r26128, r26120, MPFR_RNDN);
        mpfr_sub(r26130, r26129, r26124, MPFR_RNDN);
        mpfr_add(r26131, r26110, r26111, MPFR_RNDN);
        mpfr_div(r26132, r26111, r26131, MPFR_RNDN);
        mpfr_sub(r26133, r26111, r26132, MPFR_RNDN);
        mpfr_exp(r26134, r26111, MPFR_RNDN);
        mpfr_mul(r26135, r26111, r26134, MPFR_RNDN);
        mpfr_add(r26136, r26134, r26135, MPFR_RNDN);
        mpfr_div(r26137, r26120, r26136, MPFR_RNDN);
        mpfr_add(r26138, r26133, r26137, MPFR_RNDN);
        if (mpfr_get_si(r26127, MPFR_RNDN)) { mpfr_set(r26139, r26130, MPFR_RNDN); } else { mpfr_set(r26139, r26138, MPFR_RNDN); };
        return mpfr_get_d(r26139, MPFR_RNDN);
}

static mpfr_t r26140, r26141, r26142, r26143, r26144, r26145, r26146, r26147, r26148, r26149, r26150, r26151, r26152, r26153, r26154, r26155, r26156, r26157, r26158, r26159, r26160, r26161, r26162, r26163, r26164, r26165, r26166, r26167, r26168, r26169;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(912);
        mpfr_init_set_str(r26140, "1", 10, MPFR_RNDN);
        mpfr_init(r26141);
        mpfr_init(r26142);
        mpfr_init_set_str(r26143, "-2", 10, MPFR_RNDN);
        mpfr_init(r26144);
        mpfr_init(r26145);
        mpfr_init(r26146);
        mpfr_init(r26147);
        mpfr_init(r26148);
        mpfr_init(r26149);
        mpfr_init(r26150);
        mpfr_init(r26151);
        mpfr_init_set_str(r26152, "2", 10, MPFR_RNDN);
        mpfr_init(r26153);
        mpfr_init(r26154);
        mpfr_init(r26155);
        mpfr_init_set_str(r26156, "3.51914490016807e-11", 10, MPFR_RNDN);
        mpfr_init(r26157);
        mpfr_init(r26158);
        mpfr_init(r26159);
        mpfr_init(r26160);
        mpfr_init(r26161);
        mpfr_init(r26162);
        mpfr_init(r26163);
        mpfr_init(r26164);
        mpfr_init(r26165);
        mpfr_init(r26166);
        mpfr_init(r26167);
        mpfr_init(r26168);
        mpfr_init(r26169);
}

double f_dm(double wj, double x) {
        ;
        mpfr_set_d(r26141, wj, MPFR_RNDN);
        mpfr_div(r26142, r26140, r26141, MPFR_RNDN);
        ;
        mpfr_pow(r26144, r26142, r26143, MPFR_RNDN);
        mpfr_cbrt(r26145, r26144, MPFR_RNDN);
        mpfr_mul(r26146, r26145, r26145, MPFR_RNDN);
        mpfr_exp(r26147, r26145, MPFR_RNDN);
        mpfr_log(r26148, r26147, MPFR_RNDN);
        mpfr_mul(r26149, r26146, r26148, MPFR_RNDN);
        mpfr_set_d(r26150, x, MPFR_RNDN);
        mpfr_add(r26151, r26149, r26150, MPFR_RNDN);
        ;
        mpfr_mul(r26153, r26141, r26150, MPFR_RNDN);
        mpfr_mul(r26154, r26152, r26153, MPFR_RNDN);
        mpfr_sub(r26155, r26151, r26154, MPFR_RNDN);
        ;
        mpfr_set_si(r26157, mpfr_cmp(r26155, r26156) <= 0, MPFR_RNDN);
        mpfr_pow(r26158, r26141, r26152, MPFR_RNDN);
        mpfr_add(r26159, r26158, r26150, MPFR_RNDN);
        mpfr_sub(r26160, r26159, r26154, MPFR_RNDN);
        mpfr_add(r26161, r26140, r26141, MPFR_RNDN);
        mpfr_div(r26162, r26141, r26161, MPFR_RNDN);
        mpfr_sub(r26163, r26141, r26162, MPFR_RNDN);
        mpfr_exp(r26164, r26141, MPFR_RNDN);
        mpfr_mul(r26165, r26141, r26164, MPFR_RNDN);
        mpfr_add(r26166, r26164, r26165, MPFR_RNDN);
        mpfr_div(r26167, r26150, r26166, MPFR_RNDN);
        mpfr_add(r26168, r26163, r26167, MPFR_RNDN);
        if (mpfr_get_si(r26157, MPFR_RNDN)) { mpfr_set(r26169, r26160, MPFR_RNDN); } else { mpfr_set(r26169, r26168, MPFR_RNDN); };
        return mpfr_get_d(r26169, MPFR_RNDN);
}

