#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 r12292 = wj;
        float r12293 = exp(r12292);
        float r12294 = r12292 * r12293;
        float r12295 = x;
        float r12296 = r12294 - r12295;
        float r12297 = r12293 + r12294;
        float r12298 = r12296 / r12297;
        float r12299 = r12292 - r12298;
        return r12299;
}

double f_id(double wj, double x) {
        double r12300 = wj;
        double r12301 = exp(r12300);
        double r12302 = r12300 * r12301;
        double r12303 = x;
        double r12304 = r12302 - r12303;
        double r12305 = r12301 + r12302;
        double r12306 = r12304 / r12305;
        double r12307 = r12300 - r12306;
        return r12307;
}


double f_of(float wj, float x) {
        float r12308 = x;
        float r12309 = wj;
        float r12310 = exp(r12309);
        float r12311 = fma(r12310, r12309, r12310);
        float r12312 = r12308 / r12311;
        float r12313 = 1;
        float r12314 = r12313 - r12309;
        float r12315 = r12309 * r12309;
        float r12316 = 4;
        float r12317 = pow(r12309, r12316);
        float r12318 = fma(r12314, r12315, r12317);
        float r12319 = r12312 + r12318;
        return r12319;
}

double f_od(double wj, double x) {
        double r12320 = x;
        double r12321 = wj;
        double r12322 = exp(r12321);
        double r12323 = fma(r12322, r12321, r12322);
        double r12324 = r12320 / r12323;
        double r12325 = 1;
        double r12326 = r12325 - r12321;
        double r12327 = r12321 * r12321;
        double r12328 = 4;
        double r12329 = pow(r12321, r12328);
        double r12330 = fma(r12326, r12327, r12329);
        double r12331 = r12324 + r12330;
        return r12331;
}

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 r12332, r12333, r12334, r12335, r12336, r12337, r12338, r12339;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r12332);
        mpfr_init(r12333);
        mpfr_init(r12334);
        mpfr_init(r12335);
        mpfr_init(r12336);
        mpfr_init(r12337);
        mpfr_init(r12338);
        mpfr_init(r12339);
}

double f_im(double wj, double x) {
        mpfr_set_d(r12332, wj, MPFR_RNDN);
        mpfr_exp(r12333, r12332, MPFR_RNDN);
        mpfr_mul(r12334, r12332, r12333, MPFR_RNDN);
        mpfr_set_d(r12335, x, MPFR_RNDN);
        mpfr_sub(r12336, r12334, r12335, MPFR_RNDN);
        mpfr_add(r12337, r12333, r12334, MPFR_RNDN);
        mpfr_div(r12338, r12336, r12337, MPFR_RNDN);
        mpfr_sub(r12339, r12332, r12338, MPFR_RNDN);
        return mpfr_get_d(r12339, MPFR_RNDN);
}

static mpfr_t r12340, r12341, r12342, r12343, r12344, r12345, r12346, r12347, r12348, r12349, r12350, r12351;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init(r12340);
        mpfr_init(r12341);
        mpfr_init(r12342);
        mpfr_init(r12343);
        mpfr_init(r12344);
        mpfr_init_set_str(r12345, "1", 10, MPFR_RNDN);
        mpfr_init(r12346);
        mpfr_init(r12347);
        mpfr_init_set_str(r12348, "4", 10, MPFR_RNDN);
        mpfr_init(r12349);
        mpfr_init(r12350);
        mpfr_init(r12351);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r12340, x, MPFR_RNDN);
        mpfr_set_d(r12341, wj, MPFR_RNDN);
        mpfr_exp(r12342, r12341, MPFR_RNDN);
        mpfr_fma(r12343, r12342, r12341, r12342, MPFR_RNDN);
        mpfr_div(r12344, r12340, r12343, MPFR_RNDN);
        ;
        mpfr_sub(r12346, r12345, r12341, MPFR_RNDN);
        mpfr_mul(r12347, r12341, r12341, MPFR_RNDN);
        ;
        mpfr_pow(r12349, r12341, r12348, MPFR_RNDN);
        mpfr_fma(r12350, r12346, r12347, r12349, MPFR_RNDN);
        mpfr_add(r12351, r12344, r12350, MPFR_RNDN);
        return mpfr_get_d(r12351, MPFR_RNDN);
}

static mpfr_t r12352, r12353, r12354, r12355, r12356, r12357, r12358, r12359, r12360, r12361, r12362, r12363;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init(r12352);
        mpfr_init(r12353);
        mpfr_init(r12354);
        mpfr_init(r12355);
        mpfr_init(r12356);
        mpfr_init_set_str(r12357, "1", 10, MPFR_RNDN);
        mpfr_init(r12358);
        mpfr_init(r12359);
        mpfr_init_set_str(r12360, "4", 10, MPFR_RNDN);
        mpfr_init(r12361);
        mpfr_init(r12362);
        mpfr_init(r12363);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r12352, x, MPFR_RNDN);
        mpfr_set_d(r12353, wj, MPFR_RNDN);
        mpfr_exp(r12354, r12353, MPFR_RNDN);
        mpfr_fma(r12355, r12354, r12353, r12354, MPFR_RNDN);
        mpfr_div(r12356, r12352, r12355, MPFR_RNDN);
        ;
        mpfr_sub(r12358, r12357, r12353, MPFR_RNDN);
        mpfr_mul(r12359, r12353, r12353, MPFR_RNDN);
        ;
        mpfr_pow(r12361, r12353, r12360, MPFR_RNDN);
        mpfr_fma(r12362, r12358, r12359, r12361, MPFR_RNDN);
        mpfr_add(r12363, r12356, r12362, MPFR_RNDN);
        return mpfr_get_d(r12363, MPFR_RNDN);
}

