#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 r45753 = x;
        float r45754 = 1.0;
        float r45755 = r45753 + r45754;
        float r45756 = sqrt(r45755);
        float r45757 = r45754 + r45756;
        float r45758 = r45753 / r45757;
        return r45758;
}

double f_id(double x) {
        double r45759 = x;
        double r45760 = 1.0;
        double r45761 = r45759 + r45760;
        double r45762 = sqrt(r45761);
        double r45763 = r45760 + r45762;
        double r45764 = r45759 / r45763;
        return r45764;
}


double f_of(float x) {
        float r45765 = x;
        float r45766 = 28.914529720558605;
        bool r45767 = r45765 <= r45766;
        float r45768 = 1.0;
        float r45769 = 3;
        float r45770 = pow(r45768, r45769);
        float r45771 = r45765 + r45768;
        float r45772 = sqrt(r45771);
        float r45773 = pow(r45772, r45769);
        float r45774 = r45770 + r45773;
        float r45775 = r45765 / r45774;
        float r45776 = r45768 * r45768;
        float r45777 = r45772 * r45772;
        float r45778 = r45768 * r45772;
        float r45779 = r45777 - r45778;
        float r45780 = r45776 + r45779;
        float r45781 = r45775 * r45780;
        float r45782 = r45768 + r45765;
        float r45783 = r45776 - r45782;
        float r45784 = r45765 / r45783;
        float r45785 = r45768 - r45772;
        float r45786 = r45784 * r45785;
        float r45787 = r45767 ? r45781 : r45786;
        return r45787;
}

double f_od(double x) {
        double r45788 = x;
        double r45789 = 28.914529720558605;
        bool r45790 = r45788 <= r45789;
        double r45791 = 1.0;
        double r45792 = 3;
        double r45793 = pow(r45791, r45792);
        double r45794 = r45788 + r45791;
        double r45795 = sqrt(r45794);
        double r45796 = pow(r45795, r45792);
        double r45797 = r45793 + r45796;
        double r45798 = r45788 / r45797;
        double r45799 = r45791 * r45791;
        double r45800 = r45795 * r45795;
        double r45801 = r45791 * r45795;
        double r45802 = r45800 - r45801;
        double r45803 = r45799 + r45802;
        double r45804 = r45798 * r45803;
        double r45805 = r45791 + r45788;
        double r45806 = r45799 - r45805;
        double r45807 = r45788 / r45806;
        double r45808 = r45791 - r45795;
        double r45809 = r45807 * r45808;
        double r45810 = r45790 ? r45804 : r45809;
        return r45810;
}

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 r45811, r45812, r45813, r45814, r45815, r45816;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45811);
        mpfr_init_set_str(r45812, "1.0", 10, MPFR_RNDN);
        mpfr_init(r45813);
        mpfr_init(r45814);
        mpfr_init(r45815);
        mpfr_init(r45816);
}

double f_im(double x) {
        mpfr_set_d(r45811, x, MPFR_RNDN);
        ;
        mpfr_add(r45813, r45811, r45812, MPFR_RNDN);
        mpfr_sqrt(r45814, r45813, MPFR_RNDN);
        mpfr_add(r45815, r45812, r45814, MPFR_RNDN);
        mpfr_div(r45816, r45811, r45815, MPFR_RNDN);
        return mpfr_get_d(r45816, MPFR_RNDN);
}

static mpfr_t r45817, r45818, r45819, r45820, r45821, r45822, r45823, r45824, r45825, r45826, r45827, r45828, r45829, r45830, r45831, r45832, r45833, r45834, r45835, r45836, r45837, r45838, r45839;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45817);
        mpfr_init_set_str(r45818, "28.914529720558605", 10, MPFR_RNDN);
        mpfr_init(r45819);
        mpfr_init_set_str(r45820, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r45821, "3", 10, MPFR_RNDN);
        mpfr_init(r45822);
        mpfr_init(r45823);
        mpfr_init(r45824);
        mpfr_init(r45825);
        mpfr_init(r45826);
        mpfr_init(r45827);
        mpfr_init(r45828);
        mpfr_init(r45829);
        mpfr_init(r45830);
        mpfr_init(r45831);
        mpfr_init(r45832);
        mpfr_init(r45833);
        mpfr_init(r45834);
        mpfr_init(r45835);
        mpfr_init(r45836);
        mpfr_init(r45837);
        mpfr_init(r45838);
        mpfr_init(r45839);
}

