#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 r10943 = 1;
        float r10944 = x;
        float r10945 = r10944 + r10943;
        float r10946 = r10943 / r10945;
        float r10947 = 2;
        float r10948 = r10947 / r10944;
        float r10949 = r10946 - r10948;
        float r10950 = r10944 - r10943;
        float r10951 = r10943 / r10950;
        float r10952 = r10949 + r10951;
        return r10952;
}

double f_id(double x) {
        double r10953 = 1;
        double r10954 = x;
        double r10955 = r10954 + r10953;
        double r10956 = r10953 / r10955;
        double r10957 = 2;
        double r10958 = r10957 / r10954;
        double r10959 = r10956 - r10958;
        double r10960 = r10954 - r10953;
        double r10961 = r10953 / r10960;
        double r10962 = r10959 + r10961;
        return r10962;
}


double f_of(float x) {
        float r10963 = 2;
        float r10964 = x;
        float r10965 = 1;
        float r10966 = r10964 + r10965;
        float r10967 = r10966 * r10964;
        float r10968 = r10963 / r10967;
        float r10969 = r10964 - r10965;
        float r10970 = r10968 / r10969;
        return r10970;
}

double f_od(double x) {
        double r10971 = 2;
        double r10972 = x;
        double r10973 = 1;
        double r10974 = r10972 + r10973;
        double r10975 = r10974 * r10972;
        double r10976 = r10971 / r10975;
        double r10977 = r10972 - r10973;
        double r10978 = r10976 / r10977;
        return r10978;
}

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 r10979, r10980, r10981, r10982, r10983, r10984, r10985, r10986, r10987, r10988;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r10979, "1", 10, MPFR_RNDN);
        mpfr_init(r10980);
        mpfr_init(r10981);
        mpfr_init(r10982);
        mpfr_init_set_str(r10983, "2", 10, MPFR_RNDN);
        mpfr_init(r10984);
        mpfr_init(r10985);
        mpfr_init(r10986);
        mpfr_init(r10987);
        mpfr_init(r10988);
}

double f_im(double x) {
        ;
        mpfr_set_d(r10980, x, MPFR_RNDN);
        mpfr_add(r10981, r10980, r10979, MPFR_RNDN);
        mpfr_div(r10982, r10979, r10981, MPFR_RNDN);
        ;
        mpfr_div(r10984, r10983, r10980, MPFR_RNDN);
        mpfr_sub(r10985, r10982, r10984, MPFR_RNDN);
        mpfr_sub(r10986, r10980, r10979, MPFR_RNDN);
        mpfr_div(r10987, r10979, r10986, MPFR_RNDN);
        mpfr_add(r10988, r10985, r10987, MPFR_RNDN);
        return mpfr_get_d(r10988, MPFR_RNDN);
}

static mpfr_t r10989, r10990, r10991, r10992, r10993, r10994, r10995, r10996;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r10989, "2", 10, MPFR_RNDN);
        mpfr_init(r10990);
        mpfr_init_set_str(r10991, "1", 10, MPFR_RNDN);
        mpfr_init(r10992);
        mpfr_init(r10993);
        mpfr_init(r10994);
        mpfr_init(r10995);
        mpfr_init(r10996);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r10990, x, MPFR_RNDN);
        ;
        mpfr_add(r10992, r10990, r10991, MPFR_RNDN);
        mpfr_mul(r10993, r10992, r10990, MPFR_RNDN);
        mpfr_div(r10994, r10989, r10993, MPFR_RNDN);
        mpfr_sub(r10995, r10990, r10991, MPFR_RNDN);
        mpfr_div(r10996, r10994, r10995, MPFR_RNDN);
        return mpfr_get_d(r10996, MPFR_RNDN);
}

static mpfr_t r10997, r10998, r10999, r11000, r11001, r11002, r11003, r11004;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r10997, "2", 10, MPFR_RNDN);
        mpfr_init(r10998);
        mpfr_init_set_str(r10999, "1", 10, MPFR_RNDN);
        mpfr_init(r11000);
        mpfr_init(r11001);
        mpfr_init(r11002);
        mpfr_init(r11003);
        mpfr_init(r11004);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r10998, x, MPFR_RNDN);
        ;
        mpfr_add(r11000, r10998, r10999, MPFR_RNDN);
        mpfr_mul(r11001, r11000, r10998, MPFR_RNDN);
        mpfr_div(r11002, r10997, r11001, MPFR_RNDN);
        mpfr_sub(r11003, r10998, r10999, MPFR_RNDN);
        mpfr_div(r11004, r11002, r11003, MPFR_RNDN);
        return mpfr_get_d(r11004, MPFR_RNDN);
}

