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

char *name = "2frac (problem 3.3.1)";

double f_if(float x) {
        float r33043 = 1.0f;
        float r33044 = x;
        float r33045 = r33044 + r33043;
        float r33046 = r33043 / r33045;
        float r33047 = r33043 / r33044;
        float r33048 = r33046 - r33047;
        return r33048;
}

double f_id(double x) {
        double r33049 = 1.0;
        double r33050 = x;
        double r33051 = r33050 + r33049;
        double r33052 = r33049 / r33051;
        double r33053 = r33049 / r33050;
        double r33054 = r33052 - r33053;
        return r33054;
}


double f_of(float x) {
        float r33055 = x;
        float r33056 = -3833755296400741.5f;
        bool r33057 = r33055 <= r33056;
        float r33058 = 1.0f;
        float r33059 = r33058 / r33055;
        float r33060 = r33055 * r33055;
        float r33061 = r33059 / r33060;
        float r33062 = r33059 / r33055;
        float r33063 = r33061 - r33062;
        float r33064 = 9.757059776157302e+20f;
        bool r33065 = r33055 <= r33064;
        float r33066 = r33058 + r33055;
        float r33067 = r33055 - r33066;
        float r33068 = r33055 + r33058;
        float r33069 = r33068 * r33055;
        float r33070 = r33067 / r33069;
        float r33071 = r33065 ? r33070 : r33063;
        float r33072 = r33057 ? r33063 : r33071;
        return r33072;
}

double f_od(double x) {
        double r33073 = x;
        double r33074 = -3833755296400741.5;
        bool r33075 = r33073 <= r33074;
        double r33076 = 1.0;
        double r33077 = r33076 / r33073;
        double r33078 = r33073 * r33073;
        double r33079 = r33077 / r33078;
        double r33080 = r33077 / r33073;
        double r33081 = r33079 - r33080;
        double r33082 = 9.757059776157302e+20;
        bool r33083 = r33073 <= r33082;
        double r33084 = r33076 + r33073;
        double r33085 = r33073 - r33084;
        double r33086 = r33073 + r33076;
        double r33087 = r33086 * r33073;
        double r33088 = r33085 / r33087;
        double r33089 = r33083 ? r33088 : r33081;
        double r33090 = r33075 ? r33081 : r33089;
        return r33090;
}

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 r33091, r33092, r33093, r33094, r33095, r33096;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r33091, "1", 10, MPFR_RNDN);
        mpfr_init(r33092);
        mpfr_init(r33093);
        mpfr_init(r33094);
        mpfr_init(r33095);
        mpfr_init(r33096);
}

double f_im(double x) {
        ;
        mpfr_set_d(r33092, x, MPFR_RNDN);
        mpfr_add(r33093, r33092, r33091, MPFR_RNDN);
        mpfr_div(r33094, r33091, r33093, MPFR_RNDN);
        mpfr_div(r33095, r33091, r33092, MPFR_RNDN);
        mpfr_sub(r33096, r33094, r33095, MPFR_RNDN);
        return mpfr_get_d(r33096, MPFR_RNDN);
}

static mpfr_t r33097, r33098, r33099, r33100, r33101, r33102, r33103, r33104, r33105, r33106, r33107, r33108, r33109, r33110, r33111, r33112, r33113, r33114;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r33097);
        mpfr_init_set_str(r33098, "-3833755296400741.5", 10, MPFR_RNDN);
        mpfr_init(r33099);
        mpfr_init_set_str(r33100, "1", 10, MPFR_RNDN);
        mpfr_init(r33101);
        mpfr_init(r33102);
        mpfr_init(r33103);
        mpfr_init(r33104);
        mpfr_init(r33105);
        mpfr_init_set_str(r33106, "9.757059776157302e+20", 10, MPFR_RNDN);
        mpfr_init(r33107);
        mpfr_init(r33108);
        mpfr_init(r33109);
        mpfr_init(r33110);
        mpfr_init(r33111);
        mpfr_init(r33112);
        mpfr_init(r33113);
        mpfr_init(r33114);
}

