#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 r41532 = x;
        float r41533 = 1.0;
        float r41534 = r41532 + r41533;
        float r41535 = r41533 - r41532;
        float r41536 = r41534 / r41535;
        return r41536;
}

double f_id(double x) {
        double r41537 = x;
        double r41538 = 1.0;
        double r41539 = r41537 + r41538;
        double r41540 = r41538 - r41537;
        double r41541 = r41539 / r41540;
        return r41541;
}


double f_of(float x) {
        float r41542 = x;
        float r41543 = 1.0;
        float r41544 = r41542 + r41543;
        float r41545 = r41543 - r41542;
        float r41546 = r41544 / r41545;
        return r41546;
}

double f_od(double x) {
        double r41547 = x;
        double r41548 = 1.0;
        double r41549 = r41547 + r41548;
        double r41550 = r41548 - r41547;
        double r41551 = r41549 / r41550;
        return r41551;
}

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 r41552, r41553, r41554, r41555, r41556;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r41552);
        mpfr_init_set_str(r41553, "1.0", 10, MPFR_RNDN);
        mpfr_init(r41554);
        mpfr_init(r41555);
        mpfr_init(r41556);
}

double f_im(double x) {
        mpfr_set_d(r41552, x, MPFR_RNDN);
        ;
        mpfr_add(r41554, r41552, r41553, MPFR_RNDN);
        mpfr_sub(r41555, r41553, r41552, MPFR_RNDN);
        mpfr_div(r41556, r41554, r41555, MPFR_RNDN);
        return mpfr_get_d(r41556, MPFR_RNDN);
}

static mpfr_t r41557, r41558, r41559, r41560, r41561;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41557);
        mpfr_init_set_str(r41558, "1.0", 10, MPFR_RNDN);
        mpfr_init(r41559);
        mpfr_init(r41560);
        mpfr_init(r41561);
}

double f_fm(double x) {
        mpfr_set_d(r41557, x, MPFR_RNDN);
        ;
        mpfr_add(r41559, r41557, r41558, MPFR_RNDN);
        mpfr_sub(r41560, r41558, r41557, MPFR_RNDN);
        mpfr_div(r41561, r41559, r41560, MPFR_RNDN);
        return mpfr_get_d(r41561, MPFR_RNDN);
}

static mpfr_t r41562, r41563, r41564, r41565, r41566;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41562);
        mpfr_init_set_str(r41563, "1.0", 10, MPFR_RNDN);
        mpfr_init(r41564);
        mpfr_init(r41565);
        mpfr_init(r41566);
}

double f_dm(double x) {
        mpfr_set_d(r41562, x, MPFR_RNDN);
        ;
        mpfr_add(r41564, r41562, r41563, MPFR_RNDN);
        mpfr_sub(r41565, r41563, r41562, MPFR_RNDN);
        mpfr_div(r41566, r41564, r41565, MPFR_RNDN);
        return mpfr_get_d(r41566, MPFR_RNDN);
}

