#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 r8426 = 2.0f;
        float r8427 = x;
        float r8428 = r8426 * r8427;
        float r8429 = cos(r8428);
        float r8430 = cos;
        float r8431 = pow(r8430, r8426);
        float r8432 = sin;
        float r8433 = pow(r8432, r8426);
        float r8434 = r8427 * r8433;
        float r8435 = r8434 * r8427;
        float r8436 = r8431 * r8435;
        float r8437 = r8429 / r8436;
        return r8437;
}

double f_id(double x, double cos, double sin) {
        double r8438 = 2.0;
        double r8439 = x;
        double r8440 = r8438 * r8439;
        double r8441 = cos(r8440);
        double r8442 = cos;
        double r8443 = pow(r8442, r8438);
        double r8444 = sin;
        double r8445 = pow(r8444, r8438);
        double r8446 = r8439 * r8445;
        double r8447 = r8446 * r8439;
        double r8448 = r8443 * r8447;
        double r8449 = r8441 / r8448;
        return r8449;
}


double f_of(float x, float cos, float sin) {
        float r8450 = x;
        float r8451 = cos(r8450);
        float r8452 = r8451 * r8451;
        float r8453 = sin(r8450);
        float r8454 = r8453 * r8453;
        float r8455 = r8452 - r8454;
        float r8456 = sin;
        float r8457 = cos;
        float r8458 = r8457 * r8450;
        float r8459 = r8456 * r8458;
        float r8460 = r8459 * r8459;
        float r8461 = r8455 / r8460;
        return r8461;
}

double f_od(double x, double cos, double sin) {
        double r8462 = x;
        double r8463 = cos(r8462);
        double r8464 = r8463 * r8463;
        double r8465 = sin(r8462);
        double r8466 = r8465 * r8465;
        double r8467 = r8464 - r8466;
        double r8468 = sin;
        double r8469 = cos;
        double r8470 = r8469 * r8462;
        double r8471 = r8468 * r8470;
        double r8472 = r8471 * r8471;
        double r8473 = r8467 / r8472;
        return r8473;
}

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 r8474, r8475, r8476, r8477, r8478, r8479, r8480, r8481, r8482, r8483, r8484, r8485;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8474, "2", 10, MPFR_RNDN);
        mpfr_init(r8475);
        mpfr_init(r8476);
        mpfr_init(r8477);
        mpfr_init(r8478);
        mpfr_init(r8479);
        mpfr_init(r8480);
        mpfr_init(r8481);
        mpfr_init(r8482);
        mpfr_init(r8483);
        mpfr_init(r8484);
        mpfr_init(r8485);
}

double f_im(double x, double cos, double sin) {
        ;
        mpfr_set_d(r8475, x, MPFR_RNDN);
        mpfr_mul(r8476, r8474, r8475, MPFR_RNDN);
        mpfr_cos(r8477, r8476, MPFR_RNDN);
        mpfr_set_d(r8478, cos, MPFR_RNDN);
        mpfr_pow(r8479, r8478, r8474, MPFR_RNDN);
        mpfr_set_d(r8480, sin, MPFR_RNDN);
        mpfr_pow(r8481, r8480, r8474, MPFR_RNDN);
        mpfr_mul(r8482, r8475, r8481, MPFR_RNDN);
        mpfr_mul(r8483, r8482, r8475, MPFR_RNDN);
        mpfr_mul(r8484, r8479, r8483, MPFR_RNDN);
        mpfr_div(r8485, r8477, r8484, MPFR_RNDN);
        return mpfr_get_d(r8485, MPFR_RNDN);
}

static mpfr_t r8486, r8487, r8488, r8489, r8490, r8491, r8492, r8493, r8494, r8495, r8496, r8497;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        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);
        mpfr_init(r8496);
        mpfr_init(r8497);
}

double f_fm(double x, double cos, double sin) {
        mpfr_set_d(r8486, x, MPFR_RNDN);
        mpfr_cos(r8487, r8486, MPFR_RNDN);
        mpfr_mul(r8488, r8487, r8487, MPFR_RNDN);
        mpfr_sin(r8489, r8486, MPFR_RNDN);
        mpfr_mul(r8490, r8489, r8489, MPFR_RNDN);
        mpfr_sub(r8491, r8488, r8490, MPFR_RNDN);
        mpfr_set_d(r8492, sin, MPFR_RNDN);
        mpfr_set_d(r8493, cos, MPFR_RNDN);
        mpfr_mul(r8494, r8493, r8486, MPFR_RNDN);
        mpfr_mul(r8495, r8492, r8494, MPFR_RNDN);
        mpfr_mul(r8496, r8495, r8495, MPFR_RNDN);
        mpfr_div(r8497, r8491, r8496, MPFR_RNDN);
        return mpfr_get_d(r8497, MPFR_RNDN);
}

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

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        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);
        mpfr_init(r8509);
}

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

