#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 r25811 = wj;
        float r25812 = exp(r25811);
        float r25813 = r25811 * r25812;
        float r25814 = x;
        float r25815 = r25813 - r25814;
        float r25816 = r25812 + r25813;
        float r25817 = r25815 / r25816;
        float r25818 = r25811 - r25817;
        return r25818;
}

double f_id(double wj, double x) {
        double r25819 = wj;
        double r25820 = exp(r25819);
        double r25821 = r25819 * r25820;
        double r25822 = x;
        double r25823 = r25821 - r25822;
        double r25824 = r25820 + r25821;
        double r25825 = r25823 / r25824;
        double r25826 = r25819 - r25825;
        return r25826;
}


double f_of(float wj, float x) {
        float r25827 = wj;
        float r25828 = exp(r25827);
        float r25829 = r25827 * r25828;
        float r25830 = 3;
        float r25831 = pow(r25829, r25830);
        float r25832 = x;
        float r25833 = pow(r25832, r25830);
        float r25834 = r25831 - r25833;
        float r25835 = r25828 + r25829;
        float r25836 = r25829 * r25829;
        float r25837 = r25832 * r25832;
        float r25838 = r25829 * r25832;
        float r25839 = r25837 + r25838;
        float r25840 = r25836 + r25839;
        float r25841 = r25835 * r25840;
        float r25842 = r25834 / r25841;
        float r25843 = r25827 - r25842;
        float r25844 = 1.121841522316379e-13;
        bool r25845 = r25843 <= r25844;
        float r25846 = r25832 / r25828;
        float r25847 = 1;
        float r25848 = r25847 + r25827;
        float r25849 = r25846 / r25848;
        float r25850 = 4;
        float r25851 = pow(r25827, r25850);
        float r25852 = r25847 - r25827;
        float r25853 = r25827 * r25827;
        float r25854 = r25852 * r25853;
        float r25855 = r25851 + r25854;
        float r25856 = r25849 + r25855;
        float r25857 = r25827 / r25848;
        float r25858 = r25827 - r25857;
        float r25859 = r25832 / r25835;
        float r25860 = r25858 + r25859;
        float r25861 = r25845 ? r25856 : r25860;
        return r25861;
}

double f_od(double wj, double x) {
        double r25862 = wj;
        double r25863 = exp(r25862);
        double r25864 = r25862 * r25863;
        double r25865 = 3;
        double r25866 = pow(r25864, r25865);
        double r25867 = x;
        double r25868 = pow(r25867, r25865);
        double r25869 = r25866 - r25868;
        double r25870 = r25863 + r25864;
        double r25871 = r25864 * r25864;
        double r25872 = r25867 * r25867;
        double r25873 = r25864 * r25867;
        double r25874 = r25872 + r25873;
        double r25875 = r25871 + r25874;
        double r25876 = r25870 * r25875;
        double r25877 = r25869 / r25876;
        double r25878 = r25862 - r25877;
        double r25879 = 1.121841522316379e-13;
        bool r25880 = r25878 <= r25879;
        double r25881 = r25867 / r25863;
        double r25882 = 1;
        double r25883 = r25882 + r25862;
        double r25884 = r25881 / r25883;
        double r25885 = 4;
        double r25886 = pow(r25862, r25885);
        double r25887 = r25882 - r25862;
        double r25888 = r25862 * r25862;
        double r25889 = r25887 * r25888;
        double r25890 = r25886 + r25889;
        double r25891 = r25884 + r25890;
        double r25892 = r25862 / r25883;
        double r25893 = r25862 - r25892;
        double r25894 = r25867 / r25870;
        double r25895 = r25893 + r25894;
        double r25896 = r25880 ? r25891 : r25895;
        return r25896;
}

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 r25897, r25898, r25899, r25900, r25901, r25902, r25903, r25904;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r25897);
        mpfr_init(r25898);
        mpfr_init(r25899);
        mpfr_init(r25900);
        mpfr_init(r25901);
        mpfr_init(r25902);
        mpfr_init(r25903);
        mpfr_init(r25904);
}

double f_im(double wj, double x) {
        mpfr_set_d(r25897, wj, MPFR_RNDN);
        mpfr_exp(r25898, r25897, MPFR_RNDN);
        mpfr_mul(r25899, r25897, r25898, MPFR_RNDN);
        mpfr_set_d(r25900, x, MPFR_RNDN);
        mpfr_sub(r25901, r25899, r25900, MPFR_RNDN);
        mpfr_add(r25902, r25898, r25899, MPFR_RNDN);
        mpfr_div(r25903, r25901, r25902, MPFR_RNDN);
        mpfr_sub(r25904, r25897, r25903, MPFR_RNDN);
        return mpfr_get_d(r25904, MPFR_RNDN);
}

