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

char *name = "math.cos on complex, real part";

double f_if(float re, float im) {
        float r8473 = 0.5f;
        float r8474 = re;
        float r8475 = cos(r8474);
        float r8476 = r8473 * r8475;
        float r8477 = im;
        float r8478 = -r8477;
        float r8479 = exp(r8478);
        float r8480 = exp(r8477);
        float r8481 = r8479 + r8480;
        float r8482 = r8476 * r8481;
        return r8482;
}

double f_id(double re, double im) {
        double r8483 = 0.5;
        double r8484 = re;
        double r8485 = cos(r8484);
        double r8486 = r8483 * r8485;
        double r8487 = im;
        double r8488 = -r8487;
        double r8489 = exp(r8488);
        double r8490 = exp(r8487);
        double r8491 = r8489 + r8490;
        double r8492 = r8486 * r8491;
        return r8492;
}


double f_of(float re, float im) {
        float r8493 = im;
        float r8494 = exp(r8493);
        float r8495 = -r8493;
        float r8496 = exp(r8495);
        float r8497 = r8494 + r8496;
        float r8498 = 0.5f;
        float r8499 = re;
        float r8500 = cos(r8499);
        float r8501 = r8498 * r8500;
        float r8502 = r8497 * r8501;
        return r8502;
}

double f_od(double re, double im) {
        double r8503 = im;
        double r8504 = exp(r8503);
        double r8505 = -r8503;
        double r8506 = exp(r8505);
        double r8507 = r8504 + r8506;
        double r8508 = 0.5;
        double r8509 = re;
        double r8510 = cos(r8509);
        double r8511 = r8508 * r8510;
        double r8512 = r8507 * r8511;
        return r8512;
}

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 r8513, r8514, r8515, r8516, r8517, r8518, r8519, r8520, r8521, r8522;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8513, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8514);
        mpfr_init(r8515);
        mpfr_init(r8516);
        mpfr_init(r8517);
        mpfr_init(r8518);
        mpfr_init(r8519);
        mpfr_init(r8520);
        mpfr_init(r8521);
        mpfr_init(r8522);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r8514, re, MPFR_RNDN);
        mpfr_cos(r8515, r8514, MPFR_RNDN);
        mpfr_mul(r8516, r8513, r8515, MPFR_RNDN);
        mpfr_set_d(r8517, im, MPFR_RNDN);
        mpfr_neg(r8518, r8517, MPFR_RNDN);
        mpfr_exp(r8519, r8518, MPFR_RNDN);
        mpfr_exp(r8520, r8517, MPFR_RNDN);
        mpfr_add(r8521, r8519, r8520, MPFR_RNDN);
        mpfr_mul(r8522, r8516, r8521, MPFR_RNDN);
        return mpfr_get_d(r8522, MPFR_RNDN);
}

static mpfr_t r8523, r8524, r8525, r8526, r8527, r8528, r8529, r8530, r8531, r8532;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8523);
        mpfr_init(r8524);
        mpfr_init(r8525);
        mpfr_init(r8526);
        mpfr_init(r8527);
        mpfr_init_set_str(r8528, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8529);
        mpfr_init(r8530);
        mpfr_init(r8531);
        mpfr_init(r8532);
}

double f_fm(double re, double im) {
        mpfr_set_d(r8523, im, MPFR_RNDN);
        mpfr_exp(r8524, r8523, MPFR_RNDN);
        mpfr_neg(r8525, r8523, MPFR_RNDN);
        mpfr_exp(r8526, r8525, MPFR_RNDN);
        mpfr_add(r8527, r8524, r8526, MPFR_RNDN);
        ;
        mpfr_set_d(r8529, re, MPFR_RNDN);
        mpfr_cos(r8530, r8529, MPFR_RNDN);
        mpfr_mul(r8531, r8528, r8530, MPFR_RNDN);
        mpfr_mul(r8532, r8527, r8531, MPFR_RNDN);
        return mpfr_get_d(r8532, MPFR_RNDN);
}

static mpfr_t r8533, r8534, r8535, r8536, r8537, r8538, r8539, r8540, r8541, r8542;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8533);
        mpfr_init(r8534);
        mpfr_init(r8535);
        mpfr_init(r8536);
        mpfr_init(r8537);
        mpfr_init_set_str(r8538, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8539);
        mpfr_init(r8540);
        mpfr_init(r8541);
        mpfr_init(r8542);
}

double f_dm(double re, double im) {
        mpfr_set_d(r8533, im, MPFR_RNDN);
        mpfr_exp(r8534, r8533, MPFR_RNDN);
        mpfr_neg(r8535, r8533, MPFR_RNDN);
        mpfr_exp(r8536, r8535, MPFR_RNDN);
        mpfr_add(r8537, r8534, r8536, MPFR_RNDN);
        ;
        mpfr_set_d(r8539, re, MPFR_RNDN);
        mpfr_cos(r8540, r8539, MPFR_RNDN);
        mpfr_mul(r8541, r8538, r8540, MPFR_RNDN);
        mpfr_mul(r8542, r8537, r8541, MPFR_RNDN);
        return mpfr_get_d(r8542, MPFR_RNDN);
}

