#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 r11629 = wj;
        float r11630 = exp(r11629);
        float r11631 = r11629 * r11630;
        float r11632 = x;
        float r11633 = r11631 - r11632;
        float r11634 = r11630 + r11631;
        float r11635 = r11633 / r11634;
        float r11636 = r11629 - r11635;
        return r11636;
}

double f_id(double wj, double x) {
        double r11637 = wj;
        double r11638 = exp(r11637);
        double r11639 = r11637 * r11638;
        double r11640 = x;
        double r11641 = r11639 - r11640;
        double r11642 = r11638 + r11639;
        double r11643 = r11641 / r11642;
        double r11644 = r11637 - r11643;
        return r11644;
}


double f_of(float wj, float x) {
        float r11645 = wj;
        float r11646 = -6.650866495614256e-16;
        bool r11647 = r11645 <= r11646;
        float r11648 = 1.6822743286041894e-19;
        bool r11649 = r11645 <= r11648;
        float r11650 = !r11649;
        bool r11651 = r11647 || r11650;
        float r11652 = exp(r11645);
        float r11653 = r11652 * r11645;
        float r11654 = x;
        float r11655 = r11653 - r11654;
        float r11656 = r11652 + r11653;
        float r11657 = r11655 / r11656;
        float r11658 = r11645 - r11657;
        float r11659 = r11645 * r11645;
        float r11660 = r11654 + r11659;
        float r11661 = r11651 ? r11658 : r11660;
        return r11661;
}

double f_od(double wj, double x) {
        double r11662 = wj;
        double r11663 = -6.650866495614256e-16;
        bool r11664 = r11662 <= r11663;
        double r11665 = 1.6822743286041894e-19;
        bool r11666 = r11662 <= r11665;
        double r11667 = !r11666;
        bool r11668 = r11664 || r11667;
        double r11669 = exp(r11662);
        double r11670 = r11669 * r11662;
        double r11671 = x;
        double r11672 = r11670 - r11671;
        double r11673 = r11669 + r11670;
        double r11674 = r11672 / r11673;
        double r11675 = r11662 - r11674;
        double r11676 = r11662 * r11662;
        double r11677 = r11671 + r11676;
        double r11678 = r11668 ? r11675 : r11677;
        return r11678;
}

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 r11679, r11680, r11681, r11682, r11683, r11684, r11685, r11686;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r11679);
        mpfr_init(r11680);
        mpfr_init(r11681);
        mpfr_init(r11682);
        mpfr_init(r11683);
        mpfr_init(r11684);
        mpfr_init(r11685);
        mpfr_init(r11686);
}

double f_im(double wj, double x) {
        mpfr_set_d(r11679, wj, MPFR_RNDN);
        mpfr_exp(r11680, r11679, MPFR_RNDN);
        mpfr_mul(r11681, r11679, r11680, MPFR_RNDN);
        mpfr_set_d(r11682, x, MPFR_RNDN);
        mpfr_sub(r11683, r11681, r11682, MPFR_RNDN);
        mpfr_add(r11684, r11680, r11681, MPFR_RNDN);
        mpfr_div(r11685, r11683, r11684, MPFR_RNDN);
        mpfr_sub(r11686, r11679, r11685, MPFR_RNDN);
        return mpfr_get_d(r11686, MPFR_RNDN);
}

