#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 r46016 = x;
        float r46017 = 1.0;
        float r46018 = r46016 + r46017;
        float r46019 = sqrt(r46018);
        float r46020 = r46017 + r46019;
        float r46021 = r46016 / r46020;
        return r46021;
}

double f_id(double x) {
        double r46022 = x;
        double r46023 = 1.0;
        double r46024 = r46022 + r46023;
        double r46025 = sqrt(r46024);
        double r46026 = r46023 + r46025;
        double r46027 = r46022 / r46026;
        return r46027;
}


double f_of(float x) {
        float r46028 = x;
        float r46029 = 1.2558319929723343;
        bool r46030 = r46028 <= r46029;
        float r46031 = 1.0;
        float r46032 = 3;
        float r46033 = pow(r46031, r46032);
        float r46034 = r46028 + r46031;
        float r46035 = sqrt(r46034);
        float r46036 = pow(r46035, r46032);
        float r46037 = r46033 + r46036;
        float r46038 = r46028 / r46037;
        float r46039 = r46031 * r46031;
        float r46040 = r46031 + r46028;
        float r46041 = sqrt(r46040);
        float r46042 = exp(r46041);
        float r46043 = r46041 - r46031;
        float r46044 = pow(r46042, r46043);
        float r46045 = log(r46044);
        float r46046 = r46039 + r46045;
        float r46047 = r46038 * r46046;
        float r46048 = r46039 - r46040;
        float r46049 = r46028 / r46048;
        float r46050 = r46031 - r46035;
        float r46051 = r46049 * r46050;
        float r46052 = r46030 ? r46047 : r46051;
        return r46052;
}

double f_od(double x) {
        double r46053 = x;
        double r46054 = 1.2558319929723343;
        bool r46055 = r46053 <= r46054;
        double r46056 = 1.0;
        double r46057 = 3;
        double r46058 = pow(r46056, r46057);
        double r46059 = r46053 + r46056;
        double r46060 = sqrt(r46059);
        double r46061 = pow(r46060, r46057);
        double r46062 = r46058 + r46061;
        double r46063 = r46053 / r46062;
        double r46064 = r46056 * r46056;
        double r46065 = r46056 + r46053;
        double r46066 = sqrt(r46065);
        double r46067 = exp(r46066);
        double r46068 = r46066 - r46056;
        double r46069 = pow(r46067, r46068);
        double r46070 = log(r46069);
        double r46071 = r46064 + r46070;
        double r46072 = r46063 * r46071;
        double r46073 = r46064 - r46065;
        double r46074 = r46053 / r46073;
        double r46075 = r46056 - r46060;
        double r46076 = r46074 * r46075;
        double r46077 = r46055 ? r46072 : r46076;
        return r46077;
}

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 r46078, r46079, r46080, r46081, r46082, r46083;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r46078);
        mpfr_init_set_str(r46079, "1.0", 10, MPFR_RNDN);
        mpfr_init(r46080);
        mpfr_init(r46081);
        mpfr_init(r46082);
        mpfr_init(r46083);
}

double f_im(double x) {
        mpfr_set_d(r46078, x, MPFR_RNDN);
        ;
        mpfr_add(r46080, r46078, r46079, MPFR_RNDN);
        mpfr_sqrt(r46081, r46080, MPFR_RNDN);
        mpfr_add(r46082, r46079, r46081, MPFR_RNDN);
        mpfr_div(r46083, r46078, r46082, MPFR_RNDN);
        return mpfr_get_d(r46083, MPFR_RNDN);
}

static mpfr_t r46084, r46085, r46086, r46087, r46088, r46089, r46090, r46091, r46092, r46093, r46094, r46095, r46096, r46097, r46098, r46099, r46100, r46101, r46102, r46103, r46104, r46105, r46106, r46107, r46108;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r46084);
        mpfr_init_set_str(r46085, "1.2558319929723343", 10, MPFR_RNDN);
        mpfr_init(r46086);
        mpfr_init_set_str(r46087, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r46088, "3", 10, MPFR_RNDN);
        mpfr_init(r46089);
        mpfr_init(r46090);
        mpfr_init(r46091);
        mpfr_init(r46092);
        mpfr_init(r46093);
        mpfr_init(r46094);
        mpfr_init(r46095);
        mpfr_init(r46096);
        mpfr_init(r46097);
        mpfr_init(r46098);
        mpfr_init(r46099);
        mpfr_init(r46100);
        mpfr_init(r46101);
        mpfr_init(r46102);
        mpfr_init(r46103);
        mpfr_init(r46104);
        mpfr_init(r46105);
        mpfr_init(r46106);
        mpfr_init(r46107);
        mpfr_init(r46108);
}

