#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 r45499 = x;
        float r45500 = 1.0;
        float r45501 = r45499 + r45500;
        float r45502 = sqrt(r45501);
        float r45503 = r45500 + r45502;
        float r45504 = r45499 / r45503;
        return r45504;
}

double f_id(double x) {
        double r45505 = x;
        double r45506 = 1.0;
        double r45507 = r45505 + r45506;
        double r45508 = sqrt(r45507);
        double r45509 = r45506 + r45508;
        double r45510 = r45505 / r45509;
        return r45510;
}


double f_of(float x) {
        float r45511 = x;
        float r45512 = 1.0224831783971646;
        bool r45513 = r45511 <= r45512;
        float r45514 = 1.0;
        float r45515 = 3;
        float r45516 = pow(r45514, r45515);
        float r45517 = r45511 + r45514;
        float r45518 = sqrt(r45517);
        float r45519 = pow(r45518, r45515);
        float r45520 = r45516 + r45519;
        float r45521 = r45511 / r45520;
        float r45522 = r45514 * r45514;
        float r45523 = r45518 * r45518;
        float r45524 = r45514 * r45518;
        float r45525 = r45523 - r45524;
        float r45526 = r45522 + r45525;
        float r45527 = r45521 * r45526;
        float r45528 = r45514 + r45511;
        float r45529 = r45522 - r45528;
        float r45530 = r45511 / r45529;
        float r45531 = r45514 - r45518;
        float r45532 = r45530 * r45531;
        float r45533 = r45513 ? r45527 : r45532;
        return r45533;
}

double f_od(double x) {
        double r45534 = x;
        double r45535 = 1.0224831783971646;
        bool r45536 = r45534 <= r45535;
        double r45537 = 1.0;
        double r45538 = 3;
        double r45539 = pow(r45537, r45538);
        double r45540 = r45534 + r45537;
        double r45541 = sqrt(r45540);
        double r45542 = pow(r45541, r45538);
        double r45543 = r45539 + r45542;
        double r45544 = r45534 / r45543;
        double r45545 = r45537 * r45537;
        double r45546 = r45541 * r45541;
        double r45547 = r45537 * r45541;
        double r45548 = r45546 - r45547;
        double r45549 = r45545 + r45548;
        double r45550 = r45544 * r45549;
        double r45551 = r45537 + r45534;
        double r45552 = r45545 - r45551;
        double r45553 = r45534 / r45552;
        double r45554 = r45537 - r45541;
        double r45555 = r45553 * r45554;
        double r45556 = r45536 ? r45550 : r45555;
        return r45556;
}

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 r45557, r45558, r45559, r45560, r45561, r45562;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45557);
        mpfr_init_set_str(r45558, "1.0", 10, MPFR_RNDN);
        mpfr_init(r45559);
        mpfr_init(r45560);
        mpfr_init(r45561);
        mpfr_init(r45562);
}

double f_im(double x) {
        mpfr_set_d(r45557, x, MPFR_RNDN);
        ;
        mpfr_add(r45559, r45557, r45558, MPFR_RNDN);
        mpfr_sqrt(r45560, r45559, MPFR_RNDN);
        mpfr_add(r45561, r45558, r45560, MPFR_RNDN);
        mpfr_div(r45562, r45557, r45561, MPFR_RNDN);
        return mpfr_get_d(r45562, MPFR_RNDN);
}

static mpfr_t r45563, r45564, r45565, r45566, r45567, r45568, r45569, r45570, r45571, r45572, r45573, r45574, r45575, r45576, r45577, r45578, r45579, r45580, r45581, r45582, r45583, r45584, r45585;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45563);
        mpfr_init_set_str(r45564, "1.0224831783971646", 10, MPFR_RNDN);
        mpfr_init(r45565);
        mpfr_init_set_str(r45566, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r45567, "3", 10, MPFR_RNDN);
        mpfr_init(r45568);
        mpfr_init(r45569);
        mpfr_init(r45570);
        mpfr_init(r45571);
        mpfr_init(r45572);
        mpfr_init(r45573);
        mpfr_init(r45574);
        mpfr_init(r45575);
        mpfr_init(r45576);
        mpfr_init(r45577);
        mpfr_init(r45578);
        mpfr_init(r45579);
        mpfr_init(r45580);
        mpfr_init(r45581);
        mpfr_init(r45582);
        mpfr_init(r45583);
        mpfr_init(r45584);
        mpfr_init(r45585);
}

