#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 r25739 = wj;
        float r25740 = exp(r25739);
        float r25741 = r25739 * r25740;
        float r25742 = x;
        float r25743 = r25741 - r25742;
        float r25744 = r25740 + r25741;
        float r25745 = r25743 / r25744;
        float r25746 = r25739 - r25745;
        return r25746;
}

double f_id(double wj, double x) {
        double r25747 = wj;
        double r25748 = exp(r25747);
        double r25749 = r25747 * r25748;
        double r25750 = x;
        double r25751 = r25749 - r25750;
        double r25752 = r25748 + r25749;
        double r25753 = r25751 / r25752;
        double r25754 = r25747 - r25753;
        return r25754;
}


double f_of(float wj, float x) {
        float r25755 = x;
        float r25756 = wj;
        float r25757 = exp(r25756);
        float r25758 = fma(r25756, r25757, r25757);
        float r25759 = r25755 / r25758;
        float r25760 = r25756 * r25756;
        float r25761 = 1;
        float r25762 = r25761 - r25756;
        float r25763 = 4;
        float r25764 = pow(r25756, r25763);
        float r25765 = fma(r25760, r25762, r25764);
        float r25766 = r25759 + r25765;
        return r25766;
}

double f_od(double wj, double x) {
        double r25767 = x;
        double r25768 = wj;
        double r25769 = exp(r25768);
        double r25770 = fma(r25768, r25769, r25769);
        double r25771 = r25767 / r25770;
        double r25772 = r25768 * r25768;
        double r25773 = 1;
        double r25774 = r25773 - r25768;
        double r25775 = 4;
        double r25776 = pow(r25768, r25775);
        double r25777 = fma(r25772, r25774, r25776);
        double r25778 = r25771 + r25777;
        return r25778;
}

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 r25779, r25780, r25781, r25782, r25783, r25784, r25785, r25786;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r25779);
        mpfr_init(r25780);
        mpfr_init(r25781);
        mpfr_init(r25782);
        mpfr_init(r25783);
        mpfr_init(r25784);
        mpfr_init(r25785);
        mpfr_init(r25786);
}

double f_im(double wj, double x) {
        mpfr_set_d(r25779, wj, MPFR_RNDN);
        mpfr_exp(r25780, r25779, MPFR_RNDN);
        mpfr_mul(r25781, r25779, r25780, MPFR_RNDN);
        mpfr_set_d(r25782, x, MPFR_RNDN);
        mpfr_sub(r25783, r25781, r25782, MPFR_RNDN);
        mpfr_add(r25784, r25780, r25781, MPFR_RNDN);
        mpfr_div(r25785, r25783, r25784, MPFR_RNDN);
        mpfr_sub(r25786, r25779, r25785, MPFR_RNDN);
        return mpfr_get_d(r25786, MPFR_RNDN);
}

static mpfr_t r25787, r25788, r25789, r25790, r25791, r25792, r25793, r25794, r25795, r25796, r25797, r25798;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init(r25787);
        mpfr_init(r25788);
        mpfr_init(r25789);
        mpfr_init(r25790);
        mpfr_init(r25791);
        mpfr_init(r25792);
        mpfr_init_set_str(r25793, "1", 10, MPFR_RNDN);
        mpfr_init(r25794);
        mpfr_init_set_str(r25795, "4", 10, MPFR_RNDN);
        mpfr_init(r25796);
        mpfr_init(r25797);
        mpfr_init(r25798);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r25787, x, MPFR_RNDN);
        mpfr_set_d(r25788, wj, MPFR_RNDN);
        mpfr_exp(r25789, r25788, MPFR_RNDN);
        mpfr_fma(r25790, r25788, r25789, r25789, MPFR_RNDN);
        mpfr_div(r25791, r25787, r25790, MPFR_RNDN);
        mpfr_mul(r25792, r25788, r25788, MPFR_RNDN);
        ;
        mpfr_sub(r25794, r25793, r25788, MPFR_RNDN);
        ;
        mpfr_pow(r25796, r25788, r25795, MPFR_RNDN);
        mpfr_fma(r25797, r25792, r25794, r25796, MPFR_RNDN);
        mpfr_add(r25798, r25791, r25797, MPFR_RNDN);
        return mpfr_get_d(r25798, MPFR_RNDN);
}

static mpfr_t r25799, r25800, r25801, r25802, r25803, r25804, r25805, r25806, r25807, r25808, r25809, r25810;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init(r25799);
        mpfr_init(r25800);
        mpfr_init(r25801);
        mpfr_init(r25802);
        mpfr_init(r25803);
        mpfr_init(r25804);
        mpfr_init_set_str(r25805, "1", 10, MPFR_RNDN);
        mpfr_init(r25806);
        mpfr_init_set_str(r25807, "4", 10, MPFR_RNDN);
        mpfr_init(r25808);
        mpfr_init(r25809);
        mpfr_init(r25810);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r25799, x, MPFR_RNDN);
        mpfr_set_d(r25800, wj, MPFR_RNDN);
        mpfr_exp(r25801, r25800, MPFR_RNDN);
        mpfr_fma(r25802, r25800, r25801, r25801, MPFR_RNDN);
        mpfr_div(r25803, r25799, r25802, MPFR_RNDN);
        mpfr_mul(r25804, r25800, r25800, MPFR_RNDN);
        ;
        mpfr_sub(r25806, r25805, r25800, MPFR_RNDN);
        ;
        mpfr_pow(r25808, r25800, r25807, MPFR_RNDN);
        mpfr_fma(r25809, r25804, r25806, r25808, MPFR_RNDN);
        mpfr_add(r25810, r25803, r25809, MPFR_RNDN);
        return mpfr_get_d(r25810, MPFR_RNDN);
}

