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

char *name = "cos(2*x)/(cos^2(x)*sin^2(x))";

double f_if(float x, float cos, float sin) {
        float r8434 = 2.0f;
        float r8435 = x;
        float r8436 = r8434 * r8435;
        float r8437 = cos(r8436);
        float r8438 = cos;
        float r8439 = pow(r8438, r8434);
        float r8440 = sin;
        float r8441 = pow(r8440, r8434);
        float r8442 = r8435 * r8441;
        float r8443 = r8442 * r8435;
        float r8444 = r8439 * r8443;
        float r8445 = r8437 / r8444;
        return r8445;
}

double f_id(double x, double cos, double sin) {
        double r8446 = 2.0;
        double r8447 = x;
        double r8448 = r8446 * r8447;
        double r8449 = cos(r8448);
        double r8450 = cos;
        double r8451 = pow(r8450, r8446);
        double r8452 = sin;
        double r8453 = pow(r8452, r8446);
        double r8454 = r8447 * r8453;
        double r8455 = r8454 * r8447;
        double r8456 = r8451 * r8455;
        double r8457 = r8449 / r8456;
        return r8457;
}


double f_of(float x, float cos, float sin) {
        float r8458 = x;
        float r8459 = cos(r8458);
        float r8460 = sin(r8458);
        float r8461 = r8459 - r8460;
        float r8462 = sin;
        float r8463 = r8461 / r8462;
        float r8464 = cos;
        float r8465 = r8464 * r8458;
        float r8466 = r8463 / r8465;
        float r8467 = r8459 + r8460;
        float r8468 = r8465 * r8462;
        float r8469 = r8467 / r8468;
        float r8470 = r8466 * r8469;
        return r8470;
}

double f_od(double x, double cos, double sin) {
        double r8471 = x;
        double r8472 = cos(r8471);
        double r8473 = sin(r8471);
        double r8474 = r8472 - r8473;
        double r8475 = sin;
        double r8476 = r8474 / r8475;
        double r8477 = cos;
        double r8478 = r8477 * r8471;
        double r8479 = r8476 / r8478;
        double r8480 = r8472 + r8473;
        double r8481 = r8478 * r8475;
        double r8482 = r8480 / r8481;
        double r8483 = r8479 * r8482;
        return r8483;
}

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 r8484, r8485, r8486, r8487, r8488, r8489, r8490, r8491, r8492, r8493, r8494, r8495;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8484, "2", 10, MPFR_RNDN);
        mpfr_init(r8485);
        mpfr_init(r8486);
        mpfr_init(r8487);
        mpfr_init(r8488);
        mpfr_init(r8489);
        mpfr_init(r8490);
        mpfr_init(r8491);
        mpfr_init(r8492);
        mpfr_init(r8493);
        mpfr_init(r8494);
        mpfr_init(r8495);
}

double f_im(double x, double cos, double sin) {
        ;
        mpfr_set_d(r8485, x, MPFR_RNDN);
        mpfr_mul(r8486, r8484, r8485, MPFR_RNDN);
        mpfr_cos(r8487, r8486, MPFR_RNDN);
        mpfr_set_d(r8488, cos, MPFR_RNDN);
        mpfr_pow(r8489, r8488, r8484, MPFR_RNDN);
        mpfr_set_d(r8490, sin, MPFR_RNDN);
        mpfr_pow(r8491, r8490, r8484, MPFR_RNDN);
        mpfr_mul(r8492, r8485, r8491, MPFR_RNDN);
        mpfr_mul(r8493, r8492, r8485, MPFR_RNDN);
        mpfr_mul(r8494, r8489, r8493, MPFR_RNDN);
        mpfr_div(r8495, r8487, r8494, MPFR_RNDN);
        return mpfr_get_d(r8495, MPFR_RNDN);
}

static mpfr_t r8496, r8497, r8498, r8499, r8500, r8501, r8502, r8503, r8504, r8505, r8506, r8507, r8508;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8496);
        mpfr_init(r8497);
        mpfr_init(r8498);
        mpfr_init(r8499);
        mpfr_init(r8500);
        mpfr_init(r8501);
        mpfr_init(r8502);
        mpfr_init(r8503);
        mpfr_init(r8504);
        mpfr_init(r8505);
        mpfr_init(r8506);
        mpfr_init(r8507);
        mpfr_init(r8508);
}

double f_fm(double x, double cos, double sin) {
        mpfr_set_d(r8496, x, MPFR_RNDN);
        mpfr_cos(r8497, r8496, MPFR_RNDN);
        mpfr_sin(r8498, r8496, MPFR_RNDN);
        mpfr_sub(r8499, r8497, r8498, MPFR_RNDN);
        mpfr_set_d(r8500, sin, MPFR_RNDN);
        mpfr_div(r8501, r8499, r8500, MPFR_RNDN);
        mpfr_set_d(r8502, cos, MPFR_RNDN);
        mpfr_mul(r8503, r8502, r8496, MPFR_RNDN);
        mpfr_div(r8504, r8501, r8503, MPFR_RNDN);
        mpfr_add(r8505, r8497, r8498, MPFR_RNDN);
        mpfr_mul(r8506, r8503, r8500, MPFR_RNDN);
        mpfr_div(r8507, r8505, r8506, MPFR_RNDN);
        mpfr_mul(r8508, r8504, r8507, MPFR_RNDN);
        return mpfr_get_d(r8508, MPFR_RNDN);
}

static mpfr_t r8509, r8510, r8511, r8512, r8513, r8514, r8515, r8516, r8517, r8518, r8519, r8520, r8521;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8509);
        mpfr_init(r8510);
        mpfr_init(r8511);
        mpfr_init(r8512);
        mpfr_init(r8513);
        mpfr_init(r8514);
        mpfr_init(r8515);
        mpfr_init(r8516);
        mpfr_init(r8517);
        mpfr_init(r8518);
        mpfr_init(r8519);
        mpfr_init(r8520);
        mpfr_init(r8521);
}

double f_dm(double x, double cos, double sin) {
        mpfr_set_d(r8509, x, MPFR_RNDN);
        mpfr_cos(r8510, r8509, MPFR_RNDN);
        mpfr_sin(r8511, r8509, MPFR_RNDN);
        mpfr_sub(r8512, r8510, r8511, MPFR_RNDN);
        mpfr_set_d(r8513, sin, MPFR_RNDN);
        mpfr_div(r8514, r8512, r8513, MPFR_RNDN);
        mpfr_set_d(r8515, cos, MPFR_RNDN);
        mpfr_mul(r8516, r8515, r8509, MPFR_RNDN);
        mpfr_div(r8517, r8514, r8516, MPFR_RNDN);
        mpfr_add(r8518, r8510, r8511, MPFR_RNDN);
        mpfr_mul(r8519, r8516, r8513, MPFR_RNDN);
        mpfr_div(r8520, r8518, r8519, MPFR_RNDN);
        mpfr_mul(r8521, r8517, r8520, MPFR_RNDN);
        return mpfr_get_d(r8521, MPFR_RNDN);
}

