#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 r26989 = 1;
        float r26990 = x;
        float r26991 = r26990 + r26989;
        float r26992 = r26989 / r26991;
        float r26993 = 2;
        float r26994 = r26993 / r26990;
        float r26995 = r26992 - r26994;
        float r26996 = r26990 - r26989;
        float r26997 = r26989 / r26996;
        float r26998 = r26995 + r26997;
        return r26998;
}

double f_id(double x) {
        double r26999 = 1;
        double r27000 = x;
        double r27001 = r27000 + r26999;
        double r27002 = r26999 / r27001;
        double r27003 = 2;
        double r27004 = r27003 / r27000;
        double r27005 = r27002 - r27004;
        double r27006 = r27000 - r26999;
        double r27007 = r26999 / r27006;
        double r27008 = r27005 + r27007;
        return r27008;
}


double f_of(float x) {
        float r27009 = 2;
        float r27010 = x;
        float r27011 = fma(r27010, r27010, r27010);
        float r27012 = 1;
        float r27013 = r27010 - r27012;
        float r27014 = r27011 * r27013;
        float r27015 = r27009 / r27014;
        return r27015;
}

double f_od(double x) {
        double r27016 = 2;
        double r27017 = x;
        double r27018 = fma(r27017, r27017, r27017);
        double r27019 = 1;
        double r27020 = r27017 - r27019;
        double r27021 = r27018 * r27020;
        double r27022 = r27016 / r27021;
        return r27022;
}

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 r27023, r27024, r27025, r27026, r27027, r27028, r27029, r27030, r27031, r27032;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27023, "1", 10, MPFR_RNDN);
        mpfr_init(r27024);
        mpfr_init(r27025);
        mpfr_init(r27026);
        mpfr_init_set_str(r27027, "2", 10, MPFR_RNDN);
        mpfr_init(r27028);
        mpfr_init(r27029);
        mpfr_init(r27030);
        mpfr_init(r27031);
        mpfr_init(r27032);
}

double f_im(double x) {
        ;
        mpfr_set_d(r27024, x, MPFR_RNDN);
        mpfr_add(r27025, r27024, r27023, MPFR_RNDN);
        mpfr_div(r27026, r27023, r27025, MPFR_RNDN);
        ;
        mpfr_div(r27028, r27027, r27024, MPFR_RNDN);
        mpfr_sub(r27029, r27026, r27028, MPFR_RNDN);
        mpfr_sub(r27030, r27024, r27023, MPFR_RNDN);
        mpfr_div(r27031, r27023, r27030, MPFR_RNDN);
        mpfr_add(r27032, r27029, r27031, MPFR_RNDN);
        return mpfr_get_d(r27032, MPFR_RNDN);
}

static mpfr_t r27033, r27034, r27035, r27036, r27037, r27038, r27039;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27033, "2", 10, MPFR_RNDN);
        mpfr_init(r27034);
        mpfr_init(r27035);
        mpfr_init_set_str(r27036, "1", 10, MPFR_RNDN);
        mpfr_init(r27037);
        mpfr_init(r27038);
        mpfr_init(r27039);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r27034, x, MPFR_RNDN);
        mpfr_fma(r27035, r27034, r27034, r27034, MPFR_RNDN);
        ;
        mpfr_sub(r27037, r27034, r27036, MPFR_RNDN);
        mpfr_mul(r27038, r27035, r27037, MPFR_RNDN);
        mpfr_div(r27039, r27033, r27038, MPFR_RNDN);
        return mpfr_get_d(r27039, MPFR_RNDN);
}

static mpfr_t r27040, r27041, r27042, r27043, r27044, r27045, r27046;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1104);
        mpfr_init_set_str(r27040, "2", 10, MPFR_RNDN);
        mpfr_init(r27041);
        mpfr_init(r27042);
        mpfr_init_set_str(r27043, "1", 10, MPFR_RNDN);
        mpfr_init(r27044);
        mpfr_init(r27045);
        mpfr_init(r27046);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r27041, x, MPFR_RNDN);
        mpfr_fma(r27042, r27041, r27041, r27041, MPFR_RNDN);
        ;
        mpfr_sub(r27044, r27041, r27043, MPFR_RNDN);
        mpfr_mul(r27045, r27042, r27044, MPFR_RNDN);
        mpfr_div(r27046, r27040, r27045, MPFR_RNDN);
        return mpfr_get_d(r27046, MPFR_RNDN);
}

