#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 r9144 = 0.5f;
        float r9145 = re;
        float r9146 = cos(r9145);
        float r9147 = r9144 * r9146;
        float r9148 = im;
        float r9149 = -r9148;
        float r9150 = exp(r9149);
        float r9151 = exp(r9148);
        float r9152 = r9150 + r9151;
        float r9153 = r9147 * r9152;
        return r9153;
}

double f_id(double re, double im) {
        double r9154 = 0.5;
        double r9155 = re;
        double r9156 = cos(r9155);
        double r9157 = r9154 * r9156;
        double r9158 = im;
        double r9159 = -r9158;
        double r9160 = exp(r9159);
        double r9161 = exp(r9158);
        double r9162 = r9160 + r9161;
        double r9163 = r9157 * r9162;
        return r9163;
}


double f_of(float re, float im) {
        float r9164 = re;
        float r9165 = cos(r9164);
        float r9166 = im;
        float r9167 = exp(r9166);
        float r9168 = r9165 * r9167;
        float r9169 = r9165 / r9167;
        float r9170 = r9168 + r9169;
        float r9171 = 0.5f;
        float r9172 = r9170 * r9171;
        return r9172;
}

double f_od(double re, double im) {
        double r9173 = re;
        double r9174 = cos(r9173);
        double r9175 = im;
        double r9176 = exp(r9175);
        double r9177 = r9174 * r9176;
        double r9178 = r9174 / r9176;
        double r9179 = r9177 + r9178;
        double r9180 = 0.5;
        double r9181 = r9179 * r9180;
        return r9181;
}

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 r9182, r9183, r9184, r9185, r9186, r9187, r9188, r9189, r9190, r9191;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r9182, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9183);
        mpfr_init(r9184);
        mpfr_init(r9185);
        mpfr_init(r9186);
        mpfr_init(r9187);
        mpfr_init(r9188);
        mpfr_init(r9189);
        mpfr_init(r9190);
        mpfr_init(r9191);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r9183, re, MPFR_RNDN);
        mpfr_cos(r9184, r9183, MPFR_RNDN);
        mpfr_mul(r9185, r9182, r9184, MPFR_RNDN);
        mpfr_set_d(r9186, im, MPFR_RNDN);
        mpfr_neg(r9187, r9186, MPFR_RNDN);
        mpfr_exp(r9188, r9187, MPFR_RNDN);
        mpfr_exp(r9189, r9186, MPFR_RNDN);
        mpfr_add(r9190, r9188, r9189, MPFR_RNDN);
        mpfr_mul(r9191, r9185, r9190, MPFR_RNDN);
        return mpfr_get_d(r9191, MPFR_RNDN);
}

static mpfr_t r9192, r9193, r9194, r9195, r9196, r9197, r9198, r9199, r9200;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9192);
        mpfr_init(r9193);
        mpfr_init(r9194);
        mpfr_init(r9195);
        mpfr_init(r9196);
        mpfr_init(r9197);
        mpfr_init(r9198);
        mpfr_init_set_str(r9199, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9200);
}

double f_fm(double re, double im) {
        mpfr_set_d(r9192, re, MPFR_RNDN);
        mpfr_cos(r9193, r9192, MPFR_RNDN);
        mpfr_set_d(r9194, im, MPFR_RNDN);
        mpfr_exp(r9195, r9194, MPFR_RNDN);
        mpfr_mul(r9196, r9193, r9195, MPFR_RNDN);
        mpfr_div(r9197, r9193, r9195, MPFR_RNDN);
        mpfr_add(r9198, r9196, r9197, MPFR_RNDN);
        ;
        mpfr_mul(r9200, r9198, r9199, MPFR_RNDN);
        return mpfr_get_d(r9200, MPFR_RNDN);
}

static mpfr_t r9201, r9202, r9203, r9204, r9205, r9206, r9207, r9208, r9209;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9201);
        mpfr_init(r9202);
        mpfr_init(r9203);
        mpfr_init(r9204);
        mpfr_init(r9205);
        mpfr_init(r9206);
        mpfr_init(r9207);
        mpfr_init_set_str(r9208, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9209);
}

double f_dm(double re, double im) {
        mpfr_set_d(r9201, re, MPFR_RNDN);
        mpfr_cos(r9202, r9201, MPFR_RNDN);
        mpfr_set_d(r9203, im, MPFR_RNDN);
        mpfr_exp(r9204, r9203, MPFR_RNDN);
        mpfr_mul(r9205, r9202, r9204, MPFR_RNDN);
        mpfr_div(r9206, r9202, r9204, MPFR_RNDN);
        mpfr_add(r9207, r9205, r9206, MPFR_RNDN);
        ;
        mpfr_mul(r9209, r9207, r9208, MPFR_RNDN);
        return mpfr_get_d(r9209, MPFR_RNDN);
}

