#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 r18444 = 0.5f;
        float r18445 = re;
        float r18446 = cos(r18445);
        float r18447 = r18444 * r18446;
        float r18448 = im;
        float r18449 = -r18448;
        float r18450 = exp(r18449);
        float r18451 = exp(r18448);
        float r18452 = r18450 + r18451;
        float r18453 = r18447 * r18452;
        return r18453;
}

double f_id(double re, double im) {
        double r18454 = 0.5;
        double r18455 = re;
        double r18456 = cos(r18455);
        double r18457 = r18454 * r18456;
        double r18458 = im;
        double r18459 = -r18458;
        double r18460 = exp(r18459);
        double r18461 = exp(r18458);
        double r18462 = r18460 + r18461;
        double r18463 = r18457 * r18462;
        return r18463;
}


double f_of(float re, float im) {
        float r18464 = 0.5f;
        float r18465 = re;
        float r18466 = cos(r18465);
        float r18467 = r18464 * r18466;
        float r18468 = im;
        float r18469 = exp(r18468);
        float r18470 = r18467 / r18469;
        float r18471 = r18467 * r18469;
        float r18472 = r18470 + r18471;
        return r18472;
}

double f_od(double re, double im) {
        double r18473 = 0.5;
        double r18474 = re;
        double r18475 = cos(r18474);
        double r18476 = r18473 * r18475;
        double r18477 = im;
        double r18478 = exp(r18477);
        double r18479 = r18476 / r18478;
        double r18480 = r18476 * r18478;
        double r18481 = r18479 + r18480;
        return r18481;
}

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 r18482, r18483, r18484, r18485, r18486, r18487, r18488, r18489, r18490, r18491;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18482, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18483);
        mpfr_init(r18484);
        mpfr_init(r18485);
        mpfr_init(r18486);
        mpfr_init(r18487);
        mpfr_init(r18488);
        mpfr_init(r18489);
        mpfr_init(r18490);
        mpfr_init(r18491);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r18483, re, MPFR_RNDN);
        mpfr_cos(r18484, r18483, MPFR_RNDN);
        mpfr_mul(r18485, r18482, r18484, MPFR_RNDN);
        mpfr_set_d(r18486, im, MPFR_RNDN);
        mpfr_neg(r18487, r18486, MPFR_RNDN);
        mpfr_exp(r18488, r18487, MPFR_RNDN);
        mpfr_exp(r18489, r18486, MPFR_RNDN);
        mpfr_add(r18490, r18488, r18489, MPFR_RNDN);
        mpfr_mul(r18491, r18485, r18490, MPFR_RNDN);
        return mpfr_get_d(r18491, MPFR_RNDN);
}

static mpfr_t r18492, r18493, r18494, r18495, r18496, r18497, r18498, r18499, r18500;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18492, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18493);
        mpfr_init(r18494);
        mpfr_init(r18495);
        mpfr_init(r18496);
        mpfr_init(r18497);
        mpfr_init(r18498);
        mpfr_init(r18499);
        mpfr_init(r18500);
}

double f_fm(double re, double im) {
        ;
        mpfr_set_d(r18493, re, MPFR_RNDN);
        mpfr_cos(r18494, r18493, MPFR_RNDN);
        mpfr_mul(r18495, r18492, r18494, MPFR_RNDN);
        mpfr_set_d(r18496, im, MPFR_RNDN);
        mpfr_exp(r18497, r18496, MPFR_RNDN);
        mpfr_div(r18498, r18495, r18497, MPFR_RNDN);
        mpfr_mul(r18499, r18495, r18497, MPFR_RNDN);
        mpfr_add(r18500, r18498, r18499, MPFR_RNDN);
        return mpfr_get_d(r18500, MPFR_RNDN);
}

static mpfr_t r18501, r18502, r18503, r18504, r18505, r18506, r18507, r18508, r18509;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18501, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18502);
        mpfr_init(r18503);
        mpfr_init(r18504);
        mpfr_init(r18505);
        mpfr_init(r18506);
        mpfr_init(r18507);
        mpfr_init(r18508);
        mpfr_init(r18509);
}

double f_dm(double re, double im) {
        ;
        mpfr_set_d(r18502, re, MPFR_RNDN);
        mpfr_cos(r18503, r18502, MPFR_RNDN);
        mpfr_mul(r18504, r18501, r18503, MPFR_RNDN);
        mpfr_set_d(r18505, im, MPFR_RNDN);
        mpfr_exp(r18506, r18505, MPFR_RNDN);
        mpfr_div(r18507, r18504, r18506, MPFR_RNDN);
        mpfr_mul(r18508, r18504, r18506, MPFR_RNDN);
        mpfr_add(r18509, r18507, r18508, MPFR_RNDN);
        return mpfr_get_d(r18509, MPFR_RNDN);
}

