#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 r28025 = x;
        float r28026 = r28025 / r28025;
        float r28027 = 1;
        float r28028 = r28027 / r28025;
        float r28029 = r28025 * r28025;
        float r28030 = sqrt(r28029);
        float r28031 = r28028 * r28030;
        float r28032 = r28026 - r28031;
        return r28032;
}

double f_id(double x) {
        double r28033 = x;
        double r28034 = r28033 / r28033;
        double r28035 = 1;
        double r28036 = r28035 / r28033;
        double r28037 = r28033 * r28033;
        double r28038 = sqrt(r28037);
        double r28039 = r28036 * r28038;
        double r28040 = r28034 - r28039;
        return r28040;
}


double f_of(float x) {
        float r28041 = 1;
        float r28042 = x;
        float r28043 = fabs(r28042);
        float r28044 = r28043 / r28042;
        float r28045 = r28041 - r28044;
        return r28045;
}

double f_od(double x) {
        double r28046 = 1;
        double r28047 = x;
        double r28048 = fabs(r28047);
        double r28049 = r28048 / r28047;
        double r28050 = r28046 - r28049;
        return r28050;
}

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 r28051, r28052, r28053, r28054, r28055, r28056, r28057, r28058;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28051);
        mpfr_init(r28052);
        mpfr_init_set_str(r28053, "1", 10, MPFR_RNDN);
        mpfr_init(r28054);
        mpfr_init(r28055);
        mpfr_init(r28056);
        mpfr_init(r28057);
        mpfr_init(r28058);
}

double f_im(double x) {
        mpfr_set_d(r28051, x, MPFR_RNDN);
        mpfr_div(r28052, r28051, r28051, MPFR_RNDN);
        ;
        mpfr_div(r28054, r28053, r28051, MPFR_RNDN);
        mpfr_mul(r28055, r28051, r28051, MPFR_RNDN);
        mpfr_sqrt(r28056, r28055, MPFR_RNDN);
        mpfr_mul(r28057, r28054, r28056, MPFR_RNDN);
        mpfr_sub(r28058, r28052, r28057, MPFR_RNDN);
        return mpfr_get_d(r28058, MPFR_RNDN);
}

static mpfr_t r28059, r28060, r28061, r28062, r28063;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28059, "1", 10, MPFR_RNDN);
        mpfr_init(r28060);
        mpfr_init(r28061);
        mpfr_init(r28062);
        mpfr_init(r28063);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r28060, x, MPFR_RNDN);
        mpfr_abs(r28061, r28060, MPFR_RNDN);
        mpfr_div(r28062, r28061, r28060, MPFR_RNDN);
        mpfr_sub(r28063, r28059, r28062, MPFR_RNDN);
        return mpfr_get_d(r28063, MPFR_RNDN);
}

static mpfr_t r28064, r28065, r28066, r28067, r28068;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28064, "1", 10, MPFR_RNDN);
        mpfr_init(r28065);
        mpfr_init(r28066);
        mpfr_init(r28067);
        mpfr_init(r28068);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r28065, x, MPFR_RNDN);
        mpfr_abs(r28066, r28065, MPFR_RNDN);
        mpfr_div(r28067, r28066, r28065, MPFR_RNDN);
        mpfr_sub(r28068, r28064, r28067, MPFR_RNDN);
        return mpfr_get_d(r28068, MPFR_RNDN);
}

