#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 r18059 = x;
        float r18060 = r18059 / r18059;
        float r18061 = 1.0f;
        float r18062 = r18061 / r18059;
        float r18063 = r18059 * r18059;
        float r18064 = sqrt(r18063);
        float r18065 = r18062 * r18064;
        float r18066 = r18060 - r18065;
        return r18066;
}

double f_id(double x) {
        double r18067 = x;
        double r18068 = r18067 / r18067;
        double r18069 = 1.0;
        double r18070 = r18069 / r18067;
        double r18071 = r18067 * r18067;
        double r18072 = sqrt(r18071);
        double r18073 = r18070 * r18072;
        double r18074 = r18068 - r18073;
        return r18074;
}


double f_of(float x) {
        float r18075 = 1.0f;
        float r18076 = x;
        float r18077 = fabs(r18076);
        float r18078 = r18077 / r18076;
        float r18079 = r18075 - r18078;
        return r18079;
}

double f_od(double x) {
        double r18080 = 1.0;
        double r18081 = x;
        double r18082 = fabs(r18081);
        double r18083 = r18082 / r18081;
        double r18084 = r18080 - r18083;
        return r18084;
}

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 r18085, r18086, r18087, r18088, r18089, r18090, r18091, r18092;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r18085);
        mpfr_init(r18086);
        mpfr_init_set_str(r18087, "1", 10, MPFR_RNDN);
        mpfr_init(r18088);
        mpfr_init(r18089);
        mpfr_init(r18090);
        mpfr_init(r18091);
        mpfr_init(r18092);
}

double f_im(double x) {
        mpfr_set_d(r18085, x, MPFR_RNDN);
        mpfr_div(r18086, r18085, r18085, MPFR_RNDN);
        ;
        mpfr_div(r18088, r18087, r18085, MPFR_RNDN);
        mpfr_mul(r18089, r18085, r18085, MPFR_RNDN);
        mpfr_sqrt(r18090, r18089, MPFR_RNDN);
        mpfr_mul(r18091, r18088, r18090, MPFR_RNDN);
        mpfr_sub(r18092, r18086, r18091, MPFR_RNDN);
        return mpfr_get_d(r18092, MPFR_RNDN);
}

static mpfr_t r18093, r18094, r18095, r18096, r18097;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18093, "1", 10, MPFR_RNDN);
        mpfr_init(r18094);
        mpfr_init(r18095);
        mpfr_init(r18096);
        mpfr_init(r18097);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r18094, x, MPFR_RNDN);
        mpfr_abs(r18095, r18094, MPFR_RNDN);
        mpfr_div(r18096, r18095, r18094, MPFR_RNDN);
        mpfr_sub(r18097, r18093, r18096, MPFR_RNDN);
        return mpfr_get_d(r18097, MPFR_RNDN);
}

static mpfr_t r18098, r18099, r18100, r18101, r18102;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18098, "1", 10, MPFR_RNDN);
        mpfr_init(r18099);
        mpfr_init(r18100);
        mpfr_init(r18101);
        mpfr_init(r18102);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r18099, x, MPFR_RNDN);
        mpfr_abs(r18100, r18099, MPFR_RNDN);
        mpfr_div(r18101, r18100, r18099, MPFR_RNDN);
        mpfr_sub(r18102, r18098, r18101, MPFR_RNDN);
        return mpfr_get_d(r18102, MPFR_RNDN);
}

