#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 r26613 = wj;
        float r26614 = exp(r26613);
        float r26615 = r26613 * r26614;
        float r26616 = x;
        float r26617 = r26615 - r26616;
        float r26618 = r26614 + r26615;
        float r26619 = r26617 / r26618;
        float r26620 = r26613 - r26619;
        return r26620;
}

double f_id(double wj, double x) {
        double r26621 = wj;
        double r26622 = exp(r26621);
        double r26623 = r26621 * r26622;
        double r26624 = x;
        double r26625 = r26623 - r26624;
        double r26626 = r26622 + r26623;
        double r26627 = r26625 / r26626;
        double r26628 = r26621 - r26627;
        return r26628;
}


double f_of(float wj, float x) {
        float r26629 = wj;
        float r26630 = 2;
        float r26631 = pow(r26629, r26630);
        float r26632 = x;
        float r26633 = r26631 + r26632;
        float r26634 = r26629 * r26632;
        float r26635 = r26630 * r26634;
        float r26636 = r26633 - r26635;
        return r26636;
}

double f_od(double wj, double x) {
        double r26637 = wj;
        double r26638 = 2;
        double r26639 = pow(r26637, r26638);
        double r26640 = x;
        double r26641 = r26639 + r26640;
        double r26642 = r26637 * r26640;
        double r26643 = r26638 * r26642;
        double r26644 = r26641 - r26643;
        return r26644;
}

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 r26645, r26646, r26647, r26648, r26649, r26650, r26651, r26652;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(912);
        mpfr_init(r26645);
        mpfr_init(r26646);
        mpfr_init(r26647);
        mpfr_init(r26648);
        mpfr_init(r26649);
        mpfr_init(r26650);
        mpfr_init(r26651);
        mpfr_init(r26652);
}

double f_im(double wj, double x) {
        mpfr_set_d(r26645, wj, MPFR_RNDN);
        mpfr_exp(r26646, r26645, MPFR_RNDN);
        mpfr_mul(r26647, r26645, r26646, MPFR_RNDN);
        mpfr_set_d(r26648, x, MPFR_RNDN);
        mpfr_sub(r26649, r26647, r26648, MPFR_RNDN);
        mpfr_add(r26650, r26646, r26647, MPFR_RNDN);
        mpfr_div(r26651, r26649, r26650, MPFR_RNDN);
        mpfr_sub(r26652, r26645, r26651, MPFR_RNDN);
        return mpfr_get_d(r26652, MPFR_RNDN);
}

static mpfr_t r26653, r26654, r26655, r26656, r26657, r26658, r26659, r26660;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(912);
        mpfr_init(r26653);
        mpfr_init_set_str(r26654, "2", 10, MPFR_RNDN);
        mpfr_init(r26655);
        mpfr_init(r26656);
        mpfr_init(r26657);
        mpfr_init(r26658);
        mpfr_init(r26659);
        mpfr_init(r26660);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r26653, wj, MPFR_RNDN);
        ;
        mpfr_pow(r26655, r26653, r26654, MPFR_RNDN);
        mpfr_set_d(r26656, x, MPFR_RNDN);
        mpfr_add(r26657, r26655, r26656, MPFR_RNDN);
        mpfr_mul(r26658, r26653, r26656, MPFR_RNDN);
        mpfr_mul(r26659, r26654, r26658, MPFR_RNDN);
        mpfr_sub(r26660, r26657, r26659, MPFR_RNDN);
        return mpfr_get_d(r26660, MPFR_RNDN);
}

static mpfr_t r26661, r26662, r26663, r26664, r26665, r26666, r26667, r26668;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(912);
        mpfr_init(r26661);
        mpfr_init_set_str(r26662, "2", 10, MPFR_RNDN);
        mpfr_init(r26663);
        mpfr_init(r26664);
        mpfr_init(r26665);
        mpfr_init(r26666);
        mpfr_init(r26667);
        mpfr_init(r26668);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r26661, wj, MPFR_RNDN);
        ;
        mpfr_pow(r26663, r26661, r26662, MPFR_RNDN);
        mpfr_set_d(r26664, x, MPFR_RNDN);
        mpfr_add(r26665, r26663, r26664, MPFR_RNDN);
        mpfr_mul(r26666, r26661, r26664, MPFR_RNDN);
        mpfr_mul(r26667, r26662, r26666, MPFR_RNDN);
        mpfr_sub(r26668, r26665, r26667, MPFR_RNDN);
        return mpfr_get_d(r26668, MPFR_RNDN);
}

