#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 r8274 = 1;
        float r8275 = x;
        float r8276 = cos(r8275);
        float r8277 = r8274 - r8276;
        float r8278 = r8275 * r8275;
        float r8279 = r8277 / r8278;
        return r8279;
}

double f_id(double x) {
        double r8280 = 1;
        double r8281 = x;
        double r8282 = cos(r8281);
        double r8283 = r8280 - r8282;
        double r8284 = r8281 * r8281;
        double r8285 = r8283 / r8284;
        return r8285;
}


double f_of(float x) {
        float r8286 = x;
        float r8287 = sin(r8286);
        float r8288 = r8286 / r8287;
        float r8289 = r8287 / r8288;
        float r8290 = 1;
        float r8291 = cos(r8286);
        float r8292 = 3;
        float r8293 = pow(r8291, r8292);
        float r8294 = r8290 + r8293;
        float r8295 = r8289 / r8294;
        float r8296 = r8291 * r8291;
        float r8297 = r8291 - r8290;
        float r8298 = r8296 - r8297;
        float r8299 = r8298 / r8286;
        float r8300 = r8295 * r8299;
        return r8300;
}

double f_od(double x) {
        double r8301 = x;
        double r8302 = sin(r8301);
        double r8303 = r8301 / r8302;
        double r8304 = r8302 / r8303;
        double r8305 = 1;
        double r8306 = cos(r8301);
        double r8307 = 3;
        double r8308 = pow(r8306, r8307);
        double r8309 = r8305 + r8308;
        double r8310 = r8304 / r8309;
        double r8311 = r8306 * r8306;
        double r8312 = r8306 - r8305;
        double r8313 = r8311 - r8312;
        double r8314 = r8313 / r8301;
        double r8315 = r8310 * r8314;
        return r8315;
}

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 r8316, r8317, r8318, r8319, r8320, r8321;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r8316, "1", 10, MPFR_RNDN);
        mpfr_init(r8317);
        mpfr_init(r8318);
        mpfr_init(r8319);
        mpfr_init(r8320);
        mpfr_init(r8321);
}

double f_im(double x) {
        ;
        mpfr_set_d(r8317, x, MPFR_RNDN);
        mpfr_cos(r8318, r8317, MPFR_RNDN);
        mpfr_sub(r8319, r8316, r8318, MPFR_RNDN);
        mpfr_mul(r8320, r8317, r8317, MPFR_RNDN);
        mpfr_div(r8321, r8319, r8320, MPFR_RNDN);
        return mpfr_get_d(r8321, MPFR_RNDN);
}

static mpfr_t r8322, r8323, r8324, r8325, r8326, r8327, r8328, r8329, r8330, r8331, r8332, r8333, r8334, r8335, r8336;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r8322);
        mpfr_init(r8323);
        mpfr_init(r8324);
        mpfr_init(r8325);
        mpfr_init_set_str(r8326, "1", 10, MPFR_RNDN);
        mpfr_init(r8327);
        mpfr_init_set_str(r8328, "3", 10, MPFR_RNDN);
        mpfr_init(r8329);
        mpfr_init(r8330);
        mpfr_init(r8331);
        mpfr_init(r8332);
        mpfr_init(r8333);
        mpfr_init(r8334);
        mpfr_init(r8335);
        mpfr_init(r8336);
}

double f_fm(double x) {
        mpfr_set_d(r8322, x, MPFR_RNDN);
        mpfr_sin(r8323, r8322, MPFR_RNDN);
        mpfr_div(r8324, r8322, r8323, MPFR_RNDN);
        mpfr_div(r8325, r8323, r8324, MPFR_RNDN);
        ;
        mpfr_cos(r8327, r8322, MPFR_RNDN);
        ;
        mpfr_pow(r8329, r8327, r8328, MPFR_RNDN);
        mpfr_add(r8330, r8326, r8329, MPFR_RNDN);
        mpfr_div(r8331, r8325, r8330, MPFR_RNDN);
        mpfr_mul(r8332, r8327, r8327, MPFR_RNDN);
        mpfr_sub(r8333, r8327, r8326, MPFR_RNDN);
        mpfr_sub(r8334, r8332, r8333, MPFR_RNDN);
        mpfr_div(r8335, r8334, r8322, MPFR_RNDN);
        mpfr_mul(r8336, r8331, r8335, MPFR_RNDN);
        return mpfr_get_d(r8336, MPFR_RNDN);
}

static mpfr_t r8337, r8338, r8339, r8340, r8341, r8342, r8343, r8344, r8345, r8346, r8347, r8348, r8349, r8350, r8351;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r8337);
        mpfr_init(r8338);
        mpfr_init(r8339);
        mpfr_init(r8340);
        mpfr_init_set_str(r8341, "1", 10, MPFR_RNDN);
        mpfr_init(r8342);
        mpfr_init_set_str(r8343, "3", 10, MPFR_RNDN);
        mpfr_init(r8344);
        mpfr_init(r8345);
        mpfr_init(r8346);
        mpfr_init(r8347);
        mpfr_init(r8348);
        mpfr_init(r8349);
        mpfr_init(r8350);
        mpfr_init(r8351);
}

double f_dm(double x) {
        mpfr_set_d(r8337, x, MPFR_RNDN);
        mpfr_sin(r8338, r8337, MPFR_RNDN);
        mpfr_div(r8339, r8337, r8338, MPFR_RNDN);
        mpfr_div(r8340, r8338, r8339, MPFR_RNDN);
        ;
        mpfr_cos(r8342, r8337, MPFR_RNDN);
        ;
        mpfr_pow(r8344, r8342, r8343, MPFR_RNDN);
        mpfr_add(r8345, r8341, r8344, MPFR_RNDN);
        mpfr_div(r8346, r8340, r8345, MPFR_RNDN);
        mpfr_mul(r8347, r8342, r8342, MPFR_RNDN);
        mpfr_sub(r8348, r8342, r8341, MPFR_RNDN);
        mpfr_sub(r8349, r8347, r8348, MPFR_RNDN);
        mpfr_div(r8350, r8349, r8337, MPFR_RNDN);
        mpfr_mul(r8351, r8346, r8350, MPFR_RNDN);
        return mpfr_get_d(r8351, MPFR_RNDN);
}

