#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 r29134 = wj;
        float r29135 = exp(r29134);
        float r29136 = r29134 * r29135;
        float r29137 = x;
        float r29138 = r29136 - r29137;
        float r29139 = r29135 + r29136;
        float r29140 = r29138 / r29139;
        float r29141 = r29134 - r29140;
        return r29141;
}

double f_id(double wj, double x) {
        double r29142 = wj;
        double r29143 = exp(r29142);
        double r29144 = r29142 * r29143;
        double r29145 = x;
        double r29146 = r29144 - r29145;
        double r29147 = r29143 + r29144;
        double r29148 = r29146 / r29147;
        double r29149 = r29142 - r29148;
        return r29149;
}


double f_of(float wj, float x) {
        float r29150 = x;
        float r29151 = wj;
        float r29152 = exp(r29151);
        float r29153 = r29150 / r29152;
        float r29154 = 1;
        float r29155 = r29154 + r29151;
        float r29156 = r29153 / r29155;
        float r29157 = 4;
        float r29158 = pow(r29151, r29157);
        float r29159 = r29154 - r29151;
        float r29160 = cbrt(r29159);
        float r29161 = r29160 * r29160;
        float r29162 = r29151 * r29151;
        float r29163 = r29160 * r29162;
        float r29164 = r29161 * r29163;
        float r29165 = r29158 + r29164;
        float r29166 = r29156 + r29165;
        return r29166;
}

double f_od(double wj, double x) {
        double r29167 = x;
        double r29168 = wj;
        double r29169 = exp(r29168);
        double r29170 = r29167 / r29169;
        double r29171 = 1;
        double r29172 = r29171 + r29168;
        double r29173 = r29170 / r29172;
        double r29174 = 4;
        double r29175 = pow(r29168, r29174);
        double r29176 = r29171 - r29168;
        double r29177 = cbrt(r29176);
        double r29178 = r29177 * r29177;
        double r29179 = r29168 * r29168;
        double r29180 = r29177 * r29179;
        double r29181 = r29178 * r29180;
        double r29182 = r29175 + r29181;
        double r29183 = r29173 + r29182;
        return r29183;
}

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 r29184, r29185, r29186, r29187, r29188, r29189, r29190, r29191;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r29184);
        mpfr_init(r29185);
        mpfr_init(r29186);
        mpfr_init(r29187);
        mpfr_init(r29188);
        mpfr_init(r29189);
        mpfr_init(r29190);
        mpfr_init(r29191);
}

double f_im(double wj, double x) {
        mpfr_set_d(r29184, wj, MPFR_RNDN);
        mpfr_exp(r29185, r29184, MPFR_RNDN);
        mpfr_mul(r29186, r29184, r29185, MPFR_RNDN);
        mpfr_set_d(r29187, x, MPFR_RNDN);
        mpfr_sub(r29188, r29186, r29187, MPFR_RNDN);
        mpfr_add(r29189, r29185, r29186, MPFR_RNDN);
        mpfr_div(r29190, r29188, r29189, MPFR_RNDN);
        mpfr_sub(r29191, r29184, r29190, MPFR_RNDN);
        return mpfr_get_d(r29191, MPFR_RNDN);
}

static mpfr_t r29192, r29193, r29194, r29195, r29196, r29197, r29198, r29199, r29200, r29201, r29202, r29203, r29204, r29205, r29206, r29207, r29208;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init(r29192);
        mpfr_init(r29193);
        mpfr_init(r29194);
        mpfr_init(r29195);
        mpfr_init_set_str(r29196, "1", 10, MPFR_RNDN);
        mpfr_init(r29197);
        mpfr_init(r29198);
        mpfr_init_set_str(r29199, "4", 10, MPFR_RNDN);
        mpfr_init(r29200);
        mpfr_init(r29201);
        mpfr_init(r29202);
        mpfr_init(r29203);
        mpfr_init(r29204);
        mpfr_init(r29205);
        mpfr_init(r29206);
        mpfr_init(r29207);
        mpfr_init(r29208);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r29192, x, MPFR_RNDN);
        mpfr_set_d(r29193, wj, MPFR_RNDN);
        mpfr_exp(r29194, r29193, MPFR_RNDN);
        mpfr_div(r29195, r29192, r29194, MPFR_RNDN);
        ;
        mpfr_add(r29197, r29196, r29193, MPFR_RNDN);
        mpfr_div(r29198, r29195, r29197, MPFR_RNDN);
        ;
        mpfr_pow(r29200, r29193, r29199, MPFR_RNDN);
        mpfr_sub(r29201, r29196, r29193, MPFR_RNDN);
        mpfr_cbrt(r29202, r29201, MPFR_RNDN);
        mpfr_mul(r29203, r29202, r29202, MPFR_RNDN);
        mpfr_mul(r29204, r29193, r29193, MPFR_RNDN);
        mpfr_mul(r29205, r29202, r29204, MPFR_RNDN);
        mpfr_mul(r29206, r29203, r29205, MPFR_RNDN);
        mpfr_add(r29207, r29200, r29206, MPFR_RNDN);
        mpfr_add(r29208, r29198, r29207, MPFR_RNDN);
        return mpfr_get_d(r29208, MPFR_RNDN);
}

static mpfr_t r29209, r29210, r29211, r29212, r29213, r29214, r29215, r29216, r29217, r29218, r29219, r29220, r29221, r29222, r29223, r29224, r29225;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init(r29209);
        mpfr_init(r29210);
        mpfr_init(r29211);
        mpfr_init(r29212);
        mpfr_init_set_str(r29213, "1", 10, MPFR_RNDN);
        mpfr_init(r29214);
        mpfr_init(r29215);
        mpfr_init_set_str(r29216, "4", 10, MPFR_RNDN);
        mpfr_init(r29217);
        mpfr_init(r29218);
        mpfr_init(r29219);
        mpfr_init(r29220);
        mpfr_init(r29221);
        mpfr_init(r29222);
        mpfr_init(r29223);
        mpfr_init(r29224);
        mpfr_init(r29225);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r29209, x, MPFR_RNDN);
        mpfr_set_d(r29210, wj, MPFR_RNDN);
        mpfr_exp(r29211, r29210, MPFR_RNDN);
        mpfr_div(r29212, r29209, r29211, MPFR_RNDN);
        ;
        mpfr_add(r29214, r29213, r29210, MPFR_RNDN);
        mpfr_div(r29215, r29212, r29214, MPFR_RNDN);
        ;
        mpfr_pow(r29217, r29210, r29216, MPFR_RNDN);
        mpfr_sub(r29218, r29213, r29210, MPFR_RNDN);
        mpfr_cbrt(r29219, r29218, MPFR_RNDN);
        mpfr_mul(r29220, r29219, r29219, MPFR_RNDN);
        mpfr_mul(r29221, r29210, r29210, MPFR_RNDN);
        mpfr_mul(r29222, r29219, r29221, MPFR_RNDN);
        mpfr_mul(r29223, r29220, r29222, MPFR_RNDN);
        mpfr_add(r29224, r29217, r29223, MPFR_RNDN);
        mpfr_add(r29225, r29215, r29224, MPFR_RNDN);
        return mpfr_get_d(r29225, MPFR_RNDN);
}

