#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 r12387 = wj;
        float r12388 = exp(r12387);
        float r12389 = r12387 * r12388;
        float r12390 = x;
        float r12391 = r12389 - r12390;
        float r12392 = r12388 + r12389;
        float r12393 = r12391 / r12392;
        float r12394 = r12387 - r12393;
        return r12394;
}

double f_id(double wj, double x) {
        double r12395 = wj;
        double r12396 = exp(r12395);
        double r12397 = r12395 * r12396;
        double r12398 = x;
        double r12399 = r12397 - r12398;
        double r12400 = r12396 + r12397;
        double r12401 = r12399 / r12400;
        double r12402 = r12395 - r12401;
        return r12402;
}


double f_of(float wj, float x) {
        float r12403 = wj;
        float r12404 = 2.0f;
        float r12405 = pow(r12403, r12404);
        float r12406 = 4.0f;
        float r12407 = pow(r12403, r12406);
        float r12408 = r12405 + r12407;
        float r12409 = 3.0f;
        float r12410 = pow(r12403, r12409);
        float r12411 = r12408 - r12410;
        float r12412 = x;
        float r12413 = exp(r12403);
        float r12414 = r12412 / r12413;
        float r12415 = 1.0f;
        float r12416 = r12415 + r12403;
        float r12417 = r12414 / r12416;
        float r12418 = r12411 + r12417;
        return r12418;
}

double f_od(double wj, double x) {
        double r12419 = wj;
        double r12420 = 2.0;
        double r12421 = pow(r12419, r12420);
        double r12422 = 4.0;
        double r12423 = pow(r12419, r12422);
        double r12424 = r12421 + r12423;
        double r12425 = 3.0;
        double r12426 = pow(r12419, r12425);
        double r12427 = r12424 - r12426;
        double r12428 = x;
        double r12429 = exp(r12419);
        double r12430 = r12428 / r12429;
        double r12431 = 1.0;
        double r12432 = r12431 + r12419;
        double r12433 = r12430 / r12432;
        double r12434 = r12427 + r12433;
        return r12434;
}

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 r12435, r12436, r12437, r12438, r12439, r12440, r12441, r12442;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r12435);
        mpfr_init(r12436);
        mpfr_init(r12437);
        mpfr_init(r12438);
        mpfr_init(r12439);
        mpfr_init(r12440);
        mpfr_init(r12441);
        mpfr_init(r12442);
}

double f_im(double wj, double x) {
        mpfr_set_d(r12435, wj, MPFR_RNDN);
        mpfr_exp(r12436, r12435, MPFR_RNDN);
        mpfr_mul(r12437, r12435, r12436, MPFR_RNDN);
        mpfr_set_d(r12438, x, MPFR_RNDN);
        mpfr_sub(r12439, r12437, r12438, MPFR_RNDN);
        mpfr_add(r12440, r12436, r12437, MPFR_RNDN);
        mpfr_div(r12441, r12439, r12440, MPFR_RNDN);
        mpfr_sub(r12442, r12435, r12441, MPFR_RNDN);
        return mpfr_get_d(r12442, MPFR_RNDN);
}

static mpfr_t r12443, r12444, r12445, r12446, r12447, r12448, r12449, r12450, r12451, r12452, r12453, r12454, r12455, r12456, r12457, r12458;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init(r12443);
        mpfr_init_set_str(r12444, "2", 10, MPFR_RNDN);
        mpfr_init(r12445);
        mpfr_init_set_str(r12446, "4", 10, MPFR_RNDN);
        mpfr_init(r12447);
        mpfr_init(r12448);
        mpfr_init_set_str(r12449, "3", 10, MPFR_RNDN);
        mpfr_init(r12450);
        mpfr_init(r12451);
        mpfr_init(r12452);
        mpfr_init(r12453);
        mpfr_init(r12454);
        mpfr_init_set_str(r12455, "1", 10, MPFR_RNDN);
        mpfr_init(r12456);
        mpfr_init(r12457);
        mpfr_init(r12458);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r12443, wj, MPFR_RNDN);
        ;
        mpfr_pow(r12445, r12443, r12444, MPFR_RNDN);
        ;
        mpfr_pow(r12447, r12443, r12446, MPFR_RNDN);
        mpfr_add(r12448, r12445, r12447, MPFR_RNDN);
        ;
        mpfr_pow(r12450, r12443, r12449, MPFR_RNDN);
        mpfr_sub(r12451, r12448, r12450, MPFR_RNDN);
        mpfr_set_d(r12452, x, MPFR_RNDN);
        mpfr_exp(r12453, r12443, MPFR_RNDN);
        mpfr_div(r12454, r12452, r12453, MPFR_RNDN);
        ;
        mpfr_add(r12456, r12455, r12443, MPFR_RNDN);
        mpfr_div(r12457, r12454, r12456, MPFR_RNDN);
        mpfr_add(r12458, r12451, r12457, MPFR_RNDN);
        return mpfr_get_d(r12458, MPFR_RNDN);
}

static mpfr_t r12459, r12460, r12461, r12462, r12463, r12464, r12465, r12466, r12467, r12468, r12469, r12470, r12471, r12472, r12473, r12474;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init(r12459);
        mpfr_init_set_str(r12460, "2", 10, MPFR_RNDN);
        mpfr_init(r12461);
        mpfr_init_set_str(r12462, "4", 10, MPFR_RNDN);
        mpfr_init(r12463);
        mpfr_init(r12464);
        mpfr_init_set_str(r12465, "3", 10, MPFR_RNDN);
        mpfr_init(r12466);
        mpfr_init(r12467);
        mpfr_init(r12468);
        mpfr_init(r12469);
        mpfr_init(r12470);
        mpfr_init_set_str(r12471, "1", 10, MPFR_RNDN);
        mpfr_init(r12472);
        mpfr_init(r12473);
        mpfr_init(r12474);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r12459, wj, MPFR_RNDN);
        ;
        mpfr_pow(r12461, r12459, r12460, MPFR_RNDN);
        ;
        mpfr_pow(r12463, r12459, r12462, MPFR_RNDN);
        mpfr_add(r12464, r12461, r12463, MPFR_RNDN);
        ;
        mpfr_pow(r12466, r12459, r12465, MPFR_RNDN);
        mpfr_sub(r12467, r12464, r12466, MPFR_RNDN);
        mpfr_set_d(r12468, x, MPFR_RNDN);
        mpfr_exp(r12469, r12459, MPFR_RNDN);
        mpfr_div(r12470, r12468, r12469, MPFR_RNDN);
        ;
        mpfr_add(r12472, r12471, r12459, MPFR_RNDN);
        mpfr_div(r12473, r12470, r12472, MPFR_RNDN);
        mpfr_add(r12474, r12467, r12473, MPFR_RNDN);
        return mpfr_get_d(r12474, MPFR_RNDN);
}

