#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 r48606 = wj;
        float r48607 = exp(r48606);
        float r48608 = r48606 * r48607;
        float r48609 = x;
        float r48610 = r48608 - r48609;
        float r48611 = r48607 + r48608;
        float r48612 = r48610 / r48611;
        float r48613 = r48606 - r48612;
        return r48613;
}

double f_id(double wj, double x) {
        double r48614 = wj;
        double r48615 = exp(r48614);
        double r48616 = r48614 * r48615;
        double r48617 = x;
        double r48618 = r48616 - r48617;
        double r48619 = r48615 + r48616;
        double r48620 = r48618 / r48619;
        double r48621 = r48614 - r48620;
        return r48621;
}


double f_of(float wj, float x) {
        float r48622 = x;
        float r48623 = 1;
        float r48624 = wj;
        float r48625 = r48623 + r48624;
        float r48626 = exp(r48624);
        float r48627 = r48625 * r48626;
        float r48628 = r48622 / r48627;
        float r48629 = r48624 * r48624;
        float r48630 = 4;
        float r48631 = pow(r48624, r48630);
        float r48632 = 3;
        float r48633 = pow(r48624, r48632);
        float r48634 = r48631 - r48633;
        float r48635 = r48629 + r48634;
        float r48636 = r48628 + r48635;
        return r48636;
}

double f_od(double wj, double x) {
        double r48637 = x;
        double r48638 = 1;
        double r48639 = wj;
        double r48640 = r48638 + r48639;
        double r48641 = exp(r48639);
        double r48642 = r48640 * r48641;
        double r48643 = r48637 / r48642;
        double r48644 = r48639 * r48639;
        double r48645 = 4;
        double r48646 = pow(r48639, r48645);
        double r48647 = 3;
        double r48648 = pow(r48639, r48647);
        double r48649 = r48646 - r48648;
        double r48650 = r48644 + r48649;
        double r48651 = r48643 + r48650;
        return r48651;
}

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 r48652, r48653, r48654, r48655, r48656, r48657, r48658, r48659;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(912);
        mpfr_init(r48652);
        mpfr_init(r48653);
        mpfr_init(r48654);
        mpfr_init(r48655);
        mpfr_init(r48656);
        mpfr_init(r48657);
        mpfr_init(r48658);
        mpfr_init(r48659);
}

double f_im(double wj, double x) {
        mpfr_set_d(r48652, wj, MPFR_RNDN);
        mpfr_exp(r48653, r48652, MPFR_RNDN);
        mpfr_mul(r48654, r48652, r48653, MPFR_RNDN);
        mpfr_set_d(r48655, x, MPFR_RNDN);
        mpfr_sub(r48656, r48654, r48655, MPFR_RNDN);
        mpfr_add(r48657, r48653, r48654, MPFR_RNDN);
        mpfr_div(r48658, r48656, r48657, MPFR_RNDN);
        mpfr_sub(r48659, r48652, r48658, MPFR_RNDN);
        return mpfr_get_d(r48659, MPFR_RNDN);
}

static mpfr_t r48660, r48661, r48662, r48663, r48664, r48665, r48666, r48667, r48668, r48669, r48670, r48671, r48672, r48673, r48674;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(912);
        mpfr_init(r48660);
        mpfr_init_set_str(r48661, "1", 10, MPFR_RNDN);
        mpfr_init(r48662);
        mpfr_init(r48663);
        mpfr_init(r48664);
        mpfr_init(r48665);
        mpfr_init(r48666);
        mpfr_init(r48667);
        mpfr_init_set_str(r48668, "4", 10, MPFR_RNDN);
        mpfr_init(r48669);
        mpfr_init_set_str(r48670, "3", 10, MPFR_RNDN);
        mpfr_init(r48671);
        mpfr_init(r48672);
        mpfr_init(r48673);
        mpfr_init(r48674);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r48660, x, MPFR_RNDN);
        ;
        mpfr_set_d(r48662, wj, MPFR_RNDN);
        mpfr_add(r48663, r48661, r48662, MPFR_RNDN);
        mpfr_exp(r48664, r48662, MPFR_RNDN);
        mpfr_mul(r48665, r48663, r48664, MPFR_RNDN);
        mpfr_div(r48666, r48660, r48665, MPFR_RNDN);
        mpfr_mul(r48667, r48662, r48662, MPFR_RNDN);
        ;
        mpfr_pow(r48669, r48662, r48668, MPFR_RNDN);
        ;
        mpfr_pow(r48671, r48662, r48670, MPFR_RNDN);
        mpfr_sub(r48672, r48669, r48671, MPFR_RNDN);
        mpfr_add(r48673, r48667, r48672, MPFR_RNDN);
        mpfr_add(r48674, r48666, r48673, MPFR_RNDN);
        return mpfr_get_d(r48674, MPFR_RNDN);
}

static mpfr_t r48675, r48676, r48677, r48678, r48679, r48680, r48681, r48682, r48683, r48684, r48685, r48686, r48687, r48688, r48689;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(912);
        mpfr_init(r48675);
        mpfr_init_set_str(r48676, "1", 10, MPFR_RNDN);
        mpfr_init(r48677);
        mpfr_init(r48678);
        mpfr_init(r48679);
        mpfr_init(r48680);
        mpfr_init(r48681);
        mpfr_init(r48682);
        mpfr_init_set_str(r48683, "4", 10, MPFR_RNDN);
        mpfr_init(r48684);
        mpfr_init_set_str(r48685, "3", 10, MPFR_RNDN);
        mpfr_init(r48686);
        mpfr_init(r48687);
        mpfr_init(r48688);
        mpfr_init(r48689);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r48675, x, MPFR_RNDN);
        ;
        mpfr_set_d(r48677, wj, MPFR_RNDN);
        mpfr_add(r48678, r48676, r48677, MPFR_RNDN);
        mpfr_exp(r48679, r48677, MPFR_RNDN);
        mpfr_mul(r48680, r48678, r48679, MPFR_RNDN);
        mpfr_div(r48681, r48675, r48680, MPFR_RNDN);
        mpfr_mul(r48682, r48677, r48677, MPFR_RNDN);
        ;
        mpfr_pow(r48684, r48677, r48683, MPFR_RNDN);
        ;
        mpfr_pow(r48686, r48677, r48685, MPFR_RNDN);
        mpfr_sub(r48687, r48684, r48686, MPFR_RNDN);
        mpfr_add(r48688, r48682, r48687, MPFR_RNDN);
        mpfr_add(r48689, r48681, r48688, MPFR_RNDN);
        return mpfr_get_d(r48689, MPFR_RNDN);
}

