#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 r25356 = wj;
        float r25357 = exp(r25356);
        float r25358 = r25356 * r25357;
        float r25359 = x;
        float r25360 = r25358 - r25359;
        float r25361 = r25357 + r25358;
        float r25362 = r25360 / r25361;
        float r25363 = r25356 - r25362;
        return r25363;
}

double f_id(double wj, double x) {
        double r25364 = wj;
        double r25365 = exp(r25364);
        double r25366 = r25364 * r25365;
        double r25367 = x;
        double r25368 = r25366 - r25367;
        double r25369 = r25365 + r25366;
        double r25370 = r25368 / r25369;
        double r25371 = r25364 - r25370;
        return r25371;
}


double f_of(float wj, float x) {
        float r25372 = wj;
        float r25373 = r25372 * r25372;
        float r25374 = r25372 - r25373;
        float r25375 = 1;
        float r25376 = r25375 / r25372;
        float r25377 = -4;
        float r25378 = pow(r25376, r25377);
        float r25379 = fma(r25372, r25374, r25378);
        float r25380 = x;
        float r25381 = exp(r25372);
        float r25382 = fma(r25372, r25381, r25381);
        float r25383 = r25380 / r25382;
        float r25384 = r25379 + r25383;
        return r25384;
}

double f_od(double wj, double x) {
        double r25385 = wj;
        double r25386 = r25385 * r25385;
        double r25387 = r25385 - r25386;
        double r25388 = 1;
        double r25389 = r25388 / r25385;
        double r25390 = -4;
        double r25391 = pow(r25389, r25390);
        double r25392 = fma(r25385, r25387, r25391);
        double r25393 = x;
        double r25394 = exp(r25385);
        double r25395 = fma(r25385, r25394, r25394);
        double r25396 = r25393 / r25395;
        double r25397 = r25392 + r25396;
        return r25397;
}

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 r25398, r25399, r25400, r25401, r25402, r25403, r25404, r25405;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(912);
        mpfr_init(r25398);
        mpfr_init(r25399);
        mpfr_init(r25400);
        mpfr_init(r25401);
        mpfr_init(r25402);
        mpfr_init(r25403);
        mpfr_init(r25404);
        mpfr_init(r25405);
}

double f_im(double wj, double x) {
        mpfr_set_d(r25398, wj, MPFR_RNDN);
        mpfr_exp(r25399, r25398, MPFR_RNDN);
        mpfr_mul(r25400, r25398, r25399, MPFR_RNDN);
        mpfr_set_d(r25401, x, MPFR_RNDN);
        mpfr_sub(r25402, r25400, r25401, MPFR_RNDN);
        mpfr_add(r25403, r25399, r25400, MPFR_RNDN);
        mpfr_div(r25404, r25402, r25403, MPFR_RNDN);
        mpfr_sub(r25405, r25398, r25404, MPFR_RNDN);
        return mpfr_get_d(r25405, MPFR_RNDN);
}

static mpfr_t r25406, r25407, r25408, r25409, r25410, r25411, r25412, r25413, r25414, r25415, r25416, r25417, r25418;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(912);
        mpfr_init(r25406);
        mpfr_init(r25407);
        mpfr_init(r25408);
        mpfr_init_set_str(r25409, "1", 10, MPFR_RNDN);
        mpfr_init(r25410);
        mpfr_init_set_str(r25411, "-4", 10, MPFR_RNDN);
        mpfr_init(r25412);
        mpfr_init(r25413);
        mpfr_init(r25414);
        mpfr_init(r25415);
        mpfr_init(r25416);
        mpfr_init(r25417);
        mpfr_init(r25418);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r25406, wj, MPFR_RNDN);
        mpfr_mul(r25407, r25406, r25406, MPFR_RNDN);
        mpfr_sub(r25408, r25406, r25407, MPFR_RNDN);
        ;
        mpfr_div(r25410, r25409, r25406, MPFR_RNDN);
        ;
        mpfr_pow(r25412, r25410, r25411, MPFR_RNDN);
        mpfr_fma(r25413, r25406, r25408, r25412, MPFR_RNDN);
        mpfr_set_d(r25414, x, MPFR_RNDN);
        mpfr_exp(r25415, r25406, MPFR_RNDN);
        mpfr_fma(r25416, r25406, r25415, r25415, MPFR_RNDN);
        mpfr_div(r25417, r25414, r25416, MPFR_RNDN);
        mpfr_add(r25418, r25413, r25417, MPFR_RNDN);
        return mpfr_get_d(r25418, MPFR_RNDN);
}

static mpfr_t r25419, r25420, r25421, r25422, r25423, r25424, r25425, r25426, r25427, r25428, r25429, r25430, r25431;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(912);
        mpfr_init(r25419);
        mpfr_init(r25420);
        mpfr_init(r25421);
        mpfr_init_set_str(r25422, "1", 10, MPFR_RNDN);
        mpfr_init(r25423);
        mpfr_init_set_str(r25424, "-4", 10, MPFR_RNDN);
        mpfr_init(r25425);
        mpfr_init(r25426);
        mpfr_init(r25427);
        mpfr_init(r25428);
        mpfr_init(r25429);
        mpfr_init(r25430);
        mpfr_init(r25431);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r25419, wj, MPFR_RNDN);
        mpfr_mul(r25420, r25419, r25419, MPFR_RNDN);
        mpfr_sub(r25421, r25419, r25420, MPFR_RNDN);
        ;
        mpfr_div(r25423, r25422, r25419, MPFR_RNDN);
        ;
        mpfr_pow(r25425, r25423, r25424, MPFR_RNDN);
        mpfr_fma(r25426, r25419, r25421, r25425, MPFR_RNDN);
        mpfr_set_d(r25427, x, MPFR_RNDN);
        mpfr_exp(r25428, r25419, MPFR_RNDN);
        mpfr_fma(r25429, r25419, r25428, r25428, MPFR_RNDN);
        mpfr_div(r25430, r25427, r25429, MPFR_RNDN);
        mpfr_add(r25431, r25426, r25430, MPFR_RNDN);
        return mpfr_get_d(r25431, MPFR_RNDN);
}

