#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 r11527 = wj;
        float r11528 = exp(r11527);
        float r11529 = r11527 * r11528;
        float r11530 = x;
        float r11531 = r11529 - r11530;
        float r11532 = r11528 + r11529;
        float r11533 = r11531 / r11532;
        float r11534 = r11527 - r11533;
        return r11534;
}

double f_id(double wj, double x) {
        double r11535 = wj;
        double r11536 = exp(r11535);
        double r11537 = r11535 * r11536;
        double r11538 = x;
        double r11539 = r11537 - r11538;
        double r11540 = r11536 + r11537;
        double r11541 = r11539 / r11540;
        double r11542 = r11535 - r11541;
        return r11542;
}


double f_of(float wj, float x) {
        float r11543 = wj;
        float r11544 = 8.751009037159586e-09f;
        bool r11545 = r11543 <= r11544;
        float r11546 = 2.0f;
        float r11547 = -r11546;
        float r11548 = x;
        float r11549 = r11548 * r11543;
        float r11550 = fma(r11543, r11543, r11548);
        float r11551 = fma(r11547, r11549, r11550);
        float r11552 = 1.0f;
        float r11553 = r11543 + r11552;
        float r11554 = r11543 / r11553;
        float r11555 = exp(r11543);
        float r11556 = r11555 * r11543;
        float r11557 = r11555 + r11556;
        float r11558 = r11548 / r11557;
        float r11559 = r11554 - r11558;
        float r11560 = r11543 - r11559;
        float r11561 = r11545 ? r11551 : r11560;
        return r11561;
}

double f_od(double wj, double x) {
        double r11562 = wj;
        double r11563 = 8.751009037159586e-09;
        bool r11564 = r11562 <= r11563;
        double r11565 = 2.0;
        double r11566 = -r11565;
        double r11567 = x;
        double r11568 = r11567 * r11562;
        double r11569 = fma(r11562, r11562, r11567);
        double r11570 = fma(r11566, r11568, r11569);
        double r11571 = 1.0;
        double r11572 = r11562 + r11571;
        double r11573 = r11562 / r11572;
        double r11574 = exp(r11562);
        double r11575 = r11574 * r11562;
        double r11576 = r11574 + r11575;
        double r11577 = r11567 / r11576;
        double r11578 = r11573 - r11577;
        double r11579 = r11562 - r11578;
        double r11580 = r11564 ? r11570 : r11579;
        return r11580;
}

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 r11581, r11582, r11583, r11584, r11585, r11586, r11587, r11588;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r11581);
        mpfr_init(r11582);
        mpfr_init(r11583);
        mpfr_init(r11584);
        mpfr_init(r11585);
        mpfr_init(r11586);
        mpfr_init(r11587);
        mpfr_init(r11588);
}

double f_im(double wj, double x) {
        mpfr_set_d(r11581, wj, MPFR_RNDN);
        mpfr_exp(r11582, r11581, MPFR_RNDN);
        mpfr_mul(r11583, r11581, r11582, MPFR_RNDN);
        mpfr_set_d(r11584, x, MPFR_RNDN);
        mpfr_sub(r11585, r11583, r11584, MPFR_RNDN);
        mpfr_add(r11586, r11582, r11583, MPFR_RNDN);
        mpfr_div(r11587, r11585, r11586, MPFR_RNDN);
        mpfr_sub(r11588, r11581, r11587, MPFR_RNDN);
        return mpfr_get_d(r11588, MPFR_RNDN);
}

