#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 r18028 = x;
        float r18029 = r18028 / r18028;
        float r18030 = 1.0f;
        float r18031 = r18030 / r18028;
        float r18032 = r18028 * r18028;
        float r18033 = sqrt(r18032);
        float r18034 = r18031 * r18033;
        float r18035 = r18029 - r18034;
        return r18035;
}

double f_id(double x) {
        double r18036 = x;
        double r18037 = r18036 / r18036;
        double r18038 = 1.0;
        double r18039 = r18038 / r18036;
        double r18040 = r18036 * r18036;
        double r18041 = sqrt(r18040);
        double r18042 = r18039 * r18041;
        double r18043 = r18037 - r18042;
        return r18043;
}


double f_of(float x) {
        float r18044 = 1.0f;
        float r18045 = x;
        float r18046 = fabs(r18045);
        float r18047 = r18046 / r18045;
        float r18048 = r18044 - r18047;
        return r18048;
}

double f_od(double x) {
        double r18049 = 1.0;
        double r18050 = x;
        double r18051 = fabs(r18050);
        double r18052 = r18051 / r18050;
        double r18053 = r18049 - r18052;
        return r18053;
}

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 r18054, r18055, r18056, r18057, r18058, r18059, r18060, r18061;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r18054);
        mpfr_init(r18055);
        mpfr_init_set_str(r18056, "1", 10, MPFR_RNDN);
        mpfr_init(r18057);
        mpfr_init(r18058);
        mpfr_init(r18059);
        mpfr_init(r18060);
        mpfr_init(r18061);
}

double f_im(double x) {
        mpfr_set_d(r18054, x, MPFR_RNDN);
        mpfr_div(r18055, r18054, r18054, MPFR_RNDN);
        ;
        mpfr_div(r18057, r18056, r18054, MPFR_RNDN);
        mpfr_mul(r18058, r18054, r18054, MPFR_RNDN);
        mpfr_sqrt(r18059, r18058, MPFR_RNDN);
        mpfr_mul(r18060, r18057, r18059, MPFR_RNDN);
        mpfr_sub(r18061, r18055, r18060, MPFR_RNDN);
        return mpfr_get_d(r18061, MPFR_RNDN);
}

static mpfr_t r18062, r18063, r18064, r18065, r18066;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18062, "1", 10, MPFR_RNDN);
        mpfr_init(r18063);
        mpfr_init(r18064);
        mpfr_init(r18065);
        mpfr_init(r18066);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r18063, x, MPFR_RNDN);
        mpfr_abs(r18064, r18063, MPFR_RNDN);
        mpfr_div(r18065, r18064, r18063, MPFR_RNDN);
        mpfr_sub(r18066, r18062, r18065, MPFR_RNDN);
        return mpfr_get_d(r18066, MPFR_RNDN);
}

static mpfr_t r18067, r18068, r18069, r18070, r18071;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18067, "1", 10, MPFR_RNDN);
        mpfr_init(r18068);
        mpfr_init(r18069);
        mpfr_init(r18070);
        mpfr_init(r18071);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r18068, x, MPFR_RNDN);
        mpfr_abs(r18069, r18068, MPFR_RNDN);
        mpfr_div(r18070, r18069, r18068, MPFR_RNDN);
        mpfr_sub(r18071, r18067, r18070, MPFR_RNDN);
        return mpfr_get_d(r18071, MPFR_RNDN);
}

