#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Numeric.Log:$clog1p from log-domain-0.10.2.1, B";

double f_if(float x) {
        float r46233 = x;
        float r46234 = 1.0;
        float r46235 = r46233 + r46234;
        float r46236 = sqrt(r46235);
        float r46237 = r46234 + r46236;
        float r46238 = r46233 / r46237;
        return r46238;
}

double f_id(double x) {
        double r46239 = x;
        double r46240 = 1.0;
        double r46241 = r46239 + r46240;
        double r46242 = sqrt(r46241);
        double r46243 = r46240 + r46242;
        double r46244 = r46239 / r46243;
        return r46244;
}


double f_of(float x) {
        float r46245 = x;
        float r46246 = 28.914529720558605;
        bool r46247 = r46245 <= r46246;
        float r46248 = 1.0;
        float r46249 = 3;
        float r46250 = pow(r46248, r46249);
        float r46251 = r46245 + r46248;
        float r46252 = sqrt(r46251);
        float r46253 = pow(r46252, r46249);
        float r46254 = r46250 + r46253;
        float r46255 = r46245 / r46254;
        float r46256 = r46248 * r46248;
        float r46257 = r46252 * r46252;
        float r46258 = r46248 * r46252;
        float r46259 = r46257 - r46258;
        float r46260 = r46256 + r46259;
        float r46261 = r46255 * r46260;
        float r46262 = r46248 + r46245;
        float r46263 = r46256 - r46262;
        float r46264 = r46245 / r46263;
        float r46265 = r46248 - r46252;
        float r46266 = r46264 * r46265;
        float r46267 = r46247 ? r46261 : r46266;
        return r46267;
}

double f_od(double x) {
        double r46268 = x;
        double r46269 = 28.914529720558605;
        bool r46270 = r46268 <= r46269;
        double r46271 = 1.0;
        double r46272 = 3;
        double r46273 = pow(r46271, r46272);
        double r46274 = r46268 + r46271;
        double r46275 = sqrt(r46274);
        double r46276 = pow(r46275, r46272);
        double r46277 = r46273 + r46276;
        double r46278 = r46268 / r46277;
        double r46279 = r46271 * r46271;
        double r46280 = r46275 * r46275;
        double r46281 = r46271 * r46275;
        double r46282 = r46280 - r46281;
        double r46283 = r46279 + r46282;
        double r46284 = r46278 * r46283;
        double r46285 = r46271 + r46268;
        double r46286 = r46279 - r46285;
        double r46287 = r46268 / r46286;
        double r46288 = r46271 - r46275;
        double r46289 = r46287 * r46288;
        double r46290 = r46270 ? r46284 : r46289;
        return r46290;
}

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 r46291, r46292, r46293, r46294, r46295, r46296;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r46291);
        mpfr_init_set_str(r46292, "1.0", 10, MPFR_RNDN);
        mpfr_init(r46293);
        mpfr_init(r46294);
        mpfr_init(r46295);
        mpfr_init(r46296);
}

double f_im(double x) {
        mpfr_set_d(r46291, x, MPFR_RNDN);
        ;
        mpfr_add(r46293, r46291, r46292, MPFR_RNDN);
        mpfr_sqrt(r46294, r46293, MPFR_RNDN);
        mpfr_add(r46295, r46292, r46294, MPFR_RNDN);
        mpfr_div(r46296, r46291, r46295, MPFR_RNDN);
        return mpfr_get_d(r46296, MPFR_RNDN);
}

static mpfr_t r46297, r46298, r46299, r46300, r46301, r46302, r46303, r46304, r46305, r46306, r46307, r46308, r46309, r46310, r46311, r46312, r46313, r46314, r46315, r46316, r46317, r46318, r46319;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r46297);
        mpfr_init_set_str(r46298, "28.914529720558605", 10, MPFR_RNDN);
        mpfr_init(r46299);
        mpfr_init_set_str(r46300, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r46301, "3", 10, MPFR_RNDN);
        mpfr_init(r46302);
        mpfr_init(r46303);
        mpfr_init(r46304);
        mpfr_init(r46305);
        mpfr_init(r46306);
        mpfr_init(r46307);
        mpfr_init(r46308);
        mpfr_init(r46309);
        mpfr_init(r46310);
        mpfr_init(r46311);
        mpfr_init(r46312);
        mpfr_init(r46313);
        mpfr_init(r46314);
        mpfr_init(r46315);
        mpfr_init(r46316);
        mpfr_init(r46317);
        mpfr_init(r46318);
        mpfr_init(r46319);
}

