#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 r11870437 = 1;
        float r11870438 = x;
        float r11870439 = cos(r11870438);
        float r11870440 = r11870437 - r11870439;
        float r11870441 = r11870438 * r11870438;
        float r11870442 = r11870440 / r11870441;
        return r11870442;
}

double f_id(double x) {
        double r11870443 = 1;
        double r11870444 = x;
        double r11870445 = cos(r11870444);
        double r11870446 = r11870443 - r11870445;
        double r11870447 = r11870444 * r11870444;
        double r11870448 = r11870446 / r11870447;
        return r11870448;
}


double f_of(float x) {
        float r11870449 = x;
        float r11870450 = sin(r11870449);
        float r11870451 = r11870450 / r11870449;
        float r11870452 = 1;
        float r11870453 = cos(r11870449);
        float r11870454 = r11870452 + r11870453;
        float r11870455 = r11870450 / r11870454;
        float r11870456 = r11870455 / r11870449;
        float r11870457 = r11870451 * r11870456;
        return r11870457;
}

double f_od(double x) {
        double r11870458 = x;
        double r11870459 = sin(r11870458);
        double r11870460 = r11870459 / r11870458;
        double r11870461 = 1;
        double r11870462 = cos(r11870458);
        double r11870463 = r11870461 + r11870462;
        double r11870464 = r11870459 / r11870463;
        double r11870465 = r11870464 / r11870458;
        double r11870466 = r11870460 * r11870465;
        return r11870466;
}

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 r11870467, r11870468, r11870469, r11870470, r11870471, r11870472;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r11870467, "1", 10, MPFR_RNDN);
        mpfr_init(r11870468);
        mpfr_init(r11870469);
        mpfr_init(r11870470);
        mpfr_init(r11870471);
        mpfr_init(r11870472);
}

double f_im(double x) {
        ;
        mpfr_set_d(r11870468, x, MPFR_RNDN);
        mpfr_cos(r11870469, r11870468, MPFR_RNDN);
        mpfr_sub(r11870470, r11870467, r11870469, MPFR_RNDN);
        mpfr_mul(r11870471, r11870468, r11870468, MPFR_RNDN);
        mpfr_div(r11870472, r11870470, r11870471, MPFR_RNDN);
        return mpfr_get_d(r11870472, MPFR_RNDN);
}

static mpfr_t r11870473, r11870474, r11870475, r11870476, r11870477, r11870478, r11870479, r11870480, r11870481;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r11870473);
        mpfr_init(r11870474);
        mpfr_init(r11870475);
        mpfr_init_set_str(r11870476, "1", 10, MPFR_RNDN);
        mpfr_init(r11870477);
        mpfr_init(r11870478);
        mpfr_init(r11870479);
        mpfr_init(r11870480);
        mpfr_init(r11870481);
}

double f_fm(double x) {
        mpfr_set_d(r11870473, x, MPFR_RNDN);
        mpfr_sin(r11870474, r11870473, MPFR_RNDN);
        mpfr_div(r11870475, r11870474, r11870473, MPFR_RNDN);
        ;
        mpfr_cos(r11870477, r11870473, MPFR_RNDN);
        mpfr_add(r11870478, r11870476, r11870477, MPFR_RNDN);
        mpfr_div(r11870479, r11870474, r11870478, MPFR_RNDN);
        mpfr_div(r11870480, r11870479, r11870473, MPFR_RNDN);
        mpfr_mul(r11870481, r11870475, r11870480, MPFR_RNDN);
        return mpfr_get_d(r11870481, MPFR_RNDN);
}

static mpfr_t r11870482, r11870483, r11870484, r11870485, r11870486, r11870487, r11870488, r11870489, r11870490;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r11870482);
        mpfr_init(r11870483);
        mpfr_init(r11870484);
        mpfr_init_set_str(r11870485, "1", 10, MPFR_RNDN);
        mpfr_init(r11870486);
        mpfr_init(r11870487);
        mpfr_init(r11870488);
        mpfr_init(r11870489);
        mpfr_init(r11870490);
}

double f_dm(double x) {
        mpfr_set_d(r11870482, x, MPFR_RNDN);
        mpfr_sin(r11870483, r11870482, MPFR_RNDN);
        mpfr_div(r11870484, r11870483, r11870482, MPFR_RNDN);
        ;
        mpfr_cos(r11870486, r11870482, MPFR_RNDN);
        mpfr_add(r11870487, r11870485, r11870486, MPFR_RNDN);
        mpfr_div(r11870488, r11870483, r11870487, MPFR_RNDN);
        mpfr_div(r11870489, r11870488, r11870482, MPFR_RNDN);
        mpfr_mul(r11870490, r11870484, r11870489, MPFR_RNDN);
        return mpfr_get_d(r11870490, MPFR_RNDN);
}

