#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 r20359 = wj;
        float r20360 = exp(r20359);
        float r20361 = r20359 * r20360;
        float r20362 = x;
        float r20363 = r20361 - r20362;
        float r20364 = r20360 + r20361;
        float r20365 = r20363 / r20364;
        float r20366 = r20359 - r20365;
        return r20366;
}

double f_id(double wj, double x) {
        double r20367 = wj;
        double r20368 = exp(r20367);
        double r20369 = r20367 * r20368;
        double r20370 = x;
        double r20371 = r20369 - r20370;
        double r20372 = r20368 + r20369;
        double r20373 = r20371 / r20372;
        double r20374 = r20367 - r20373;
        return r20374;
}


double f_of(float wj, float x) {
        float r20375 = wj;
        float r20376 = r20375 * r20375;
        float r20377 = r20375 * (r20375 * r20375);
        float r20378 = 4.0f;
        float r20379 = pow(r20375, r20378);
        float r20380 = r20377 - r20379;
        float r20381 = r20376 - r20380;
        float r20382 = x;
        float r20383 = 1.0f;
        float r20384 = r20383 + r20375;
        float r20385 = r20382 / r20384;
        float r20386 = exp(r20375);
        float r20387 = r20385 / r20386;
        float r20388 = r20381 + r20387;
        return r20388;
}

double f_od(double wj, double x) {
        double r20389 = wj;
        double r20390 = r20389 * r20389;
        double r20391 = r20389 * (r20389 * r20389);
        double r20392 = 4.0;
        double r20393 = pow(r20389, r20392);
        double r20394 = r20391 - r20393;
        double r20395 = r20390 - r20394;
        double r20396 = x;
        double r20397 = 1.0;
        double r20398 = r20397 + r20389;
        double r20399 = r20396 / r20398;
        double r20400 = exp(r20389);
        double r20401 = r20399 / r20400;
        double r20402 = r20395 + r20401;
        return r20402;
}

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 r20403, r20404, r20405, r20406, r20407, r20408, r20409, r20410;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r20403);
        mpfr_init(r20404);
        mpfr_init(r20405);
        mpfr_init(r20406);
        mpfr_init(r20407);
        mpfr_init(r20408);
        mpfr_init(r20409);
        mpfr_init(r20410);
}

double f_im(double wj, double x) {
        mpfr_set_d(r20403, wj, MPFR_RNDN);
        mpfr_exp(r20404, r20403, MPFR_RNDN);
        mpfr_mul(r20405, r20403, r20404, MPFR_RNDN);
        mpfr_set_d(r20406, x, MPFR_RNDN);
        mpfr_sub(r20407, r20405, r20406, MPFR_RNDN);
        mpfr_add(r20408, r20404, r20405, MPFR_RNDN);
        mpfr_div(r20409, r20407, r20408, MPFR_RNDN);
        mpfr_sub(r20410, r20403, r20409, MPFR_RNDN);
        return mpfr_get_d(r20410, MPFR_RNDN);
}

static mpfr_t r20411, r20412, r20413, r20414, r20415, r20416, r20417, r20418, r20419, r20420, r20421, r20422, r20423, r20424;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r20411);
        mpfr_init(r20412);
        mpfr_init(r20413);
        mpfr_init_set_str(r20414, "4", 10, MPFR_RNDN);
        mpfr_init(r20415);
        mpfr_init(r20416);
        mpfr_init(r20417);
        mpfr_init(r20418);
        mpfr_init_set_str(r20419, "1", 10, MPFR_RNDN);
        mpfr_init(r20420);
        mpfr_init(r20421);
        mpfr_init(r20422);
        mpfr_init(r20423);
        mpfr_init(r20424);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r20411, wj, MPFR_RNDN);
        mpfr_sqr(r20412, r20411, MPFR_RNDN);
        mpfr_mul(r20413, r20411, r20411, MPFR_RNDN); mpfr_mul(r20413, r20413, r20411, MPFR_RNDN);
        ;
        mpfr_pow(r20415, r20411, r20414, MPFR_RNDN);
        mpfr_sub(r20416, r20413, r20415, MPFR_RNDN);
        mpfr_sub(r20417, r20412, r20416, MPFR_RNDN);
        mpfr_set_d(r20418, x, MPFR_RNDN);
        ;
        mpfr_add(r20420, r20419, r20411, MPFR_RNDN);
        mpfr_div(r20421, r20418, r20420, MPFR_RNDN);
        mpfr_exp(r20422, r20411, MPFR_RNDN);
        mpfr_div(r20423, r20421, r20422, MPFR_RNDN);
        mpfr_add(r20424, r20417, r20423, MPFR_RNDN);
        return mpfr_get_d(r20424, MPFR_RNDN);
}

static mpfr_t r20425, r20426, r20427, r20428, r20429, r20430, r20431, r20432, r20433, r20434, r20435, r20436, r20437, r20438;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r20425);
        mpfr_init(r20426);
        mpfr_init(r20427);
        mpfr_init_set_str(r20428, "4", 10, MPFR_RNDN);
        mpfr_init(r20429);
        mpfr_init(r20430);
        mpfr_init(r20431);
        mpfr_init(r20432);
        mpfr_init_set_str(r20433, "1", 10, MPFR_RNDN);
        mpfr_init(r20434);
        mpfr_init(r20435);
        mpfr_init(r20436);
        mpfr_init(r20437);
        mpfr_init(r20438);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r20425, wj, MPFR_RNDN);
        mpfr_sqr(r20426, r20425, MPFR_RNDN);
        mpfr_mul(r20427, r20425, r20425, MPFR_RNDN); mpfr_mul(r20427, r20427, r20425, MPFR_RNDN);
        ;
        mpfr_pow(r20429, r20425, r20428, MPFR_RNDN);
        mpfr_sub(r20430, r20427, r20429, MPFR_RNDN);
        mpfr_sub(r20431, r20426, r20430, MPFR_RNDN);
        mpfr_set_d(r20432, x, MPFR_RNDN);
        ;
        mpfr_add(r20434, r20433, r20425, MPFR_RNDN);
        mpfr_div(r20435, r20432, r20434, MPFR_RNDN);
        mpfr_exp(r20436, r20425, MPFR_RNDN);
        mpfr_div(r20437, r20435, r20436, MPFR_RNDN);
        mpfr_add(r20438, r20431, r20437, MPFR_RNDN);
        return mpfr_get_d(r20438, MPFR_RNDN);
}