double f_fm(double x) {
        mpfr_set_d(r45563, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45565, mpfr_cmp(r45563, r45564) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r45568, r45566, r45567, MPFR_RNDN);
        mpfr_add(r45569, r45563, r45566, MPFR_RNDN);
        mpfr_sqrt(r45570, r45569, MPFR_RNDN);
        mpfr_pow(r45571, r45570, r45567, MPFR_RNDN);
        mpfr_add(r45572, r45568, r45571, MPFR_RNDN);
        mpfr_div(r45573, r45563, r45572, MPFR_RNDN);
        mpfr_mul(r45574, r45566, r45566, MPFR_RNDN);
        mpfr_mul(r45575, r45570, r45570, MPFR_RNDN);
        mpfr_mul(r45576, r45566, r45570, MPFR_RNDN);
        mpfr_sub(r45577, r45575, r45576, MPFR_RNDN);
        mpfr_add(r45578, r45574, r45577, MPFR_RNDN);
        mpfr_mul(r45579, r45573, r45578, MPFR_RNDN);
        mpfr_add(r45580, r45566, r45563, MPFR_RNDN);
        mpfr_sub(r45581, r45574, r45580, MPFR_RNDN);
        mpfr_div(r45582, r45563, r45581, MPFR_RNDN);
        mpfr_sub(r45583, r45566, r45570, MPFR_RNDN);
        mpfr_mul(r45584, r45582, r45583, MPFR_RNDN);
        if (mpfr_get_si(r45565, MPFR_RNDN)) { mpfr_set(r45585, r45579, MPFR_RNDN); } else { mpfr_set(r45585, r45584, MPFR_RNDN); };
        return mpfr_get_d(r45585, MPFR_RNDN);
}

static mpfr_t r45586, r45587, r45588, r45589, r45590, r45591, r45592, r45593, r45594, r45595, r45596, r45597, r45598, r45599, r45600, r45601, r45602, r45603, r45604, r45605, r45606, r45607, r45608;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45586);
        mpfr_init_set_str(r45587, "1.0224831783971646", 10, MPFR_RNDN);
        mpfr_init(r45588);
        mpfr_init_set_str(r45589, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r45590, "3", 10, MPFR_RNDN);
        mpfr_init(r45591);
        mpfr_init(r45592);
        mpfr_init(r45593);
        mpfr_init(r45594);
        mpfr_init(r45595);
        mpfr_init(r45596);
        mpfr_init(r45597);
        mpfr_init(r45598);
        mpfr_init(r45599);
        mpfr_init(r45600);
        mpfr_init(r45601);
        mpfr_init(r45602);
        mpfr_init(r45603);
        mpfr_init(r45604);
        mpfr_init(r45605);
        mpfr_init(r45606);
        mpfr_init(r45607);
        mpfr_init(r45608);
}

double f_dm(double x) {
        mpfr_set_d(r45586, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45588, mpfr_cmp(r45586, r45587) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r45591, r45589, r45590, MPFR_RNDN);
        mpfr_add(r45592, r45586, r45589, MPFR_RNDN);
        mpfr_sqrt(r45593, r45592, MPFR_RNDN);
        mpfr_pow(r45594, r45593, r45590, MPFR_RNDN);
        mpfr_add(r45595, r45591, r45594, MPFR_RNDN);
        mpfr_div(r45596, r45586, r45595, MPFR_RNDN);
        mpfr_mul(r45597, r45589, r45589, MPFR_RNDN);
        mpfr_mul(r45598, r45593, r45593, MPFR_RNDN);
        mpfr_mul(r45599, r45589, r45593, MPFR_RNDN);
        mpfr_sub(r45600, r45598, r45599, MPFR_RNDN);
        mpfr_add(r45601, r45597, r45600, MPFR_RNDN);
        mpfr_mul(r45602, r45596, r45601, MPFR_RNDN);
        mpfr_add(r45603, r45589, r45586, MPFR_RNDN);
        mpfr_sub(r45604, r45597, r45603, MPFR_RNDN);
        mpfr_div(r45605, r45586, r45604, MPFR_RNDN);
        mpfr_sub(r45606, r45589, r45593, MPFR_RNDN);
        mpfr_mul(r45607, r45605, r45606, MPFR_RNDN);
        if (mpfr_get_si(r45588, MPFR_RNDN)) { mpfr_set(r45608, r45602, MPFR_RNDN); } else { mpfr_set(r45608, r45607, MPFR_RNDN); };
        return mpfr_get_d(r45608, MPFR_RNDN);
}

