#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "3frac (problem 3.3.3)";

double f_if(float x) {
        float r58189 = 1.0f;
        float r58190 = x;
        float r58191 = r58190 + r58189;
        float r58192 = r58189 / r58191;
        float r58193 = 2.0f;
        float r58194 = r58193 / r58190;
        float r58195 = r58192 - r58194;
        float r58196 = r58190 - r58189;
        float r58197 = r58189 / r58196;
        float r58198 = r58195 + r58197;
        return r58198;
}

double f_id(double x) {
        double r58199 = 1.0;
        double r58200 = x;
        double r58201 = r58200 + r58199;
        double r58202 = r58199 / r58201;
        double r58203 = 2.0;
        double r58204 = r58203 / r58200;
        double r58205 = r58202 - r58204;
        double r58206 = r58200 - r58199;
        double r58207 = r58199 / r58206;
        double r58208 = r58205 + r58207;
        return r58208;
}


double f_of(float x) {
        float r58209 = 2.0f;
        float r58210 = x;
        float r58211 = r58210 * r58210;
        float r58212 = r58211 + r58210;
        float r58213 = r58209 / r58212;
        float r58214 = 1.0f;
        float r58215 = r58210 - r58214;
        float r58216 = r58213 / r58215;
        return r58216;
}

double f_od(double x) {
        double r58217 = 2.0;
        double r58218 = x;
        double r58219 = r58218 * r58218;
        double r58220 = r58219 + r58218;
        double r58221 = r58217 / r58220;
        double r58222 = 1.0;
        double r58223 = r58218 - r58222;
        double r58224 = r58221 / r58223;
        return r58224;
}

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 r58225, r58226, r58227, r58228, r58229, r58230, r58231, r58232, r58233, r58234;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r58225, "1", 10, MPFR_RNDN);
        mpfr_init(r58226);
        mpfr_init(r58227);
        mpfr_init(r58228);
        mpfr_init_set_str(r58229, "2", 10, MPFR_RNDN);
        mpfr_init(r58230);
        mpfr_init(r58231);
        mpfr_init(r58232);
        mpfr_init(r58233);
        mpfr_init(r58234);
}

double f_im(double x) {
        ;
        mpfr_set_d(r58226, x, MPFR_RNDN);
        mpfr_add(r58227, r58226, r58225, MPFR_RNDN);
        mpfr_div(r58228, r58225, r58227, MPFR_RNDN);
        ;
        mpfr_div(r58230, r58229, r58226, MPFR_RNDN);
        mpfr_sub(r58231, r58228, r58230, MPFR_RNDN);
        mpfr_sub(r58232, r58226, r58225, MPFR_RNDN);
        mpfr_div(r58233, r58225, r58232, MPFR_RNDN);
        mpfr_add(r58234, r58231, r58233, MPFR_RNDN);
        return mpfr_get_d(r58234, MPFR_RNDN);
}

static mpfr_t r58235, r58236, r58237, r58238, r58239, r58240, r58241, r58242;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r58235, "2", 10, MPFR_RNDN);
        mpfr_init(r58236);
        mpfr_init(r58237);
        mpfr_init(r58238);
        mpfr_init(r58239);
        mpfr_init_set_str(r58240, "1", 10, MPFR_RNDN);
        mpfr_init(r58241);
        mpfr_init(r58242);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r58236, x, MPFR_RNDN);
        mpfr_sqr(r58237, r58236, MPFR_RNDN);
        mpfr_add(r58238, r58237, r58236, MPFR_RNDN);
        mpfr_div(r58239, r58235, r58238, MPFR_RNDN);
        ;
        mpfr_sub(r58241, r58236, r58240, MPFR_RNDN);
        mpfr_div(r58242, r58239, r58241, MPFR_RNDN);
        return mpfr_get_d(r58242, MPFR_RNDN);
}

static mpfr_t r58243, r58244, r58245, r58246, r58247, r58248, r58249, r58250;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r58243, "2", 10, MPFR_RNDN);
        mpfr_init(r58244);
        mpfr_init(r58245);
        mpfr_init(r58246);
        mpfr_init(r58247);
        mpfr_init_set_str(r58248, "1", 10, MPFR_RNDN);
        mpfr_init(r58249);
        mpfr_init(r58250);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r58244, x, MPFR_RNDN);
        mpfr_sqr(r58245, r58244, MPFR_RNDN);
        mpfr_add(r58246, r58245, r58244, MPFR_RNDN);
        mpfr_div(r58247, r58243, r58246, MPFR_RNDN);
        ;
        mpfr_sub(r58249, r58244, r58248, MPFR_RNDN);
        mpfr_div(r58250, r58247, r58249, MPFR_RNDN);
        return mpfr_get_d(r58250, MPFR_RNDN);
}