double f_fm(double x) {
        mpfr_set_d(r46297, x, MPFR_RNDN);
        ;
        mpfr_set_si(r46299, mpfr_cmp(r46297, r46298) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r46302, r46300, r46301, MPFR_RNDN);
        mpfr_add(r46303, r46297, r46300, MPFR_RNDN);
        mpfr_sqrt(r46304, r46303, MPFR_RNDN);
        mpfr_pow(r46305, r46304, r46301, MPFR_RNDN);
        mpfr_add(r46306, r46302, r46305, MPFR_RNDN);
        mpfr_div(r46307, r46297, r46306, MPFR_RNDN);
        mpfr_mul(r46308, r46300, r46300, MPFR_RNDN);
        mpfr_mul(r46309, r46304, r46304, MPFR_RNDN);
        mpfr_mul(r46310, r46300, r46304, MPFR_RNDN);
        mpfr_sub(r46311, r46309, r46310, MPFR_RNDN);
        mpfr_add(r46312, r46308, r46311, MPFR_RNDN);
        mpfr_mul(r46313, r46307, r46312, MPFR_RNDN);
        mpfr_add(r46314, r46300, r46297, MPFR_RNDN);
        mpfr_sub(r46315, r46308, r46314, MPFR_RNDN);
        mpfr_div(r46316, r46297, r46315, MPFR_RNDN);
        mpfr_sub(r46317, r46300, r46304, MPFR_RNDN);
        mpfr_mul(r46318, r46316, r46317, MPFR_RNDN);
        if (mpfr_get_si(r46299, MPFR_RNDN)) { mpfr_set(r46319, r46313, MPFR_RNDN); } else { mpfr_set(r46319, r46318, MPFR_RNDN); };
        return mpfr_get_d(r46319, MPFR_RNDN);
}

static mpfr_t r46320, r46321, r46322, r46323, r46324, r46325, r46326, r46327, r46328, r46329, r46330, r46331, r46332, r46333, r46334, r46335, r46336, r46337, r46338, r46339, r46340, r46341, r46342;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r46320);
        mpfr_init_set_str(r46321, "28.914529720558605", 10, MPFR_RNDN);
        mpfr_init(r46322);
        mpfr_init_set_str(r46323, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r46324, "3", 10, MPFR_RNDN);
        mpfr_init(r46325);
        mpfr_init(r46326);
        mpfr_init(r46327);
        mpfr_init(r46328);
        mpfr_init(r46329);
        mpfr_init(r46330);
        mpfr_init(r46331);
        mpfr_init(r46332);
        mpfr_init(r46333);
        mpfr_init(r46334);
        mpfr_init(r46335);
        mpfr_init(r46336);
        mpfr_init(r46337);
        mpfr_init(r46338);
        mpfr_init(r46339);
        mpfr_init(r46340);
        mpfr_init(r46341);
        mpfr_init(r46342);
}

double f_dm(double x) {
        mpfr_set_d(r46320, x, MPFR_RNDN);
        ;
        mpfr_set_si(r46322, mpfr_cmp(r46320, r46321) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r46325, r46323, r46324, MPFR_RNDN);
        mpfr_add(r46326, r46320, r46323, MPFR_RNDN);
        mpfr_sqrt(r46327, r46326, MPFR_RNDN);
        mpfr_pow(r46328, r46327, r46324, MPFR_RNDN);
        mpfr_add(r46329, r46325, r46328, MPFR_RNDN);
        mpfr_div(r46330, r46320, r46329, MPFR_RNDN);
        mpfr_mul(r46331, r46323, r46323, MPFR_RNDN);
        mpfr_mul(r46332, r46327, r46327, MPFR_RNDN);
        mpfr_mul(r46333, r46323, r46327, MPFR_RNDN);
        mpfr_sub(r46334, r46332, r46333, MPFR_RNDN);
        mpfr_add(r46335, r46331, r46334, MPFR_RNDN);
        mpfr_mul(r46336, r46330, r46335, MPFR_RNDN);
        mpfr_add(r46337, r46323, r46320, MPFR_RNDN);
        mpfr_sub(r46338, r46331, r46337, MPFR_RNDN);
        mpfr_div(r46339, r46320, r46338, MPFR_RNDN);
        mpfr_sub(r46340, r46323, r46327, MPFR_RNDN);
        mpfr_mul(r46341, r46339, r46340, MPFR_RNDN);
        if (mpfr_get_si(r46322, MPFR_RNDN)) { mpfr_set(r46342, r46336, MPFR_RNDN); } else { mpfr_set(r46342, r46341, MPFR_RNDN); };
        return mpfr_get_d(r46342, MPFR_RNDN);
}

