#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 r48421 = wj;
        float r48422 = exp(r48421);
        float r48423 = r48421 * r48422;
        float r48424 = x;
        float r48425 = r48423 - r48424;
        float r48426 = r48422 + r48423;
        float r48427 = r48425 / r48426;
        float r48428 = r48421 - r48427;
        return r48428;
}

double f_id(double wj, double x) {
        double r48429 = wj;
        double r48430 = exp(r48429);
        double r48431 = r48429 * r48430;
        double r48432 = x;
        double r48433 = r48431 - r48432;
        double r48434 = r48430 + r48431;
        double r48435 = r48433 / r48434;
        double r48436 = r48429 - r48435;
        return r48436;
}


double f_of(float wj, float x) {
        float r48437 = x;
        float r48438 = wj;
        float r48439 = r48438 + r48438;
        float r48440 = r48439 * r48437;
        float r48441 = r48437 - r48440;
        float r48442 = r48438 * r48438;
        float r48443 = 5/2;
        float r48444 = r48443 * r48437;
        float r48445 = 1;
        float r48446 = r48445 - r48438;
        float r48447 = r48444 + r48446;
        float r48448 = r48442 * r48447;
        float r48449 = r48441 + r48448;
        return r48449;
}

double f_od(double wj, double x) {
        double r48450 = x;
        double r48451 = wj;
        double r48452 = r48451 + r48451;
        double r48453 = r48452 * r48450;
        double r48454 = r48450 - r48453;
        double r48455 = r48451 * r48451;
        double r48456 = 5/2;
        double r48457 = r48456 * r48450;
        double r48458 = 1;
        double r48459 = r48458 - r48451;
        double r48460 = r48457 + r48459;
        double r48461 = r48455 * r48460;
        double r48462 = r48454 + r48461;
        return r48462;
}

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 r48463, r48464, r48465, r48466, r48467, r48468, r48469, r48470;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(912);
        mpfr_init(r48463);
        mpfr_init(r48464);
        mpfr_init(r48465);
        mpfr_init(r48466);
        mpfr_init(r48467);
        mpfr_init(r48468);
        mpfr_init(r48469);
        mpfr_init(r48470);
}

double f_im(double wj, double x) {
        mpfr_set_d(r48463, wj, MPFR_RNDN);
        mpfr_exp(r48464, r48463, MPFR_RNDN);
        mpfr_mul(r48465, r48463, r48464, MPFR_RNDN);
        mpfr_set_d(r48466, x, MPFR_RNDN);
        mpfr_sub(r48467, r48465, r48466, MPFR_RNDN);
        mpfr_add(r48468, r48464, r48465, MPFR_RNDN);
        mpfr_div(r48469, r48467, r48468, MPFR_RNDN);
        mpfr_sub(r48470, r48463, r48469, MPFR_RNDN);
        return mpfr_get_d(r48470, MPFR_RNDN);
}

static mpfr_t r48471, r48472, r48473, r48474, r48475, r48476, r48477, r48478, r48479, r48480, r48481, r48482, r48483;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(912);
        mpfr_init(r48471);
        mpfr_init(r48472);
        mpfr_init(r48473);
        mpfr_init(r48474);
        mpfr_init(r48475);
        mpfr_init(r48476);
        mpfr_init_set_str(r48477, "5/2", 10, MPFR_RNDN);
        mpfr_init(r48478);
        mpfr_init_set_str(r48479, "1", 10, MPFR_RNDN);
        mpfr_init(r48480);
        mpfr_init(r48481);
        mpfr_init(r48482);
        mpfr_init(r48483);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r48471, x, MPFR_RNDN);
        mpfr_set_d(r48472, wj, MPFR_RNDN);
        mpfr_add(r48473, r48472, r48472, MPFR_RNDN);
        mpfr_mul(r48474, r48473, r48471, MPFR_RNDN);
        mpfr_sub(r48475, r48471, r48474, MPFR_RNDN);
        mpfr_mul(r48476, r48472, r48472, MPFR_RNDN);
        ;
        mpfr_mul(r48478, r48477, r48471, MPFR_RNDN);
        ;
        mpfr_sub(r48480, r48479, r48472, MPFR_RNDN);
        mpfr_add(r48481, r48478, r48480, MPFR_RNDN);
        mpfr_mul(r48482, r48476, r48481, MPFR_RNDN);
        mpfr_add(r48483, r48475, r48482, MPFR_RNDN);
        return mpfr_get_d(r48483, MPFR_RNDN);
}

static mpfr_t r48484, r48485, r48486, r48487, r48488, r48489, r48490, r48491, r48492, r48493, r48494, r48495, r48496;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(912);
        mpfr_init(r48484);
        mpfr_init(r48485);
        mpfr_init(r48486);
        mpfr_init(r48487);
        mpfr_init(r48488);
        mpfr_init(r48489);
        mpfr_init_set_str(r48490, "5/2", 10, MPFR_RNDN);
        mpfr_init(r48491);
        mpfr_init_set_str(r48492, "1", 10, MPFR_RNDN);
        mpfr_init(r48493);
        mpfr_init(r48494);
        mpfr_init(r48495);
        mpfr_init(r48496);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r48484, x, MPFR_RNDN);
        mpfr_set_d(r48485, wj, MPFR_RNDN);
        mpfr_add(r48486, r48485, r48485, MPFR_RNDN);
        mpfr_mul(r48487, r48486, r48484, MPFR_RNDN);
        mpfr_sub(r48488, r48484, r48487, MPFR_RNDN);
        mpfr_mul(r48489, r48485, r48485, MPFR_RNDN);
        ;
        mpfr_mul(r48491, r48490, r48484, MPFR_RNDN);
        ;
        mpfr_sub(r48493, r48492, r48485, MPFR_RNDN);
        mpfr_add(r48494, r48491, r48493, MPFR_RNDN);
        mpfr_mul(r48495, r48489, r48494, MPFR_RNDN);
        mpfr_add(r48496, r48488, r48495, MPFR_RNDN);
        return mpfr_get_d(r48496, MPFR_RNDN);
}

