#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 r46001 = x;
        float r46002 = 1.0;
        float r46003 = r46001 + r46002;
        float r46004 = sqrt(r46003);
        float r46005 = r46002 + r46004;
        float r46006 = r46001 / r46005;
        return r46006;
}

double f_id(double x) {
        double r46007 = x;
        double r46008 = 1.0;
        double r46009 = r46007 + r46008;
        double r46010 = sqrt(r46009);
        double r46011 = r46008 + r46010;
        double r46012 = r46007 / r46011;
        return r46012;
}


double f_of(float x) {
        float r46013 = x;
        float r46014 = 1.0224831783971646;
        bool r46015 = r46013 <= r46014;
        float r46016 = 1.0;
        float r46017 = 3;
        float r46018 = pow(r46016, r46017);
        float r46019 = r46013 + r46016;
        float r46020 = sqrt(r46019);
        float r46021 = pow(r46020, r46017);
        float r46022 = r46018 + r46021;
        float r46023 = r46013 / r46022;
        float r46024 = r46016 * r46016;
        float r46025 = r46020 * r46020;
        float r46026 = r46016 * r46020;
        float r46027 = r46025 - r46026;
        float r46028 = r46024 + r46027;
        float r46029 = r46023 * r46028;
        float r46030 = r46016 + r46013;
        float r46031 = r46024 - r46030;
        float r46032 = r46013 / r46031;
        float r46033 = r46016 - r46020;
        float r46034 = r46032 * r46033;
        float r46035 = r46015 ? r46029 : r46034;
        return r46035;
}

double f_od(double x) {
        double r46036 = x;
        double r46037 = 1.0224831783971646;
        bool r46038 = r46036 <= r46037;
        double r46039 = 1.0;
        double r46040 = 3;
        double r46041 = pow(r46039, r46040);
        double r46042 = r46036 + r46039;
        double r46043 = sqrt(r46042);
        double r46044 = pow(r46043, r46040);
        double r46045 = r46041 + r46044;
        double r46046 = r46036 / r46045;
        double r46047 = r46039 * r46039;
        double r46048 = r46043 * r46043;
        double r46049 = r46039 * r46043;
        double r46050 = r46048 - r46049;
        double r46051 = r46047 + r46050;
        double r46052 = r46046 * r46051;
        double r46053 = r46039 + r46036;
        double r46054 = r46047 - r46053;
        double r46055 = r46036 / r46054;
        double r46056 = r46039 - r46043;
        double r46057 = r46055 * r46056;
        double r46058 = r46038 ? r46052 : r46057;
        return r46058;
}

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 r46059, r46060, r46061, r46062, r46063, r46064;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r46059);
        mpfr_init_set_str(r46060, "1.0", 10, MPFR_RNDN);
        mpfr_init(r46061);
        mpfr_init(r46062);
        mpfr_init(r46063);
        mpfr_init(r46064);
}

double f_im(double x) {
        mpfr_set_d(r46059, x, MPFR_RNDN);
        ;
        mpfr_add(r46061, r46059, r46060, MPFR_RNDN);
        mpfr_sqrt(r46062, r46061, MPFR_RNDN);
        mpfr_add(r46063, r46060, r46062, MPFR_RNDN);
        mpfr_div(r46064, r46059, r46063, MPFR_RNDN);
        return mpfr_get_d(r46064, MPFR_RNDN);
}

static mpfr_t r46065, r46066, r46067, r46068, r46069, r46070, r46071, r46072, r46073, r46074, r46075, r46076, r46077, r46078, r46079, r46080, r46081, r46082, r46083, r46084, r46085, r46086, r46087;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r46065);
        mpfr_init_set_str(r46066, "1.0224831783971646", 10, MPFR_RNDN);
        mpfr_init(r46067);
        mpfr_init_set_str(r46068, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r46069, "3", 10, MPFR_RNDN);
        mpfr_init(r46070);
        mpfr_init(r46071);
        mpfr_init(r46072);
        mpfr_init(r46073);
        mpfr_init(r46074);
        mpfr_init(r46075);
        mpfr_init(r46076);
        mpfr_init(r46077);
        mpfr_init(r46078);
        mpfr_init(r46079);
        mpfr_init(r46080);
        mpfr_init(r46081);
        mpfr_init(r46082);
        mpfr_init(r46083);
        mpfr_init(r46084);
        mpfr_init(r46085);
        mpfr_init(r46086);
        mpfr_init(r46087);
}

double f_fm(double x) {
        mpfr_set_d(r46065, x, MPFR_RNDN);
        ;
        mpfr_set_si(r46067, mpfr_cmp(r46065, r46066) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r46070, r46068, r46069, MPFR_RNDN);
        mpfr_add(r46071, r46065, r46068, MPFR_RNDN);
        mpfr_sqrt(r46072, r46071, MPFR_RNDN);
        mpfr_pow(r46073, r46072, r46069, MPFR_RNDN);
        mpfr_add(r46074, r46070, r46073, MPFR_RNDN);
        mpfr_div(r46075, r46065, r46074, MPFR_RNDN);
        mpfr_mul(r46076, r46068, r46068, MPFR_RNDN);
        mpfr_mul(r46077, r46072, r46072, MPFR_RNDN);
        mpfr_mul(r46078, r46068, r46072, MPFR_RNDN);
        mpfr_sub(r46079, r46077, r46078, MPFR_RNDN);
        mpfr_add(r46080, r46076, r46079, MPFR_RNDN);
        mpfr_mul(r46081, r46075, r46080, MPFR_RNDN);
        mpfr_add(r46082, r46068, r46065, MPFR_RNDN);
        mpfr_sub(r46083, r46076, r46082, MPFR_RNDN);
        mpfr_div(r46084, r46065, r46083, MPFR_RNDN);
        mpfr_sub(r46085, r46068, r46072, MPFR_RNDN);
        mpfr_mul(r46086, r46084, r46085, MPFR_RNDN);
        if (mpfr_get_si(r46067, MPFR_RNDN)) { mpfr_set(r46087, r46081, MPFR_RNDN); } else { mpfr_set(r46087, r46086, MPFR_RNDN); };
        return mpfr_get_d(r46087, MPFR_RNDN);
}

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

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r46088);
        mpfr_init_set_str(r46089, "1.0224831783971646", 10, MPFR_RNDN);
        mpfr_init(r46090);
        mpfr_init_set_str(r46091, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r46092, "3", 10, MPFR_RNDN);
        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);
        mpfr_init(r46109);
        mpfr_init(r46110);
}

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

