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

char *name = "Hyperbolic arc-(co)tangent";

double f_if(float x) {
        float r8849 = 1.0f;
        float r8850 = 2.0f;
        float r8851 = r8849 / r8850;
        float r8852 = x;
        float r8853 = r8849 + r8852;
        float r8854 = r8849 - r8852;
        float r8855 = r8853 / r8854;
        float r8856 = log(r8855);
        float r8857 = r8851 * r8856;
        return r8857;
}

double f_id(double x) {
        double r8858 = 1.0;
        double r8859 = 2.0;
        double r8860 = r8858 / r8859;
        double r8861 = x;
        double r8862 = r8858 + r8861;
        double r8863 = r8858 - r8861;
        double r8864 = r8862 / r8863;
        double r8865 = log(r8864);
        double r8866 = r8860 * r8865;
        return r8866;
}


double f_of(float x) {
        float r8867 = 2.0f;
        float r8868 = x;
        float r8869 = r8867 * r8868;
        float r8870 = 5.0f;
        float r8871 = pow(r8868, r8870);
        float r8872 = 0.4f;
        float r8873 = r8871 * r8872;
        float r8874 = 0.6666666666666666f;
        float r8875 = 3.0f;
        float r8876 = pow(r8868, r8875);
        float r8877 = r8874 * r8876;
        float r8878 = r8873 + r8877;
        float r8879 = r8869 + r8878;
        float r8880 = r8879 / r8867;
        return r8880;
}

double f_od(double x) {
        double r8881 = 2.0;
        double r8882 = x;
        double r8883 = r8881 * r8882;
        double r8884 = 5.0;
        double r8885 = pow(r8882, r8884);
        double r8886 = 0.4;
        double r8887 = r8885 * r8886;
        double r8888 = 0.6666666666666666;
        double r8889 = 3.0;
        double r8890 = pow(r8882, r8889);
        double r8891 = r8888 * r8890;
        double r8892 = r8887 + r8891;
        double r8893 = r8883 + r8892;
        double r8894 = r8893 / r8881;
        return r8894;
}

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 r8895, r8896, r8897, r8898, r8899, r8900, r8901, r8902, r8903;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8895, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8896, "2", 10, MPFR_RNDN);
        mpfr_init(r8897);
        mpfr_init(r8898);
        mpfr_init(r8899);
        mpfr_init(r8900);
        mpfr_init(r8901);
        mpfr_init(r8902);
        mpfr_init(r8903);
}

double f_im(double x) {
        ;
        ;
        mpfr_div(r8897, r8895, r8896, MPFR_RNDN);
        mpfr_set_d(r8898, x, MPFR_RNDN);
        mpfr_add(r8899, r8895, r8898, MPFR_RNDN);
        mpfr_sub(r8900, r8895, r8898, MPFR_RNDN);
        mpfr_div(r8901, r8899, r8900, MPFR_RNDN);
        mpfr_log(r8902, r8901, MPFR_RNDN);
        mpfr_mul(r8903, r8897, r8902, MPFR_RNDN);
        return mpfr_get_d(r8903, MPFR_RNDN);
}

static mpfr_t r8904, r8905, r8906, r8907, r8908, r8909, r8910, r8911, r8912, r8913, r8914, r8915, r8916, r8917;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8904, "2", 10, MPFR_RNDN);
        mpfr_init(r8905);
        mpfr_init(r8906);
        mpfr_init_set_str(r8907, "5", 10, MPFR_RNDN);
        mpfr_init(r8908);
        mpfr_init_set_str(r8909, "2/5", 10, MPFR_RNDN);
        mpfr_init(r8910);
        mpfr_init_set_str(r8911, "2/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r8912, "3", 10, MPFR_RNDN);
        mpfr_init(r8913);
        mpfr_init(r8914);
        mpfr_init(r8915);
        mpfr_init(r8916);
        mpfr_init(r8917);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r8905, x, MPFR_RNDN);
        mpfr_mul(r8906, r8904, r8905, MPFR_RNDN);
        ;
        mpfr_pow(r8908, r8905, r8907, MPFR_RNDN);
        ;
        mpfr_mul(r8910, r8908, r8909, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8913, r8905, r8912, MPFR_RNDN);
        mpfr_mul(r8914, r8911, r8913, MPFR_RNDN);
        mpfr_add(r8915, r8910, r8914, MPFR_RNDN);
        mpfr_add(r8916, r8906, r8915, MPFR_RNDN);
        mpfr_div(r8917, r8916, r8904, MPFR_RNDN);
        return mpfr_get_d(r8917, MPFR_RNDN);
}

static mpfr_t r8918, r8919, r8920, r8921, r8922, r8923, r8924, r8925, r8926, r8927, r8928, r8929, r8930, r8931;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8918, "2", 10, MPFR_RNDN);
        mpfr_init(r8919);
        mpfr_init(r8920);
        mpfr_init_set_str(r8921, "5", 10, MPFR_RNDN);
        mpfr_init(r8922);
        mpfr_init_set_str(r8923, "2/5", 10, MPFR_RNDN);
        mpfr_init(r8924);
        mpfr_init_set_str(r8925, "2/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r8926, "3", 10, MPFR_RNDN);
        mpfr_init(r8927);
        mpfr_init(r8928);
        mpfr_init(r8929);
        mpfr_init(r8930);
        mpfr_init(r8931);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r8919, x, MPFR_RNDN);
        mpfr_mul(r8920, r8918, r8919, MPFR_RNDN);
        ;
        mpfr_pow(r8922, r8919, r8921, MPFR_RNDN);
        ;
        mpfr_mul(r8924, r8922, r8923, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8927, r8919, r8926, MPFR_RNDN);
        mpfr_mul(r8928, r8925, r8927, MPFR_RNDN);
        mpfr_add(r8929, r8924, r8928, MPFR_RNDN);
        mpfr_add(r8930, r8920, r8929, MPFR_RNDN);
        mpfr_div(r8931, r8930, r8918, MPFR_RNDN);
        return mpfr_get_d(r8931, MPFR_RNDN);
}

