#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 r11537 = wj;
        float r11538 = exp(r11537);
        float r11539 = r11537 * r11538;
        float r11540 = x;
        float r11541 = r11539 - r11540;
        float r11542 = r11538 + r11539;
        float r11543 = r11541 / r11542;
        float r11544 = r11537 - r11543;
        return r11544;
}

double f_id(double wj, double x) {
        double r11545 = wj;
        double r11546 = exp(r11545);
        double r11547 = r11545 * r11546;
        double r11548 = x;
        double r11549 = r11547 - r11548;
        double r11550 = r11546 + r11547;
        double r11551 = r11549 / r11550;
        double r11552 = r11545 - r11551;
        return r11552;
}


double f_of(float wj, float x) {
        float r11553 = 1.0f;
        float r11554 = wj;
        float r11555 = r11553 + r11554;
        float r11556 = r11553 / r11555;
        float r11557 = x;
        float r11558 = exp(r11554);
        float r11559 = r11557 / r11558;
        float r11560 = r11556 * r11559;
        float r11561 = 2.0f;
        float r11562 = pow(r11554, r11561);
        float r11563 = 4.0f;
        float r11564 = pow(r11554, r11563);
        float r11565 = r11562 + r11564;
        float r11566 = 3.0f;
        float r11567 = pow(r11554, r11566);
        float r11568 = r11565 - r11567;
        float r11569 = r11560 + r11568;
        return r11569;
}

double f_od(double wj, double x) {
        double r11570 = 1.0;
        double r11571 = wj;
        double r11572 = r11570 + r11571;
        double r11573 = r11570 / r11572;
        double r11574 = x;
        double r11575 = exp(r11571);
        double r11576 = r11574 / r11575;
        double r11577 = r11573 * r11576;
        double r11578 = 2.0;
        double r11579 = pow(r11571, r11578);
        double r11580 = 4.0;
        double r11581 = pow(r11571, r11580);
        double r11582 = r11579 + r11581;
        double r11583 = 3.0;
        double r11584 = pow(r11571, r11583);
        double r11585 = r11582 - r11584;
        double r11586 = r11577 + r11585;
        return r11586;
}

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 r11587, r11588, r11589, r11590, r11591, r11592, r11593, r11594;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r11587);
        mpfr_init(r11588);
        mpfr_init(r11589);
        mpfr_init(r11590);
        mpfr_init(r11591);
        mpfr_init(r11592);
        mpfr_init(r11593);
        mpfr_init(r11594);
}

double f_im(double wj, double x) {
        mpfr_set_d(r11587, wj, MPFR_RNDN);
        mpfr_exp(r11588, r11587, MPFR_RNDN);
        mpfr_mul(r11589, r11587, r11588, MPFR_RNDN);
        mpfr_set_d(r11590, x, MPFR_RNDN);
        mpfr_sub(r11591, r11589, r11590, MPFR_RNDN);
        mpfr_add(r11592, r11588, r11589, MPFR_RNDN);
        mpfr_div(r11593, r11591, r11592, MPFR_RNDN);
        mpfr_sub(r11594, r11587, r11593, MPFR_RNDN);
        return mpfr_get_d(r11594, MPFR_RNDN);
}

static mpfr_t r11595, r11596, r11597, r11598, r11599, r11600, r11601, r11602, r11603, r11604, r11605, r11606, r11607, r11608, r11609, r11610, r11611;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r11595, "1", 10, MPFR_RNDN);
        mpfr_init(r11596);
        mpfr_init(r11597);
        mpfr_init(r11598);
        mpfr_init(r11599);
        mpfr_init(r11600);
        mpfr_init(r11601);
        mpfr_init(r11602);
        mpfr_init_set_str(r11603, "2", 10, MPFR_RNDN);
        mpfr_init(r11604);
        mpfr_init_set_str(r11605, "4", 10, MPFR_RNDN);
        mpfr_init(r11606);
        mpfr_init(r11607);
        mpfr_init_set_str(r11608, "3", 10, MPFR_RNDN);
        mpfr_init(r11609);
        mpfr_init(r11610);
        mpfr_init(r11611);
}

double f_fm(double wj, double x) {
        ;
        mpfr_set_d(r11596, wj, MPFR_RNDN);
        mpfr_add(r11597, r11595, r11596, MPFR_RNDN);
        mpfr_div(r11598, r11595, r11597, MPFR_RNDN);
        mpfr_set_d(r11599, x, MPFR_RNDN);
        mpfr_exp(r11600, r11596, MPFR_RNDN);
        mpfr_div(r11601, r11599, r11600, MPFR_RNDN);
        mpfr_mul(r11602, r11598, r11601, MPFR_RNDN);
        ;
        mpfr_pow(r11604, r11596, r11603, MPFR_RNDN);
        ;
        mpfr_pow(r11606, r11596, r11605, MPFR_RNDN);
        mpfr_add(r11607, r11604, r11606, MPFR_RNDN);
        ;
        mpfr_pow(r11609, r11596, r11608, MPFR_RNDN);
        mpfr_sub(r11610, r11607, r11609, MPFR_RNDN);
        mpfr_add(r11611, r11602, r11610, MPFR_RNDN);
        return mpfr_get_d(r11611, MPFR_RNDN);
}

static mpfr_t r11612, r11613, r11614, r11615, r11616, r11617, r11618, r11619, r11620, r11621, r11622, r11623, r11624, r11625, r11626, r11627, r11628;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r11612, "1", 10, MPFR_RNDN);
        mpfr_init(r11613);
        mpfr_init(r11614);
        mpfr_init(r11615);
        mpfr_init(r11616);
        mpfr_init(r11617);
        mpfr_init(r11618);
        mpfr_init(r11619);
        mpfr_init_set_str(r11620, "2", 10, MPFR_RNDN);
        mpfr_init(r11621);
        mpfr_init_set_str(r11622, "4", 10, MPFR_RNDN);
        mpfr_init(r11623);
        mpfr_init(r11624);
        mpfr_init_set_str(r11625, "3", 10, MPFR_RNDN);
        mpfr_init(r11626);
        mpfr_init(r11627);
        mpfr_init(r11628);
}

double f_dm(double wj, double x) {
        ;
        mpfr_set_d(r11613, wj, MPFR_RNDN);
        mpfr_add(r11614, r11612, r11613, MPFR_RNDN);
        mpfr_div(r11615, r11612, r11614, MPFR_RNDN);
        mpfr_set_d(r11616, x, MPFR_RNDN);
        mpfr_exp(r11617, r11613, MPFR_RNDN);
        mpfr_div(r11618, r11616, r11617, MPFR_RNDN);
        mpfr_mul(r11619, r11615, r11618, MPFR_RNDN);
        ;
        mpfr_pow(r11621, r11613, r11620, MPFR_RNDN);
        ;
        mpfr_pow(r11623, r11613, r11622, MPFR_RNDN);
        mpfr_add(r11624, r11621, r11623, MPFR_RNDN);
        ;
        mpfr_pow(r11626, r11613, r11625, MPFR_RNDN);
        mpfr_sub(r11627, r11624, r11626, MPFR_RNDN);
        mpfr_add(r11628, r11619, r11627, MPFR_RNDN);
        return mpfr_get_d(r11628, MPFR_RNDN);
}

