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

char *name = "sqrt sqr";

double f_if(float x) {
        float r18068 = x;
        float r18069 = r18068 / r18068;
        float r18070 = 1.0f;
        float r18071 = r18070 / r18068;
        float r18072 = r18068 * r18068;
        float r18073 = sqrt(r18072);
        float r18074 = r18071 * r18073;
        float r18075 = r18069 - r18074;
        return r18075;
}

double f_id(double x) {
        double r18076 = x;
        double r18077 = r18076 / r18076;
        double r18078 = 1.0;
        double r18079 = r18078 / r18076;
        double r18080 = r18076 * r18076;
        double r18081 = sqrt(r18080);
        double r18082 = r18079 * r18081;
        double r18083 = r18077 - r18082;
        return r18083;
}


double f_of(float x) {
        float r18084 = 1.0f;
        float r18085 = x;
        float r18086 = fabs(r18085);
        float r18087 = r18086 / r18085;
        float r18088 = r18084 - r18087;
        return r18088;
}

double f_od(double x) {
        double r18089 = 1.0;
        double r18090 = x;
        double r18091 = fabs(r18090);
        double r18092 = r18091 / r18090;
        double r18093 = r18089 - r18092;
        return r18093;
}

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 r18094, r18095, r18096, r18097, r18098, r18099, r18100, r18101;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r18094);
        mpfr_init(r18095);
        mpfr_init_set_str(r18096, "1", 10, MPFR_RNDN);
        mpfr_init(r18097);
        mpfr_init(r18098);
        mpfr_init(r18099);
        mpfr_init(r18100);
        mpfr_init(r18101);
}

double f_im(double x) {
        mpfr_set_d(r18094, x, MPFR_RNDN);
        mpfr_div(r18095, r18094, r18094, MPFR_RNDN);
        ;
        mpfr_div(r18097, r18096, r18094, MPFR_RNDN);
        mpfr_mul(r18098, r18094, r18094, MPFR_RNDN);
        mpfr_sqrt(r18099, r18098, MPFR_RNDN);
        mpfr_mul(r18100, r18097, r18099, MPFR_RNDN);
        mpfr_sub(r18101, r18095, r18100, MPFR_RNDN);
        return mpfr_get_d(r18101, MPFR_RNDN);
}

static mpfr_t r18102, r18103, r18104, r18105, r18106;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18102, "1", 10, MPFR_RNDN);
        mpfr_init(r18103);
        mpfr_init(r18104);
        mpfr_init(r18105);
        mpfr_init(r18106);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r18103, x, MPFR_RNDN);
        mpfr_abs(r18104, r18103, MPFR_RNDN);
        mpfr_div(r18105, r18104, r18103, MPFR_RNDN);
        mpfr_sub(r18106, r18102, r18105, MPFR_RNDN);
        return mpfr_get_d(r18106, MPFR_RNDN);
}

static mpfr_t r18107, r18108, r18109, r18110, r18111;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18107, "1", 10, MPFR_RNDN);
        mpfr_init(r18108);
        mpfr_init(r18109);
        mpfr_init(r18110);
        mpfr_init(r18111);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r18108, x, MPFR_RNDN);
        mpfr_abs(r18109, r18108, MPFR_RNDN);
        mpfr_div(r18110, r18109, r18108, MPFR_RNDN);
        mpfr_sub(r18111, r18107, r18110, MPFR_RNDN);
        return mpfr_get_d(r18111, MPFR_RNDN);
}