double f_fm(double x) {
        mpfr_set_d(r33097, x, MPFR_RNDN);
        ;
        mpfr_set_si(r33099, mpfr_cmp(r33097, r33098) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r33101, r33100, r33097, MPFR_RNDN);
        mpfr_sqr(r33102, r33097, MPFR_RNDN);
        mpfr_div(r33103, r33101, r33102, MPFR_RNDN);
        mpfr_div(r33104, r33101, r33097, MPFR_RNDN);
        mpfr_sub(r33105, r33103, r33104, MPFR_RNDN);
        ;
        mpfr_set_si(r33107, mpfr_cmp(r33097, r33106) <= 0, MPFR_RNDN);
        mpfr_add(r33108, r33100, r33097, MPFR_RNDN);
        mpfr_sub(r33109, r33097, r33108, MPFR_RNDN);
        mpfr_add(r33110, r33097, r33100, MPFR_RNDN);
        mpfr_mul(r33111, r33110, r33097, MPFR_RNDN);
        mpfr_div(r33112, r33109, r33111, MPFR_RNDN);
        if (mpfr_get_si(r33107, MPFR_RNDN)) { mpfr_set(r33113, r33112, MPFR_RNDN); } else { mpfr_set(r33113, r33105, MPFR_RNDN); };
        if (mpfr_get_si(r33099, MPFR_RNDN)) { mpfr_set(r33114, r33105, MPFR_RNDN); } else { mpfr_set(r33114, r33113, MPFR_RNDN); };
        return mpfr_get_d(r33114, MPFR_RNDN);
}

static mpfr_t r33115, r33116, r33117, r33118, r33119, r33120, r33121, r33122, r33123, r33124, r33125, r33126, r33127, r33128, r33129, r33130, r33131, r33132;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r33115);
        mpfr_init_set_str(r33116, "-3833755296400741.5", 10, MPFR_RNDN);
        mpfr_init(r33117);
        mpfr_init_set_str(r33118, "1", 10, MPFR_RNDN);
        mpfr_init(r33119);
        mpfr_init(r33120);
        mpfr_init(r33121);
        mpfr_init(r33122);
        mpfr_init(r33123);
        mpfr_init_set_str(r33124, "9.757059776157302e+20", 10, MPFR_RNDN);
        mpfr_init(r33125);
        mpfr_init(r33126);
        mpfr_init(r33127);
        mpfr_init(r33128);
        mpfr_init(r33129);
        mpfr_init(r33130);
        mpfr_init(r33131);
        mpfr_init(r33132);
}

double f_dm(double x) {
        mpfr_set_d(r33115, x, MPFR_RNDN);
        ;
        mpfr_set_si(r33117, mpfr_cmp(r33115, r33116) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r33119, r33118, r33115, MPFR_RNDN);
        mpfr_sqr(r33120, r33115, MPFR_RNDN);
        mpfr_div(r33121, r33119, r33120, MPFR_RNDN);
        mpfr_div(r33122, r33119, r33115, MPFR_RNDN);
        mpfr_sub(r33123, r33121, r33122, MPFR_RNDN);
        ;
        mpfr_set_si(r33125, mpfr_cmp(r33115, r33124) <= 0, MPFR_RNDN);
        mpfr_add(r33126, r33118, r33115, MPFR_RNDN);
        mpfr_sub(r33127, r33115, r33126, MPFR_RNDN);
        mpfr_add(r33128, r33115, r33118, MPFR_RNDN);
        mpfr_mul(r33129, r33128, r33115, MPFR_RNDN);
        mpfr_div(r33130, r33127, r33129, MPFR_RNDN);
        if (mpfr_get_si(r33125, MPFR_RNDN)) { mpfr_set(r33131, r33130, MPFR_RNDN); } else { mpfr_set(r33131, r33123, MPFR_RNDN); };
        if (mpfr_get_si(r33117, MPFR_RNDN)) { mpfr_set(r33132, r33123, MPFR_RNDN); } else { mpfr_set(r33132, r33131, MPFR_RNDN); };
        return mpfr_get_d(r33132, MPFR_RNDN);
}

