#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 r28807 = wj;
        float r28808 = exp(r28807);
        float r28809 = r28807 * r28808;
        float r28810 = x;
        float r28811 = r28809 - r28810;
        float r28812 = r28808 + r28809;
        float r28813 = r28811 / r28812;
        float r28814 = r28807 - r28813;
        return r28814;
}

double f_id(double wj, double x) {
        double r28815 = wj;
        double r28816 = exp(r28815);
        double r28817 = r28815 * r28816;
        double r28818 = x;
        double r28819 = r28817 - r28818;
        double r28820 = r28816 + r28817;
        double r28821 = r28819 / r28820;
        double r28822 = r28815 - r28821;
        return r28822;
}


double f_of(float wj, float x) {
        float r28823 = x;
        float r28824 = wj;
        float r28825 = exp(r28824);
        float r28826 = r28823 / r28825;
        float r28827 = 1;
        float r28828 = r28827 + r28824;
        float r28829 = r28826 / r28828;
        float r28830 = 4;
        float r28831 = pow(r28824, r28830);
        float r28832 = r28827 - r28824;
        float r28833 = r28824 * r28824;
        float r28834 = r28832 * r28833;
        float r28835 = r28831 + r28834;
        float r28836 = r28829 + r28835;
        return r28836;
}

double f_od(double wj, double x) {
        double r28837 = x;
        double r28838 = wj;
        double r28839 = exp(r28838);
        double r28840 = r28837 / r28839;
        double r28841 = 1;
        double r28842 = r28841 + r28838;
        double r28843 = r28840 / r28842;
        double r28844 = 4;
        double r28845 = pow(r28838, r28844);
        double r28846 = r28841 - r28838;
        double r28847 = r28838 * r28838;
        double r28848 = r28846 * r28847;
        double r28849 = r28845 + r28848;
        double r28850 = r28843 + r28849;
        return r28850;
}

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 r28851, r28852, r28853, r28854, r28855, r28856, r28857, r28858;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r28851);
        mpfr_init(r28852);
        mpfr_init(r28853);
        mpfr_init(r28854);
        mpfr_init(r28855);
        mpfr_init(r28856);
        mpfr_init(r28857);
        mpfr_init(r28858);
}

double f_im(double wj, double x) {
        mpfr_set_d(r28851, wj, MPFR_RNDN);
        mpfr_exp(r28852, r28851, MPFR_RNDN);
        mpfr_mul(r28853, r28851, r28852, MPFR_RNDN);
        mpfr_set_d(r28854, x, MPFR_RNDN);
        mpfr_sub(r28855, r28853, r28854, MPFR_RNDN);
        mpfr_add(r28856, r28852, r28853, MPFR_RNDN);
        mpfr_div(r28857, r28855, r28856, MPFR_RNDN);
        mpfr_sub(r28858, r28851, r28857, MPFR_RNDN);
        return mpfr_get_d(r28858, MPFR_RNDN);
}

static mpfr_t r28859, r28860, r28861, r28862, r28863, r28864, r28865, r28866, r28867, r28868, r28869, r28870, r28871, r28872;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init(r28859);
        mpfr_init(r28860);
        mpfr_init(r28861);
        mpfr_init(r28862);
        mpfr_init_set_str(r28863, "1", 10, MPFR_RNDN);
        mpfr_init(r28864);
        mpfr_init(r28865);
        mpfr_init_set_str(r28866, "4", 10, MPFR_RNDN);
        mpfr_init(r28867);
        mpfr_init(r28868);
        mpfr_init(r28869);
        mpfr_init(r28870);
        mpfr_init(r28871);
        mpfr_init(r28872);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r28859, x, MPFR_RNDN);
        mpfr_set_d(r28860, wj, MPFR_RNDN);
        mpfr_exp(r28861, r28860, MPFR_RNDN);
        mpfr_div(r28862, r28859, r28861, MPFR_RNDN);
        ;
        mpfr_add(r28864, r28863, r28860, MPFR_RNDN);
        mpfr_div(r28865, r28862, r28864, MPFR_RNDN);
        ;
        mpfr_pow(r28867, r28860, r28866, MPFR_RNDN);
        mpfr_sub(r28868, r28863, r28860, MPFR_RNDN);
        mpfr_mul(r28869, r28860, r28860, MPFR_RNDN);
        mpfr_mul(r28870, r28868, r28869, MPFR_RNDN);
        mpfr_add(r28871, r28867, r28870, MPFR_RNDN);
        mpfr_add(r28872, r28865, r28871, MPFR_RNDN);
        return mpfr_get_d(r28872, MPFR_RNDN);
}

static mpfr_t r28873, r28874, r28875, r28876, r28877, r28878, r28879, r28880, r28881, r28882, r28883, r28884, r28885, r28886;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init(r28873);
        mpfr_init(r28874);
        mpfr_init(r28875);
        mpfr_init(r28876);
        mpfr_init_set_str(r28877, "1", 10, MPFR_RNDN);
        mpfr_init(r28878);
        mpfr_init(r28879);
        mpfr_init_set_str(r28880, "4", 10, MPFR_RNDN);
        mpfr_init(r28881);
        mpfr_init(r28882);
        mpfr_init(r28883);
        mpfr_init(r28884);
        mpfr_init(r28885);
        mpfr_init(r28886);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r28873, x, MPFR_RNDN);
        mpfr_set_d(r28874, wj, MPFR_RNDN);
        mpfr_exp(r28875, r28874, MPFR_RNDN);
        mpfr_div(r28876, r28873, r28875, MPFR_RNDN);
        ;
        mpfr_add(r28878, r28877, r28874, MPFR_RNDN);
        mpfr_div(r28879, r28876, r28878, MPFR_RNDN);
        ;
        mpfr_pow(r28881, r28874, r28880, MPFR_RNDN);
        mpfr_sub(r28882, r28877, r28874, MPFR_RNDN);
        mpfr_mul(r28883, r28874, r28874, MPFR_RNDN);
        mpfr_mul(r28884, r28882, r28883, MPFR_RNDN);
        mpfr_add(r28885, r28881, r28884, MPFR_RNDN);
        mpfr_add(r28886, r28879, r28885, MPFR_RNDN);
        return mpfr_get_d(r28886, MPFR_RNDN);
}