static mpfr_t r25905, r25906, r25907, r25908, r25909, r25910, r25911, r25912, r25913, r25914, r25915, r25916, r25917, r25918, r25919, r25920, r25921, r25922, r25923, r25924, r25925, r25926, r25927, r25928, r25929, r25930, r25931, r25932, r25933, r25934, r25935, r25936, r25937, r25938, r25939;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init(r25905);
        mpfr_init(r25906);
        mpfr_init(r25907);
        mpfr_init_set_str(r25908, "3", 10, MPFR_RNDN);
        mpfr_init(r25909);
        mpfr_init(r25910);
        mpfr_init(r25911);
        mpfr_init(r25912);
        mpfr_init(r25913);
        mpfr_init(r25914);
        mpfr_init(r25915);
        mpfr_init(r25916);
        mpfr_init(r25917);
        mpfr_init(r25918);
        mpfr_init(r25919);
        mpfr_init(r25920);
        mpfr_init(r25921);
        mpfr_init_set_str(r25922, "1.121841522316379e-13", 10, MPFR_RNDN);
        mpfr_init(r25923);
        mpfr_init(r25924);
        mpfr_init_set_str(r25925, "1", 10, MPFR_RNDN);
        mpfr_init(r25926);
        mpfr_init(r25927);
        mpfr_init_set_str(r25928, "4", 10, MPFR_RNDN);
        mpfr_init(r25929);
        mpfr_init(r25930);
        mpfr_init(r25931);
        mpfr_init(r25932);
        mpfr_init(r25933);
        mpfr_init(r25934);
        mpfr_init(r25935);
        mpfr_init(r25936);
        mpfr_init(r25937);
        mpfr_init(r25938);
        mpfr_init(r25939);
}

double f_fm(double wj, double x) {
        mpfr_set_d(r25905, wj, MPFR_RNDN);
        mpfr_exp(r25906, r25905, MPFR_RNDN);
        mpfr_mul(r25907, r25905, r25906, MPFR_RNDN);
        ;
        mpfr_pow(r25909, r25907, r25908, MPFR_RNDN);
        mpfr_set_d(r25910, x, MPFR_RNDN);
        mpfr_pow(r25911, r25910, r25908, MPFR_RNDN);
        mpfr_sub(r25912, r25909, r25911, MPFR_RNDN);
        mpfr_add(r25913, r25906, r25907, MPFR_RNDN);
        mpfr_mul(r25914, r25907, r25907, MPFR_RNDN);
        mpfr_mul(r25915, r25910, r25910, MPFR_RNDN);
        mpfr_mul(r25916, r25907, r25910, MPFR_RNDN);
        mpfr_add(r25917, r25915, r25916, MPFR_RNDN);
        mpfr_add(r25918, r25914, r25917, MPFR_RNDN);
        mpfr_mul(r25919, r25913, r25918, MPFR_RNDN);
        mpfr_div(r25920, r25912, r25919, MPFR_RNDN);
        mpfr_sub(r25921, r25905, r25920, MPFR_RNDN);
        ;
        mpfr_set_si(r25923, mpfr_cmp(r25921, r25922) <= 0, MPFR_RNDN);
        mpfr_div(r25924, r25910, r25906, MPFR_RNDN);
        ;
        mpfr_add(r25926, r25925, r25905, MPFR_RNDN);
        mpfr_div(r25927, r25924, r25926, MPFR_RNDN);
        ;
        mpfr_pow(r25929, r25905, r25928, MPFR_RNDN);
        mpfr_sub(r25930, r25925, r25905, MPFR_RNDN);
        mpfr_mul(r25931, r25905, r25905, MPFR_RNDN);
        mpfr_mul(r25932, r25930, r25931, MPFR_RNDN);
        mpfr_add(r25933, r25929, r25932, MPFR_RNDN);
        mpfr_add(r25934, r25927, r25933, MPFR_RNDN);
        mpfr_div(r25935, r25905, r25926, MPFR_RNDN);
        mpfr_sub(r25936, r25905, r25935, MPFR_RNDN);
        mpfr_div(r25937, r25910, r25913, MPFR_RNDN);
        mpfr_add(r25938, r25936, r25937, MPFR_RNDN);
        if (mpfr_get_si(r25923, MPFR_RNDN)) { mpfr_set(r25939, r25934, MPFR_RNDN); } else { mpfr_set(r25939, r25938, MPFR_RNDN); };
        return mpfr_get_d(r25939, MPFR_RNDN);
}

