#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 r18020 = x;
        float r18021 = r18020 / r18020;
        float r18022 = 1.0f;
        float r18023 = r18022 / r18020;
        float r18024 = r18020 * r18020;
        float r18025 = sqrt(r18024);
        float r18026 = r18023 * r18025;
        float r18027 = r18021 - r18026;
        return r18027;
}

double f_id(double x) {
        double r18028 = x;
        double r18029 = r18028 / r18028;
        double r18030 = 1.0;
        double r18031 = r18030 / r18028;
        double r18032 = r18028 * r18028;
        double r18033 = sqrt(r18032);
        double r18034 = r18031 * r18033;
        double r18035 = r18029 - r18034;
        return r18035;
}


double f_of(float x) {
        float r18036 = 1.0f;
        float r18037 = x;
        float r18038 = fabs(r18037);
        float r18039 = r18038 / r18037;
        float r18040 = r18036 - r18039;
        return r18040;
}

double f_od(double x) {
        double r18041 = 1.0;
        double r18042 = x;
        double r18043 = fabs(r18042);
        double r18044 = r18043 / r18042;
        double r18045 = r18041 - r18044;
        return r18045;
}

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 r18046, r18047, r18048, r18049, r18050, r18051, r18052, r18053;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r18046);
        mpfr_init(r18047);
        mpfr_init_set_str(r18048, "1", 10, MPFR_RNDN);
        mpfr_init(r18049);
        mpfr_init(r18050);
        mpfr_init(r18051);
        mpfr_init(r18052);
        mpfr_init(r18053);
}

double f_im(double x) {
        mpfr_set_d(r18046, x, MPFR_RNDN);
        mpfr_div(r18047, r18046, r18046, MPFR_RNDN);
        ;
        mpfr_div(r18049, r18048, r18046, MPFR_RNDN);
        mpfr_mul(r18050, r18046, r18046, MPFR_RNDN);
        mpfr_sqrt(r18051, r18050, MPFR_RNDN);
        mpfr_mul(r18052, r18049, r18051, MPFR_RNDN);
        mpfr_sub(r18053, r18047, r18052, MPFR_RNDN);
        return mpfr_get_d(r18053, MPFR_RNDN);
}

static mpfr_t r18054, r18055, r18056, r18057, r18058;

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

double f_fm(double x) {
        ;
        mpfr_set_d(r18055, x, MPFR_RNDN);
        mpfr_abs(r18056, r18055, MPFR_RNDN);
        mpfr_div(r18057, r18056, r18055, MPFR_RNDN);
        mpfr_sub(r18058, r18054, r18057, MPFR_RNDN);
        return mpfr_get_d(r18058, MPFR_RNDN);
}

static mpfr_t r18059, r18060, r18061, r18062, r18063;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18059, "1", 10, MPFR_RNDN);
        mpfr_init(r18060);
        mpfr_init(r18061);
        mpfr_init(r18062);
        mpfr_init(r18063);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r18060, x, MPFR_RNDN);
        mpfr_abs(r18061, r18060, MPFR_RNDN);
        mpfr_div(r18062, r18061, r18060, MPFR_RNDN);
        mpfr_sub(r18063, r18059, r18062, MPFR_RNDN);
        return mpfr_get_d(r18063, MPFR_RNDN);
}

