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

char *name = "cos2 (problem 3.4.1)";

double f_if(float x) {
        float r18066 = 1.0f;
        float r18067 = x;
        float r18068 = cos(r18067);
        float r18069 = r18066 - r18068;
        float r18070 = r18067 * r18067;
        float r18071 = r18069 / r18070;
        return r18071;
}

double f_id(double x) {
        double r18072 = 1.0;
        double r18073 = x;
        double r18074 = cos(r18073);
        double r18075 = r18072 - r18074;
        double r18076 = r18073 * r18073;
        double r18077 = r18075 / r18076;
        return r18077;
}


double f_of(float x) {
        float r18078 = x;
        float r18079 = sin(r18078);
        float r18080 = r18079 / r18078;
        float r18081 = 1.0f;
        float r18082 = cos(r18078);
        float r18083 = r18081 + r18082;
        float r18084 = r18079 / r18083;
        float r18085 = r18084 / r18078;
        float r18086 = r18080 * r18085;
        return r18086;
}

double f_od(double x) {
        double r18087 = x;
        double r18088 = sin(r18087);
        double r18089 = r18088 / r18087;
        double r18090 = 1.0;
        double r18091 = cos(r18087);
        double r18092 = r18090 + r18091;
        double r18093 = r18088 / r18092;
        double r18094 = r18093 / r18087;
        double r18095 = r18089 * r18094;
        return r18095;
}

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 r18096, r18097, r18098, r18099, r18100, r18101;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r18096, "1", 10, MPFR_RNDN);
        mpfr_init(r18097);
        mpfr_init(r18098);
        mpfr_init(r18099);
        mpfr_init(r18100);
        mpfr_init(r18101);
}

double f_im(double x) {
        ;
        mpfr_set_d(r18097, x, MPFR_RNDN);
        mpfr_cos(r18098, r18097, MPFR_RNDN);
        mpfr_sub(r18099, r18096, r18098, MPFR_RNDN);
        mpfr_sqr(r18100, r18097, MPFR_RNDN);
        mpfr_div(r18101, r18099, r18100, MPFR_RNDN);
        return mpfr_get_d(r18101, MPFR_RNDN);
}

static mpfr_t r18102, r18103, r18104, r18105, r18106, r18107, r18108, r18109, r18110;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r18102);
        mpfr_init(r18103);
        mpfr_init(r18104);
        mpfr_init_set_str(r18105, "1", 10, MPFR_RNDN);
        mpfr_init(r18106);
        mpfr_init(r18107);
        mpfr_init(r18108);
        mpfr_init(r18109);
        mpfr_init(r18110);
}

double f_fm(double x) {
        mpfr_set_d(r18102, x, MPFR_RNDN);
        mpfr_sin(r18103, r18102, MPFR_RNDN);
        mpfr_div(r18104, r18103, r18102, MPFR_RNDN);
        ;
        mpfr_cos(r18106, r18102, MPFR_RNDN);
        mpfr_add(r18107, r18105, r18106, MPFR_RNDN);
        mpfr_div(r18108, r18103, r18107, MPFR_RNDN);
        mpfr_div(r18109, r18108, r18102, MPFR_RNDN);
        mpfr_mul(r18110, r18104, r18109, MPFR_RNDN);
        return mpfr_get_d(r18110, MPFR_RNDN);
}

static mpfr_t r18111, r18112, r18113, r18114, r18115, r18116, r18117, r18118, r18119;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r18111);
        mpfr_init(r18112);
        mpfr_init(r18113);
        mpfr_init_set_str(r18114, "1", 10, MPFR_RNDN);
        mpfr_init(r18115);
        mpfr_init(r18116);
        mpfr_init(r18117);
        mpfr_init(r18118);
        mpfr_init(r18119);
}

double f_dm(double x) {
        mpfr_set_d(r18111, x, MPFR_RNDN);
        mpfr_sin(r18112, r18111, MPFR_RNDN);
        mpfr_div(r18113, r18112, r18111, MPFR_RNDN);
        ;
        mpfr_cos(r18115, r18111, MPFR_RNDN);
        mpfr_add(r18116, r18114, r18115, MPFR_RNDN);
        mpfr_div(r18117, r18112, r18116, MPFR_RNDN);
        mpfr_div(r18118, r18117, r18111, MPFR_RNDN);
        mpfr_mul(r18119, r18113, r18118, MPFR_RNDN);
        return mpfr_get_d(r18119, MPFR_RNDN);
}