static mpfr_t r25940, r25941, r25942, r25943, r25944, r25945, r25946, r25947, r25948, r25949, r25950, r25951, r25952, r25953, r25954, r25955, r25956, r25957, r25958, r25959, r25960, r25961, r25962, r25963, r25964, r25965, r25966, r25967, r25968, r25969, r25970, r25971, r25972, r25973, r25974;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init(r25940);
        mpfr_init(r25941);
        mpfr_init(r25942);
        mpfr_init_set_str(r25943, "3", 10, MPFR_RNDN);
        mpfr_init(r25944);
        mpfr_init(r25945);
        mpfr_init(r25946);
        mpfr_init(r25947);
        mpfr_init(r25948);
        mpfr_init(r25949);
        mpfr_init(r25950);
        mpfr_init(r25951);
        mpfr_init(r25952);
        mpfr_init(r25953);
        mpfr_init(r25954);
        mpfr_init(r25955);
        mpfr_init(r25956);
        mpfr_init_set_str(r25957, "1.121841522316379e-13", 10, MPFR_RNDN);
        mpfr_init(r25958);
        mpfr_init(r25959);
        mpfr_init_set_str(r25960, "1", 10, MPFR_RNDN);
        mpfr_init(r25961);
        mpfr_init(r25962);
        mpfr_init_set_str(r25963, "4", 10, MPFR_RNDN);
        mpfr_init(r25964);
        mpfr_init(r25965);
        mpfr_init(r25966);
        mpfr_init(r25967);
        mpfr_init(r25968);
        mpfr_init(r25969);
        mpfr_init(r25970);
        mpfr_init(r25971);
        mpfr_init(r25972);
        mpfr_init(r25973);
        mpfr_init(r25974);
}

double f_dm(double wj, double x) {
        mpfr_set_d(r25940, wj, MPFR_RNDN);
        mpfr_exp(r25941, r25940, MPFR_RNDN);
        mpfr_mul(r25942, r25940, r25941, MPFR_RNDN);
        ;
        mpfr_pow(r25944, r25942, r25943, MPFR_RNDN);
        mpfr_set_d(r25945, x, MPFR_RNDN);
        mpfr_pow(r25946, r25945, r25943, MPFR_RNDN);
        mpfr_sub(r25947, r25944, r25946, MPFR_RNDN);
        mpfr_add(r25948, r25941, r25942, MPFR_RNDN);
        mpfr_mul(r25949, r25942, r25942, MPFR_RNDN);
        mpfr_mul(r25950, r25945, r25945, MPFR_RNDN);
        mpfr_mul(r25951, r25942, r25945, MPFR_RNDN);
        mpfr_add(r25952, r25950, r25951, MPFR_RNDN);
        mpfr_add(r25953, r25949, r25952, MPFR_RNDN);
        mpfr_mul(r25954, r25948, r25953, MPFR_RNDN);
        mpfr_div(r25955, r25947, r25954, MPFR_RNDN);
        mpfr_sub(r25956, r25940, r25955, MPFR_RNDN);
        ;
        mpfr_set_si(r25958, mpfr_cmp(r25956, r25957) <= 0, MPFR_RNDN);
        mpfr_div(r25959, r25945, r25941, MPFR_RNDN);
        ;
        mpfr_add(r25961, r25960, r25940, MPFR_RNDN);
        mpfr_div(r25962, r25959, r25961, MPFR_RNDN);
        ;
        mpfr_pow(r25964, r25940, r25963, MPFR_RNDN);
        mpfr_sub(r25965, r25960, r25940, MPFR_RNDN);
        mpfr_mul(r25966, r25940, r25940, MPFR_RNDN);
        mpfr_mul(r25967, r25965, r25966, MPFR_RNDN);
        mpfr_add(r25968, r25964, r25967, MPFR_RNDN);
        mpfr_add(r25969, r25962, r25968, MPFR_RNDN);
        mpfr_div(r25970, r25940, r25961, MPFR_RNDN);
        mpfr_sub(r25971, r25940, r25970, MPFR_RNDN);
        mpfr_div(r25972, r25945, r25948, MPFR_RNDN);
        mpfr_add(r25973, r25971, r25972, MPFR_RNDN);
        if (mpfr_get_si(r25958, MPFR_RNDN)) { mpfr_set(r25974, r25969, MPFR_RNDN); } else { mpfr_set(r25974, r25973, MPFR_RNDN); };
        return mpfr_get_d(r25974, MPFR_RNDN);
}