double f_fm(double x) {
        mpfr_set_d(r46084, x, MPFR_RNDN);
        ;
        mpfr_set_si(r46086, mpfr_cmp(r46084, r46085) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r46089, r46087, r46088, MPFR_RNDN);
        mpfr_add(r46090, r46084, r46087, MPFR_RNDN);
        mpfr_sqrt(r46091, r46090, MPFR_RNDN);
        mpfr_pow(r46092, r46091, r46088, MPFR_RNDN);
        mpfr_add(r46093, r46089, r46092, MPFR_RNDN);
        mpfr_div(r46094, r46084, r46093, MPFR_RNDN);
        mpfr_mul(r46095, r46087, r46087, MPFR_RNDN);
        mpfr_add(r46096, r46087, r46084, MPFR_RNDN);
        mpfr_sqrt(r46097, r46096, MPFR_RNDN);
        mpfr_exp(r46098, r46097, MPFR_RNDN);
        mpfr_sub(r46099, r46097, r46087, MPFR_RNDN);
        mpfr_pow(r46100, r46098, r46099, MPFR_RNDN);
        mpfr_log(r46101, r46100, MPFR_RNDN);
        mpfr_add(r46102, r46095, r46101, MPFR_RNDN);
        mpfr_mul(r46103, r46094, r46102, MPFR_RNDN);
        mpfr_sub(r46104, r46095, r46096, MPFR_RNDN);
        mpfr_div(r46105, r46084, r46104, MPFR_RNDN);
        mpfr_sub(r46106, r46087, r46091, MPFR_RNDN);
        mpfr_mul(r46107, r46105, r46106, MPFR_RNDN);
        if (mpfr_get_si(r46086, MPFR_RNDN)) { mpfr_set(r46108, r46103, MPFR_RNDN); } else { mpfr_set(r46108, r46107, MPFR_RNDN); };
        return mpfr_get_d(r46108, MPFR_RNDN);
}

static mpfr_t r46109, r46110, r46111, r46112, r46113, r46114, r46115, r46116, r46117, r46118, r46119, r46120, r46121, r46122, r46123, r46124, r46125, r46126, r46127, r46128, r46129, r46130, r46131, r46132, r46133;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r46109);
        mpfr_init_set_str(r46110, "1.2558319929723343", 10, MPFR_RNDN);
        mpfr_init(r46111);
        mpfr_init_set_str(r46112, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r46113, "3", 10, MPFR_RNDN);
        mpfr_init(r46114);
        mpfr_init(r46115);
        mpfr_init(r46116);
        mpfr_init(r46117);
        mpfr_init(r46118);
        mpfr_init(r46119);
        mpfr_init(r46120);
        mpfr_init(r46121);
        mpfr_init(r46122);
        mpfr_init(r46123);
        mpfr_init(r46124);
        mpfr_init(r46125);
        mpfr_init(r46126);
        mpfr_init(r46127);
        mpfr_init(r46128);
        mpfr_init(r46129);
        mpfr_init(r46130);
        mpfr_init(r46131);
        mpfr_init(r46132);
        mpfr_init(r46133);
}

double f_dm(double x) {
        mpfr_set_d(r46109, x, MPFR_RNDN);
        ;
        mpfr_set_si(r46111, mpfr_cmp(r46109, r46110) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r46114, r46112, r46113, MPFR_RNDN);
        mpfr_add(r46115, r46109, r46112, MPFR_RNDN);
        mpfr_sqrt(r46116, r46115, MPFR_RNDN);
        mpfr_pow(r46117, r46116, r46113, MPFR_RNDN);
        mpfr_add(r46118, r46114, r46117, MPFR_RNDN);
        mpfr_div(r46119, r46109, r46118, MPFR_RNDN);
        mpfr_mul(r46120, r46112, r46112, MPFR_RNDN);
        mpfr_add(r46121, r46112, r46109, MPFR_RNDN);
        mpfr_sqrt(r46122, r46121, MPFR_RNDN);
        mpfr_exp(r46123, r46122, MPFR_RNDN);
        mpfr_sub(r46124, r46122, r46112, MPFR_RNDN);
        mpfr_pow(r46125, r46123, r46124, MPFR_RNDN);
        mpfr_log(r46126, r46125, MPFR_RNDN);
        mpfr_add(r46127, r46120, r46126, MPFR_RNDN);
        mpfr_mul(r46128, r46119, r46127, MPFR_RNDN);
        mpfr_sub(r46129, r46120, r46121, MPFR_RNDN);
        mpfr_div(r46130, r46109, r46129, MPFR_RNDN);
        mpfr_sub(r46131, r46112, r46116, MPFR_RNDN);
        mpfr_mul(r46132, r46130, r46131, MPFR_RNDN);
        if (mpfr_get_si(r46111, MPFR_RNDN)) { mpfr_set(r46133, r46128, MPFR_RNDN); } else { mpfr_set(r46133, r46132, MPFR_RNDN); };
        return mpfr_get_d(r46133, MPFR_RNDN);
}

