#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 r9182 = 0.5f;
        float r9183 = re;
        float r9184 = cos(r9183);
        float r9185 = r9182 * r9184;
        float r9186 = im;
        float r9187 = -r9186;
        float r9188 = exp(r9187);
        float r9189 = exp(r9186);
        float r9190 = r9188 + r9189;
        float r9191 = r9185 * r9190;
        return r9191;
}

double f_id(double re, double im) {
        double r9192 = 0.5;
        double r9193 = re;
        double r9194 = cos(r9193);
        double r9195 = r9192 * r9194;
        double r9196 = im;
        double r9197 = -r9196;
        double r9198 = exp(r9197);
        double r9199 = exp(r9196);
        double r9200 = r9198 + r9199;
        double r9201 = r9195 * r9200;
        return r9201;
}


double f_of(float re, float im) {
        float r9202 = im;
        float r9203 = exp(r9202);
        float r9204 = -r9202;
        float r9205 = exp(r9204);
        float r9206 = r9203 + r9205;
        float r9207 = 0.5f;
        float r9208 = re;
        float r9209 = cos(r9208);
        float r9210 = r9207 * r9209;
        float r9211 = r9206 * r9210;
        return r9211;
}

double f_od(double re, double im) {
        double r9212 = im;
        double r9213 = exp(r9212);
        double r9214 = -r9212;
        double r9215 = exp(r9214);
        double r9216 = r9213 + r9215;
        double r9217 = 0.5;
        double r9218 = re;
        double r9219 = cos(r9218);
        double r9220 = r9217 * r9219;
        double r9221 = r9216 * r9220;
        return r9221;
}

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 r9222, r9223, r9224, r9225, r9226, r9227, r9228, r9229, r9230, r9231;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r9222, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9223);
        mpfr_init(r9224);
        mpfr_init(r9225);
        mpfr_init(r9226);
        mpfr_init(r9227);
        mpfr_init(r9228);
        mpfr_init(r9229);
        mpfr_init(r9230);
        mpfr_init(r9231);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r9223, re, MPFR_RNDN);
        mpfr_cos(r9224, r9223, MPFR_RNDN);
        mpfr_mul(r9225, r9222, r9224, MPFR_RNDN);
        mpfr_set_d(r9226, im, MPFR_RNDN);
        mpfr_neg(r9227, r9226, MPFR_RNDN);
        mpfr_exp(r9228, r9227, MPFR_RNDN);
        mpfr_exp(r9229, r9226, MPFR_RNDN);
        mpfr_add(r9230, r9228, r9229, MPFR_RNDN);
        mpfr_mul(r9231, r9225, r9230, MPFR_RNDN);
        return mpfr_get_d(r9231, MPFR_RNDN);
}

static mpfr_t r9232, r9233, r9234, r9235, r9236, r9237, r9238, r9239, r9240, r9241;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9232);
        mpfr_init(r9233);
        mpfr_init(r9234);
        mpfr_init(r9235);
        mpfr_init(r9236);
        mpfr_init_set_str(r9237, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9238);
        mpfr_init(r9239);
        mpfr_init(r9240);
        mpfr_init(r9241);
}

double f_fm(double re, double im) {
        mpfr_set_d(r9232, im, MPFR_RNDN);
        mpfr_exp(r9233, r9232, MPFR_RNDN);
        mpfr_neg(r9234, r9232, MPFR_RNDN);
        mpfr_exp(r9235, r9234, MPFR_RNDN);
        mpfr_add(r9236, r9233, r9235, MPFR_RNDN);
        ;
        mpfr_set_d(r9238, re, MPFR_RNDN);
        mpfr_cos(r9239, r9238, MPFR_RNDN);
        mpfr_mul(r9240, r9237, r9239, MPFR_RNDN);
        mpfr_mul(r9241, r9236, r9240, MPFR_RNDN);
        return mpfr_get_d(r9241, MPFR_RNDN);
}

static mpfr_t r9242, r9243, r9244, r9245, r9246, r9247, r9248, r9249, r9250, r9251;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9242);
        mpfr_init(r9243);
        mpfr_init(r9244);
        mpfr_init(r9245);
        mpfr_init(r9246);
        mpfr_init_set_str(r9247, "0.5", 10, MPFR_RNDN);
        mpfr_init(r9248);
        mpfr_init(r9249);
        mpfr_init(r9250);
        mpfr_init(r9251);
}

double f_dm(double re, double im) {
        mpfr_set_d(r9242, im, MPFR_RNDN);
        mpfr_exp(r9243, r9242, MPFR_RNDN);
        mpfr_neg(r9244, r9242, MPFR_RNDN);
        mpfr_exp(r9245, r9244, MPFR_RNDN);
        mpfr_add(r9246, r9243, r9245, MPFR_RNDN);
        ;
        mpfr_set_d(r9248, re, MPFR_RNDN);
        mpfr_cos(r9249, r9248, MPFR_RNDN);
        mpfr_mul(r9250, r9247, r9249, MPFR_RNDN);
        mpfr_mul(r9251, r9246, r9250, MPFR_RNDN);
        return mpfr_get_d(r9251, MPFR_RNDN);
}

