#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 r27254 = 1;
        float r27255 = x;
        float r27256 = r27255 + r27254;
        float r27257 = r27254 / r27256;
        float r27258 = 2;
        float r27259 = r27258 / r27255;
        float r27260 = r27257 - r27259;
        float r27261 = r27255 - r27254;
        float r27262 = r27254 / r27261;
        float r27263 = r27260 + r27262;
        return r27263;
}

double f_id(double x) {
        double r27264 = 1;
        double r27265 = x;
        double r27266 = r27265 + r27264;
        double r27267 = r27264 / r27266;
        double r27268 = 2;
        double r27269 = r27268 / r27265;
        double r27270 = r27267 - r27269;
        double r27271 = r27265 - r27264;
        double r27272 = r27264 / r27271;
        double r27273 = r27270 + r27272;
        return r27273;
}


double f_of(float x) {
        float r27274 = 2;
        float r27275 = x;
        float r27276 = 1;
        float r27277 = r27275 + r27276;
        float r27278 = r27277 * r27275;
        float r27279 = r27274 / r27278;
        float r27280 = r27275 - r27276;
        float r27281 = r27279 / r27280;
        return r27281;
}

double f_od(double x) {
        double r27282 = 2;
        double r27283 = x;
        double r27284 = 1;
        double r27285 = r27283 + r27284;
        double r27286 = r27285 * r27283;
        double r27287 = r27282 / r27286;
        double r27288 = r27283 - r27284;
        double r27289 = r27287 / r27288;
        return r27289;
}

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 r27290, r27291, r27292, r27293, r27294, r27295, r27296, r27297, r27298, r27299;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27290, "1", 10, MPFR_RNDN);
        mpfr_init(r27291);
        mpfr_init(r27292);
        mpfr_init(r27293);
        mpfr_init_set_str(r27294, "2", 10, MPFR_RNDN);
        mpfr_init(r27295);
        mpfr_init(r27296);
        mpfr_init(r27297);
        mpfr_init(r27298);
        mpfr_init(r27299);
}

double f_im(double x) {
        ;
        mpfr_set_d(r27291, x, MPFR_RNDN);
        mpfr_add(r27292, r27291, r27290, MPFR_RNDN);
        mpfr_div(r27293, r27290, r27292, MPFR_RNDN);
        ;
        mpfr_div(r27295, r27294, r27291, MPFR_RNDN);
        mpfr_sub(r27296, r27293, r27295, MPFR_RNDN);
        mpfr_sub(r27297, r27291, r27290, MPFR_RNDN);
        mpfr_div(r27298, r27290, r27297, MPFR_RNDN);
        mpfr_add(r27299, r27296, r27298, MPFR_RNDN);
        return mpfr_get_d(r27299, MPFR_RNDN);
}

static mpfr_t r27300, r27301, r27302, r27303, r27304, r27305, r27306, r27307;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27300, "2", 10, MPFR_RNDN);
        mpfr_init(r27301);
        mpfr_init_set_str(r27302, "1", 10, MPFR_RNDN);
        mpfr_init(r27303);
        mpfr_init(r27304);
        mpfr_init(r27305);
        mpfr_init(r27306);
        mpfr_init(r27307);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r27301, x, MPFR_RNDN);
        ;
        mpfr_add(r27303, r27301, r27302, MPFR_RNDN);
        mpfr_mul(r27304, r27303, r27301, MPFR_RNDN);
        mpfr_div(r27305, r27300, r27304, MPFR_RNDN);
        mpfr_sub(r27306, r27301, r27302, MPFR_RNDN);
        mpfr_div(r27307, r27305, r27306, MPFR_RNDN);
        return mpfr_get_d(r27307, MPFR_RNDN);
}

static mpfr_t r27308, r27309, r27310, r27311, r27312, r27313, r27314, r27315;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27308, "2", 10, MPFR_RNDN);
        mpfr_init(r27309);
        mpfr_init_set_str(r27310, "1", 10, MPFR_RNDN);
        mpfr_init(r27311);
        mpfr_init(r27312);
        mpfr_init(r27313);
        mpfr_init(r27314);
        mpfr_init(r27315);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r27309, x, MPFR_RNDN);
        ;
        mpfr_add(r27311, r27309, r27310, MPFR_RNDN);
        mpfr_mul(r27312, r27311, r27309, MPFR_RNDN);
        mpfr_div(r27313, r27308, r27312, MPFR_RNDN);
        mpfr_sub(r27314, r27309, r27310, MPFR_RNDN);
        mpfr_div(r27315, r27313, r27314, MPFR_RNDN);
        return mpfr_get_d(r27315, MPFR_RNDN);
}