double f_fm(double x) {
        mpfr_set_d(r45817, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45819, mpfr_cmp(r45817, r45818) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r45822, r45820, r45821, MPFR_RNDN);
        mpfr_add(r45823, r45817, r45820, MPFR_RNDN);
        mpfr_sqrt(r45824, r45823, MPFR_RNDN);
        mpfr_pow(r45825, r45824, r45821, MPFR_RNDN);
        mpfr_add(r45826, r45822, r45825, MPFR_RNDN);
        mpfr_div(r45827, r45817, r45826, MPFR_RNDN);
        mpfr_mul(r45828, r45820, r45820, MPFR_RNDN);
        mpfr_mul(r45829, r45824, r45824, MPFR_RNDN);
        mpfr_mul(r45830, r45820, r45824, MPFR_RNDN);
        mpfr_sub(r45831, r45829, r45830, MPFR_RNDN);
        mpfr_add(r45832, r45828, r45831, MPFR_RNDN);
        mpfr_mul(r45833, r45827, r45832, MPFR_RNDN);
        mpfr_add(r45834, r45820, r45817, MPFR_RNDN);
        mpfr_sub(r45835, r45828, r45834, MPFR_RNDN);
        mpfr_div(r45836, r45817, r45835, MPFR_RNDN);
        mpfr_sub(r45837, r45820, r45824, MPFR_RNDN);
        mpfr_mul(r45838, r45836, r45837, MPFR_RNDN);
        if (mpfr_get_si(r45819, MPFR_RNDN)) { mpfr_set(r45839, r45833, MPFR_RNDN); } else { mpfr_set(r45839, r45838, MPFR_RNDN); };
        return mpfr_get_d(r45839, MPFR_RNDN);
}

static mpfr_t r45840, r45841, r45842, r45843, r45844, r45845, r45846, r45847, r45848, r45849, r45850, r45851, r45852, r45853, r45854, r45855, r45856, r45857, r45858, r45859, r45860, r45861, r45862;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45840);
        mpfr_init_set_str(r45841, "28.914529720558605", 10, MPFR_RNDN);
        mpfr_init(r45842);
        mpfr_init_set_str(r45843, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r45844, "3", 10, MPFR_RNDN);
        mpfr_init(r45845);
        mpfr_init(r45846);
        mpfr_init(r45847);
        mpfr_init(r45848);
        mpfr_init(r45849);
        mpfr_init(r45850);
        mpfr_init(r45851);
        mpfr_init(r45852);
        mpfr_init(r45853);
        mpfr_init(r45854);
        mpfr_init(r45855);
        mpfr_init(r45856);
        mpfr_init(r45857);
        mpfr_init(r45858);
        mpfr_init(r45859);
        mpfr_init(r45860);
        mpfr_init(r45861);
        mpfr_init(r45862);
}

double f_dm(double x) {
        mpfr_set_d(r45840, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45842, mpfr_cmp(r45840, r45841) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r45845, r45843, r45844, MPFR_RNDN);
        mpfr_add(r45846, r45840, r45843, MPFR_RNDN);
        mpfr_sqrt(r45847, r45846, MPFR_RNDN);
        mpfr_pow(r45848, r45847, r45844, MPFR_RNDN);
        mpfr_add(r45849, r45845, r45848, MPFR_RNDN);
        mpfr_div(r45850, r45840, r45849, MPFR_RNDN);
        mpfr_mul(r45851, r45843, r45843, MPFR_RNDN);
        mpfr_mul(r45852, r45847, r45847, MPFR_RNDN);
        mpfr_mul(r45853, r45843, r45847, MPFR_RNDN);
        mpfr_sub(r45854, r45852, r45853, MPFR_RNDN);
        mpfr_add(r45855, r45851, r45854, MPFR_RNDN);
        mpfr_mul(r45856, r45850, r45855, MPFR_RNDN);
        mpfr_add(r45857, r45843, r45840, MPFR_RNDN);
        mpfr_sub(r45858, r45851, r45857, MPFR_RNDN);
        mpfr_div(r45859, r45840, r45858, MPFR_RNDN);
        mpfr_sub(r45860, r45843, r45847, MPFR_RNDN);
        mpfr_mul(r45861, r45859, r45860, MPFR_RNDN);
        if (mpfr_get_si(r45842, MPFR_RNDN)) { mpfr_set(r45862, r45856, MPFR_RNDN); } else { mpfr_set(r45862, r45861, MPFR_RNDN); };
        return mpfr_get_d(r45862, MPFR_RNDN);
}

