#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 r12791 = wj;
        float r12792 = exp(r12791);
        float r12793 = r12791 * r12792;
        float r12794 = x;
        float r12795 = r12793 - r12794;
        float r12796 = r12792 + r12793;
        float r12797 = r12795 / r12796;
        float r12798 = r12791 - r12797;
        return r12798;
}

double f_id(double wj, double x) {
        double r12799 = wj;
        double r12800 = exp(r12799);
        double r12801 = r12799 * r12800;
        double r12802 = x;
        double r12803 = r12801 - r12802;
        double r12804 = r12800 + r12801;
        double r12805 = r12803 / r12804;
        double r12806 = r12799 - r12805;
        return r12806;
}


double f_of(float wj, float x) {
        float r12807 = x;
        float r12808 = wj;
        float r12809 = exp(r12808);
        float r12810 = r12807 / r12809;
        float r12811 = 1;
        float r12812 = r12811 + r12808;
        float r12813 = r12810 / r12812;
        float r12814 = 4;
        float r12815 = pow(r12808, r12814);
        float r12816 = r12808 * r12808;
        float r12817 = r12811 - r12808;
        float r12818 = sqrt(r12817);
        float r12819 = r12816 * r12818;
        float r12820 = r12819 * r12818;
        float r12821 = r12815 + r12820;
        float r12822 = r12813 + r12821;
        return r12822;
}

double f_od(double wj, double x) {
        double r12823 = x;
        double r12824 = wj;
        double r12825 = exp(r12824);
        double r12826 = r12823 / r12825;
        double r12827 = 1;
        double r12828 = r12827 + r12824;
        double r12829 = r12826 / r12828;
        double r12830 = 4;
        double r12831 = pow(r12824, r12830);
        double r12832 = r12824 * r12824;
        double r12833 = r12827 - r12824;
        double r12834 = sqrt(r12833);
        double r12835 = r12832 * r12834;
        double r12836 = r12835 * r12834;
        double r12837 = r12831 + r12836;
        double r12838 = r12829 + r12837;
        return r12838;
}

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 r12839, r12840, r12841, r12842, r12843, r12844, r12845, r12846;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r12839);
        mpfr_init(r12840);
        mpfr_init(r12841);
        mpfr_init(r12842);
        mpfr_init(r12843);
        mpfr_init(r12844);
        mpfr_init(r12845);
        mpfr_init(r12846);
}

double f_im(double wj, double x) {
        mpfr_set_d(r12839, wj, MPFR_RNDN);
        mpfr_exp(r12840, r12839, MPFR_RNDN);
        mpfr_mul(r12841, r12839, r12840, MPFR_RNDN);
        mpfr_set_d(r12842, x, MPFR_RNDN);
        mpfr_sub(r12843, r12841, r12842, MPFR_RNDN);
        mpfr_add(r12844, r12840, r12841, MPFR_RNDN);
        mpfr_div(r12845, r12843, r12844, MPFR_RNDN);
        mpfr_sub(r12846, r12839, r12845, MPFR_RNDN);
        return mpfr_get_d(r12846, MPFR_RNDN);
}

static mpfr_t r12847, r12848, r12849, r12850, r12851, r12852, r12853, r12854, r12855, r12856, r12857, r12858, r12859, r12860, r12861, r12862;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init(r12847);
        mpfr_init(r12848);
        mpfr_init(r12849);
        mpfr_init(r12850);
        mpfr_init_set_str(r12851, "1", 10, MPFR_RNDN);
        mpfr_init(r12852);
        mpfr_init(r12853);
        mpfr_init_set_str(r12854, "4", 10, MPFR_RNDN);
        mpfr_init(r12855);
        mpfr_init(r12856);
        mpfr_init(r12857);
        mpfr_init(r12858);
        mpfr_init(r12859);
        mpfr_init(r12860);
        mpfr_init(r12861);
        mpfr_init(r12862);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r12847, x, MPFR_RNDN);
        mpfr_set_d(r12848, wj, MPFR_RNDN);
        mpfr_exp(r12849, r12848, MPFR_RNDN);
        mpfr_div(r12850, r12847, r12849, MPFR_RNDN);
        ;
        mpfr_add(r12852, r12851, r12848, MPFR_RNDN);
        mpfr_div(r12853, r12850, r12852, MPFR_RNDN);
        ;
        mpfr_pow(r12855, r12848, r12854, MPFR_RNDN);
        mpfr_mul(r12856, r12848, r12848, MPFR_RNDN);
        mpfr_sub(r12857, r12851, r12848, MPFR_RNDN);
        mpfr_sqrt(r12858, r12857, MPFR_RNDN);
        mpfr_mul(r12859, r12856, r12858, MPFR_RNDN);
        mpfr_mul(r12860, r12859, r12858, MPFR_RNDN);
        mpfr_add(r12861, r12855, r12860, MPFR_RNDN);
        mpfr_add(r12862, r12853, r12861, MPFR_RNDN);
        return mpfr_get_d(r12862, MPFR_RNDN);
}

static mpfr_t r12863, r12864, r12865, r12866, r12867, r12868, r12869, r12870, r12871, r12872, r12873, r12874, r12875, r12876, r12877, r12878;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init(r12863);
        mpfr_init(r12864);
        mpfr_init(r12865);
        mpfr_init(r12866);
        mpfr_init_set_str(r12867, "1", 10, MPFR_RNDN);
        mpfr_init(r12868);
        mpfr_init(r12869);
        mpfr_init_set_str(r12870, "4", 10, MPFR_RNDN);
        mpfr_init(r12871);
        mpfr_init(r12872);
        mpfr_init(r12873);
        mpfr_init(r12874);
        mpfr_init(r12875);
        mpfr_init(r12876);
        mpfr_init(r12877);
        mpfr_init(r12878);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r12863, x, MPFR_RNDN);
        mpfr_set_d(r12864, wj, MPFR_RNDN);
        mpfr_exp(r12865, r12864, MPFR_RNDN);
        mpfr_div(r12866, r12863, r12865, MPFR_RNDN);
        ;
        mpfr_add(r12868, r12867, r12864, MPFR_RNDN);
        mpfr_div(r12869, r12866, r12868, MPFR_RNDN);
        ;
        mpfr_pow(r12871, r12864, r12870, MPFR_RNDN);
        mpfr_mul(r12872, r12864, r12864, MPFR_RNDN);
        mpfr_sub(r12873, r12867, r12864, MPFR_RNDN);
        mpfr_sqrt(r12874, r12873, MPFR_RNDN);
        mpfr_mul(r12875, r12872, r12874, MPFR_RNDN);
        mpfr_mul(r12876, r12875, r12874, MPFR_RNDN);
        mpfr_add(r12877, r12871, r12876, MPFR_RNDN);
        mpfr_add(r12878, r12869, r12877, MPFR_RNDN);
        return mpfr_get_d(r12878, MPFR_RNDN);
}

