#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 r5182079 = 1.0f;
        float r5182080 = x;
        float r5182081 = r5182080 + r5182079;
        float r5182082 = r5182079 / r5182081;
        float r5182083 = 2.0f;
        float r5182084 = r5182083 / r5182080;
        float r5182085 = r5182082 - r5182084;
        float r5182086 = r5182080 - r5182079;
        float r5182087 = r5182079 / r5182086;
        float r5182088 = r5182085 + r5182087;
        return r5182088;
}

double f_id(double x) {
        double r5182089 = 1.0;
        double r5182090 = x;
        double r5182091 = r5182090 + r5182089;
        double r5182092 = r5182089 / r5182091;
        double r5182093 = 2.0;
        double r5182094 = r5182093 / r5182090;
        double r5182095 = r5182092 - r5182094;
        double r5182096 = r5182090 - r5182089;
        double r5182097 = r5182089 / r5182096;
        double r5182098 = r5182095 + r5182097;
        return r5182098;
}


double f_of(float x) {
        float r5182099 = 2.0f;
        float r5182100 = x;
        float r5182101 = r5182099 / r5182100;
        float r5182102 = 0.0f;
        float r5182103 = r5182101 - r5182102;
        float r5182104 = 1.0f;
        float r5182105 = r5182100 - r5182104;
        float r5182106 = r5182104 + r5182100;
        float r5182107 = r5182105 * r5182106;
        float r5182108 = r5182103 / r5182107;
        return r5182108;
}

double f_od(double x) {
        double r5182109 = 2.0;
        double r5182110 = x;
        double r5182111 = r5182109 / r5182110;
        double r5182112 = 0.0;
        double r5182113 = r5182111 - r5182112;
        double r5182114 = 1.0;
        double r5182115 = r5182110 - r5182114;
        double r5182116 = r5182114 + r5182110;
        double r5182117 = r5182115 * r5182116;
        double r5182118 = r5182113 / r5182117;
        return r5182118;
}

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 r5182119, r5182120, r5182121, r5182122, r5182123, r5182124, r5182125, r5182126, r5182127, r5182128;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r5182119, "1", 10, MPFR_RNDN);
        mpfr_init(r5182120);
        mpfr_init(r5182121);
        mpfr_init(r5182122);
        mpfr_init_set_str(r5182123, "2", 10, MPFR_RNDN);
        mpfr_init(r5182124);
        mpfr_init(r5182125);
        mpfr_init(r5182126);
        mpfr_init(r5182127);
        mpfr_init(r5182128);
}

double f_im(double x) {
        ;
        mpfr_set_d(r5182120, x, MPFR_RNDN);
        mpfr_add(r5182121, r5182120, r5182119, MPFR_RNDN);
        mpfr_div(r5182122, r5182119, r5182121, MPFR_RNDN);
        ;
        mpfr_div(r5182124, r5182123, r5182120, MPFR_RNDN);
        mpfr_sub(r5182125, r5182122, r5182124, MPFR_RNDN);
        mpfr_sub(r5182126, r5182120, r5182119, MPFR_RNDN);
        mpfr_div(r5182127, r5182119, r5182126, MPFR_RNDN);
        mpfr_add(r5182128, r5182125, r5182127, MPFR_RNDN);
        return mpfr_get_d(r5182128, MPFR_RNDN);
}

static mpfr_t r5182129, r5182130, r5182131, r5182132, r5182133, r5182134, r5182135, r5182136, r5182137, r5182138;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r5182129, "2", 10, MPFR_RNDN);
        mpfr_init(r5182130);
        mpfr_init(r5182131);
        mpfr_init_set_str(r5182132, "0", 10, MPFR_RNDN);
        mpfr_init(r5182133);
        mpfr_init_set_str(r5182134, "1", 10, MPFR_RNDN);
        mpfr_init(r5182135);
        mpfr_init(r5182136);
        mpfr_init(r5182137);
        mpfr_init(r5182138);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r5182130, x, MPFR_RNDN);
        mpfr_div(r5182131, r5182129, r5182130, MPFR_RNDN);
        ;
        mpfr_sub(r5182133, r5182131, r5182132, MPFR_RNDN);
        ;
        mpfr_sub(r5182135, r5182130, r5182134, MPFR_RNDN);
        mpfr_add(r5182136, r5182134, r5182130, MPFR_RNDN);
        mpfr_mul(r5182137, r5182135, r5182136, MPFR_RNDN);
        mpfr_div(r5182138, r5182133, r5182137, MPFR_RNDN);
        return mpfr_get_d(r5182138, MPFR_RNDN);
}

static mpfr_t r5182139, r5182140, r5182141, r5182142, r5182143, r5182144, r5182145, r5182146, r5182147, r5182148;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r5182139, "2", 10, MPFR_RNDN);
        mpfr_init(r5182140);
        mpfr_init(r5182141);
        mpfr_init_set_str(r5182142, "0", 10, MPFR_RNDN);
        mpfr_init(r5182143);
        mpfr_init_set_str(r5182144, "1", 10, MPFR_RNDN);
        mpfr_init(r5182145);
        mpfr_init(r5182146);
        mpfr_init(r5182147);
        mpfr_init(r5182148);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r5182140, x, MPFR_RNDN);
        mpfr_div(r5182141, r5182139, r5182140, MPFR_RNDN);
        ;
        mpfr_sub(r5182143, r5182141, r5182142, MPFR_RNDN);
        ;
        mpfr_sub(r5182145, r5182140, r5182144, MPFR_RNDN);
        mpfr_add(r5182146, r5182144, r5182140, MPFR_RNDN);
        mpfr_mul(r5182147, r5182145, r5182146, MPFR_RNDN);
        mpfr_div(r5182148, r5182143, r5182147, MPFR_RNDN);
        return mpfr_get_d(r5182148, MPFR_RNDN);
}