static mpfr_t r11589, r11590, r11591, r11592, r11593, r11594, r11595, r11596, r11597, r11598, r11599, r11600, r11601, r11602, r11603, r11604, r11605, r11606, r11607;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init(r11589);
        mpfr_init_set_str(r11590, "8.751009037159586e-09", 10, MPFR_RNDN);
        mpfr_init(r11591);
        mpfr_init_set_str(r11592, "2", 10, MPFR_RNDN);
        mpfr_init(r11593);
        mpfr_init(r11594);
        mpfr_init(r11595);
        mpfr_init(r11596);
        mpfr_init(r11597);
        mpfr_init_set_str(r11598, "1", 10, MPFR_RNDN);
        mpfr_init(r11599);
        mpfr_init(r11600);
        mpfr_init(r11601);
        mpfr_init(r11602);
        mpfr_init(r11603);
        mpfr_init(r11604);
        mpfr_init(r11605);
        mpfr_init(r11606);
        mpfr_init(r11607);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r11589, wj, MPFR_RNDN);
        ;
        mpfr_set_si(r11591, mpfr_cmp(r11589, r11590) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r11593, r11592, MPFR_RNDN);
        mpfr_set_d(r11594, x, MPFR_RNDN);
        mpfr_mul(r11595, r11594, r11589, MPFR_RNDN);
        mpfr_fma(r11596, r11589, r11589, r11594, MPFR_RNDN);
        mpfr_fma(r11597, r11593, r11595, r11596, MPFR_RNDN);
        ;
        mpfr_add(r11599, r11589, r11598, MPFR_RNDN);
        mpfr_div(r11600, r11589, r11599, MPFR_RNDN);
        mpfr_exp(r11601, r11589, MPFR_RNDN);
        mpfr_mul(r11602, r11601, r11589, MPFR_RNDN);
        mpfr_add(r11603, r11601, r11602, MPFR_RNDN);
        mpfr_div(r11604, r11594, r11603, MPFR_RNDN);
        mpfr_sub(r11605, r11600, r11604, MPFR_RNDN);
        mpfr_sub(r11606, r11589, r11605, MPFR_RNDN);
        if (mpfr_get_si(r11591, MPFR_RNDN)) { mpfr_set(r11607, r11597, MPFR_RNDN); } else { mpfr_set(r11607, r11606, MPFR_RNDN); };
        return mpfr_get_d(r11607, MPFR_RNDN);
}

static mpfr_t r11608, r11609, r11610, r11611, r11612, r11613, r11614, r11615, r11616, r11617, r11618, r11619, r11620, r11621, r11622, r11623, r11624, r11625, r11626;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init(r11608);
        mpfr_init_set_str(r11609, "8.751009037159586e-09", 10, MPFR_RNDN);
        mpfr_init(r11610);
        mpfr_init_set_str(r11611, "2", 10, MPFR_RNDN);
        mpfr_init(r11612);
        mpfr_init(r11613);
        mpfr_init(r11614);
        mpfr_init(r11615);
        mpfr_init(r11616);
        mpfr_init_set_str(r11617, "1", 10, MPFR_RNDN);
        mpfr_init(r11618);
        mpfr_init(r11619);
        mpfr_init(r11620);
        mpfr_init(r11621);
        mpfr_init(r11622);
        mpfr_init(r11623);
        mpfr_init(r11624);
        mpfr_init(r11625);
        mpfr_init(r11626);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r11608, wj, MPFR_RNDN);
        ;
        mpfr_set_si(r11610, mpfr_cmp(r11608, r11609) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r11612, r11611, MPFR_RNDN);
        mpfr_set_d(r11613, x, MPFR_RNDN);
        mpfr_mul(r11614, r11613, r11608, MPFR_RNDN);
        mpfr_fma(r11615, r11608, r11608, r11613, MPFR_RNDN);
        mpfr_fma(r11616, r11612, r11614, r11615, MPFR_RNDN);
        ;
        mpfr_add(r11618, r11608, r11617, MPFR_RNDN);
        mpfr_div(r11619, r11608, r11618, MPFR_RNDN);
        mpfr_exp(r11620, r11608, MPFR_RNDN);
        mpfr_mul(r11621, r11620, r11608, MPFR_RNDN);
        mpfr_add(r11622, r11620, r11621, MPFR_RNDN);
        mpfr_div(r11623, r11613, r11622, MPFR_RNDN);
        mpfr_sub(r11624, r11619, r11623, MPFR_RNDN);
        mpfr_sub(r11625, r11608, r11624, MPFR_RNDN);
        if (mpfr_get_si(r11610, MPFR_RNDN)) { mpfr_set(r11626, r11616, MPFR_RNDN); } else { mpfr_set(r11626, r11625, MPFR_RNDN); };
        return mpfr_get_d(r11626, MPFR_RNDN);
}