static mpfr_t r11687, r11688, r11689, r11690, r11691, r11692, r11693, r11694, r11695, r11696, r11697, r11698, r11699, r11700, r11701, r11702, r11703;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init(r11687);
        mpfr_init_set_str(r11688, "-6.650866495614256e-16", 10, MPFR_RNDN);
        mpfr_init(r11689);
        mpfr_init_set_str(r11690, "1.6822743286041894e-19", 10, MPFR_RNDN);
        mpfr_init(r11691);
        mpfr_init(r11692);
        mpfr_init(r11693);
        mpfr_init(r11694);
        mpfr_init(r11695);
        mpfr_init(r11696);
        mpfr_init(r11697);
        mpfr_init(r11698);
        mpfr_init(r11699);
        mpfr_init(r11700);
        mpfr_init(r11701);
        mpfr_init(r11702);
        mpfr_init(r11703);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r11687, wj, MPFR_RNDN);
        ;
        mpfr_set_si(r11689, mpfr_cmp(r11687, r11688) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r11691, mpfr_cmp(r11687, r11690) <= 0, MPFR_RNDN);
        mpfr_set_si(r11692, !mpfr_get_si(r11691, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_si(r11693, mpfr_get_si(r11689, MPFR_RNDN) || mpfr_get_si(r11692, MPFR_RNDN), MPFR_RNDN);
        mpfr_exp(r11694, r11687, MPFR_RNDN);
        mpfr_mul(r11695, r11694, r11687, MPFR_RNDN);
        mpfr_set_d(r11696, x, MPFR_RNDN);
        mpfr_sub(r11697, r11695, r11696, MPFR_RNDN);
        mpfr_add(r11698, r11694, r11695, MPFR_RNDN);
        mpfr_div(r11699, r11697, r11698, MPFR_RNDN);
        mpfr_sub(r11700, r11687, r11699, MPFR_RNDN);
        mpfr_mul(r11701, r11687, r11687, MPFR_RNDN);
        mpfr_add(r11702, r11696, r11701, MPFR_RNDN);
        if (mpfr_get_si(r11693, MPFR_RNDN)) { mpfr_set(r11703, r11700, MPFR_RNDN); } else { mpfr_set(r11703, r11702, MPFR_RNDN); };
        return mpfr_get_d(r11703, MPFR_RNDN);
}

static mpfr_t r11704, r11705, r11706, r11707, r11708, r11709, r11710, r11711, r11712, r11713, r11714, r11715, r11716, r11717, r11718, r11719, r11720;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init(r11704);
        mpfr_init_set_str(r11705, "-6.650866495614256e-16", 10, MPFR_RNDN);
        mpfr_init(r11706);
        mpfr_init_set_str(r11707, "1.6822743286041894e-19", 10, MPFR_RNDN);
        mpfr_init(r11708);
        mpfr_init(r11709);
        mpfr_init(r11710);
        mpfr_init(r11711);
        mpfr_init(r11712);
        mpfr_init(r11713);
        mpfr_init(r11714);
        mpfr_init(r11715);
        mpfr_init(r11716);
        mpfr_init(r11717);
        mpfr_init(r11718);
        mpfr_init(r11719);
        mpfr_init(r11720);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r11704, wj, MPFR_RNDN);
        ;
        mpfr_set_si(r11706, mpfr_cmp(r11704, r11705) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r11708, mpfr_cmp(r11704, r11707) <= 0, MPFR_RNDN);
        mpfr_set_si(r11709, !mpfr_get_si(r11708, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_si(r11710, mpfr_get_si(r11706, MPFR_RNDN) || mpfr_get_si(r11709, MPFR_RNDN), MPFR_RNDN);
        mpfr_exp(r11711, r11704, MPFR_RNDN);
        mpfr_mul(r11712, r11711, r11704, MPFR_RNDN);
        mpfr_set_d(r11713, x, MPFR_RNDN);
        mpfr_sub(r11714, r11712, r11713, MPFR_RNDN);
        mpfr_add(r11715, r11711, r11712, MPFR_RNDN);
        mpfr_div(r11716, r11714, r11715, MPFR_RNDN);
        mpfr_sub(r11717, r11704, r11716, MPFR_RNDN);
        mpfr_mul(r11718, r11704, r11704, MPFR_RNDN);
        mpfr_add(r11719, r11713, r11718, MPFR_RNDN);
        if (mpfr_get_si(r11710, MPFR_RNDN)) { mpfr_set(r11720, r11717, MPFR_RNDN); } else { mpfr_set(r11720, r11719, MPFR_RNDN); };
        return mpfr_get_d(r11720, MPFR_RNDN);
}

