#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 r26465 = wj;
        float r26466 = exp(r26465);
        float r26467 = r26465 * r26466;
        float r26468 = x;
        float r26469 = r26467 - r26468;
        float r26470 = r26466 + r26467;
        float r26471 = r26469 / r26470;
        float r26472 = r26465 - r26471;
        return r26472;
}

double f_id(double wj, double x) {
        double r26473 = wj;
        double r26474 = exp(r26473);
        double r26475 = r26473 * r26474;
        double r26476 = x;
        double r26477 = r26475 - r26476;
        double r26478 = r26474 + r26475;
        double r26479 = r26477 / r26478;
        double r26480 = r26473 - r26479;
        return r26480;
}


double f_of(float wj, float x) {
        float r26481 = wj;
        float r26482 = 2;
        float r26483 = pow(r26481, r26482);
        float r26484 = x;
        float r26485 = r26483 + r26484;
        float r26486 = r26481 * r26484;
        float r26487 = r26482 * r26486;
        float r26488 = r26485 - r26487;
        return r26488;
}

double f_od(double wj, double x) {
        double r26489 = wj;
        double r26490 = 2;
        double r26491 = pow(r26489, r26490);
        double r26492 = x;
        double r26493 = r26491 + r26492;
        double r26494 = r26489 * r26492;
        double r26495 = r26490 * r26494;
        double r26496 = r26493 - r26495;
        return r26496;
}

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 r26497, r26498, r26499, r26500, r26501, r26502, r26503, r26504;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(912);
        mpfr_init(r26497);
        mpfr_init(r26498);
        mpfr_init(r26499);
        mpfr_init(r26500);
        mpfr_init(r26501);
        mpfr_init(r26502);
        mpfr_init(r26503);
        mpfr_init(r26504);
}

double f_im(double wj, double x) {
        mpfr_set_d(r26497, wj, MPFR_RNDN);
        mpfr_exp(r26498, r26497, MPFR_RNDN);
        mpfr_mul(r26499, r26497, r26498, MPFR_RNDN);
        mpfr_set_d(r26500, x, MPFR_RNDN);
        mpfr_sub(r26501, r26499, r26500, MPFR_RNDN);
        mpfr_add(r26502, r26498, r26499, MPFR_RNDN);
        mpfr_div(r26503, r26501, r26502, MPFR_RNDN);
        mpfr_sub(r26504, r26497, r26503, MPFR_RNDN);
        return mpfr_get_d(r26504, MPFR_RNDN);
}

static mpfr_t r26505, r26506, r26507, r26508, r26509, r26510, r26511, r26512;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(912);
        mpfr_init(r26505);
        mpfr_init_set_str(r26506, "2", 10, MPFR_RNDN);
        mpfr_init(r26507);
        mpfr_init(r26508);
        mpfr_init(r26509);
        mpfr_init(r26510);
        mpfr_init(r26511);
        mpfr_init(r26512);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r26505, wj, MPFR_RNDN);
        ;
        mpfr_pow(r26507, r26505, r26506, MPFR_RNDN);
        mpfr_set_d(r26508, x, MPFR_RNDN);
        mpfr_add(r26509, r26507, r26508, MPFR_RNDN);
        mpfr_mul(r26510, r26505, r26508, MPFR_RNDN);
        mpfr_mul(r26511, r26506, r26510, MPFR_RNDN);
        mpfr_sub(r26512, r26509, r26511, MPFR_RNDN);
        return mpfr_get_d(r26512, MPFR_RNDN);
}

static mpfr_t r26513, r26514, r26515, r26516, r26517, r26518, r26519, r26520;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(912);
        mpfr_init(r26513);
        mpfr_init_set_str(r26514, "2", 10, MPFR_RNDN);
        mpfr_init(r26515);
        mpfr_init(r26516);
        mpfr_init(r26517);
        mpfr_init(r26518);
        mpfr_init(r26519);
        mpfr_init(r26520);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r26513, wj, MPFR_RNDN);
        ;
        mpfr_pow(r26515, r26513, r26514, MPFR_RNDN);
        mpfr_set_d(r26516, x, MPFR_RNDN);
        mpfr_add(r26517, r26515, r26516, MPFR_RNDN);
        mpfr_mul(r26518, r26513, r26516, MPFR_RNDN);
        mpfr_mul(r26519, r26514, r26518, MPFR_RNDN);
        mpfr_sub(r26520, r26517, r26519, MPFR_RNDN);
        return mpfr_get_d(r26520, MPFR_RNDN);
}

