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

char *name = "Prelude:atanh from fay-base-0.20.0.1";

double f_if(float x) {
        float r41280 = x;
        float r41281 = 1.0;
        float r41282 = r41280 + r41281;
        float r41283 = r41281 - r41280;
        float r41284 = r41282 / r41283;
        return r41284;
}

double f_id(double x) {
        double r41285 = x;
        double r41286 = 1.0;
        double r41287 = r41285 + r41286;
        double r41288 = r41286 - r41285;
        double r41289 = r41287 / r41288;
        return r41289;
}


double f_of(float x) {
        float r41290 = x;
        float r41291 = 1.0;
        float r41292 = r41290 + r41291;
        float r41293 = r41291 - r41290;
        float r41294 = r41292 / r41293;
        return r41294;
}

double f_od(double x) {
        double r41295 = x;
        double r41296 = 1.0;
        double r41297 = r41295 + r41296;
        double r41298 = r41296 - r41295;
        double r41299 = r41297 / r41298;
        return r41299;
}

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 r41300, r41301, r41302, r41303, r41304;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r41300);
        mpfr_init_set_str(r41301, "1.0", 10, MPFR_RNDN);
        mpfr_init(r41302);
        mpfr_init(r41303);
        mpfr_init(r41304);
}

double f_im(double x) {
        mpfr_set_d(r41300, x, MPFR_RNDN);
        ;
        mpfr_add(r41302, r41300, r41301, MPFR_RNDN);
        mpfr_sub(r41303, r41301, r41300, MPFR_RNDN);
        mpfr_div(r41304, r41302, r41303, MPFR_RNDN);
        return mpfr_get_d(r41304, MPFR_RNDN);
}

static mpfr_t r41305, r41306, r41307, r41308, r41309;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41305);
        mpfr_init_set_str(r41306, "1.0", 10, MPFR_RNDN);
        mpfr_init(r41307);
        mpfr_init(r41308);
        mpfr_init(r41309);
}

double f_fm(double x) {
        mpfr_set_d(r41305, x, MPFR_RNDN);
        ;
        mpfr_add(r41307, r41305, r41306, MPFR_RNDN);
        mpfr_sub(r41308, r41306, r41305, MPFR_RNDN);
        mpfr_div(r41309, r41307, r41308, MPFR_RNDN);
        return mpfr_get_d(r41309, MPFR_RNDN);
}

static mpfr_t r41310, r41311, r41312, r41313, r41314;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41310);
        mpfr_init_set_str(r41311, "1.0", 10, MPFR_RNDN);
        mpfr_init(r41312);
        mpfr_init(r41313);
        mpfr_init(r41314);
}

double f_dm(double x) {
        mpfr_set_d(r41310, x, MPFR_RNDN);
        ;
        mpfr_add(r41312, r41310, r41311, MPFR_RNDN);
        mpfr_sub(r41313, r41311, r41310, MPFR_RNDN);
        mpfr_div(r41314, r41312, r41313, MPFR_RNDN);
        return mpfr_get_d(r41314, MPFR_RNDN);
}

