#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 r18332 = x;
        float r18333 = r18332 / r18332;
        float r18334 = 1.0f;
        float r18335 = r18334 / r18332;
        float r18336 = r18332 * r18332;
        float r18337 = sqrt(r18336);
        float r18338 = r18335 * r18337;
        float r18339 = r18333 - r18338;
        return r18339;
}

double f_id(double x) {
        double r18340 = x;
        double r18341 = r18340 / r18340;
        double r18342 = 1.0;
        double r18343 = r18342 / r18340;
        double r18344 = r18340 * r18340;
        double r18345 = sqrt(r18344);
        double r18346 = r18343 * r18345;
        double r18347 = r18341 - r18346;
        return r18347;
}


double f_of(float x) {
        float r18348 = 1.0f;
        float r18349 = x;
        float r18350 = fabs(r18349);
        float r18351 = r18350 / r18349;
        float r18352 = r18348 - r18351;
        return r18352;
}

double f_od(double x) {
        double r18353 = 1.0;
        double r18354 = x;
        double r18355 = fabs(r18354);
        double r18356 = r18355 / r18354;
        double r18357 = r18353 - r18356;
        return r18357;
}

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 r18358, r18359, r18360, r18361, r18362, r18363, r18364, r18365;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r18358);
        mpfr_init(r18359);
        mpfr_init_set_str(r18360, "1", 10, MPFR_RNDN);
        mpfr_init(r18361);
        mpfr_init(r18362);
        mpfr_init(r18363);
        mpfr_init(r18364);
        mpfr_init(r18365);
}

double f_im(double x) {
        mpfr_set_d(r18358, x, MPFR_RNDN);
        mpfr_div(r18359, r18358, r18358, MPFR_RNDN);
        ;
        mpfr_div(r18361, r18360, r18358, MPFR_RNDN);
        mpfr_mul(r18362, r18358, r18358, MPFR_RNDN);
        mpfr_sqrt(r18363, r18362, MPFR_RNDN);
        mpfr_mul(r18364, r18361, r18363, MPFR_RNDN);
        mpfr_sub(r18365, r18359, r18364, MPFR_RNDN);
        return mpfr_get_d(r18365, MPFR_RNDN);
}

static mpfr_t r18366, r18367, r18368, r18369, r18370;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18366, "1", 10, MPFR_RNDN);
        mpfr_init(r18367);
        mpfr_init(r18368);
        mpfr_init(r18369);
        mpfr_init(r18370);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r18367, x, MPFR_RNDN);
        mpfr_abs(r18368, r18367, MPFR_RNDN);
        mpfr_div(r18369, r18368, r18367, MPFR_RNDN);
        mpfr_sub(r18370, r18366, r18369, MPFR_RNDN);
        return mpfr_get_d(r18370, MPFR_RNDN);
}

static mpfr_t r18371, r18372, r18373, r18374, r18375;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18371, "1", 10, MPFR_RNDN);
        mpfr_init(r18372);
        mpfr_init(r18373);
        mpfr_init(r18374);
        mpfr_init(r18375);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r18372, x, MPFR_RNDN);
        mpfr_abs(r18373, r18372, MPFR_RNDN);
        mpfr_div(r18374, r18373, r18372, MPFR_RNDN);
        mpfr_sub(r18375, r18371, r18374, MPFR_RNDN);
        return mpfr_get_d(r18375, MPFR_RNDN);
}

