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

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

double f_if(float re, float im) {
        float r27577 = 0.5;
        float r27578 = re;
        float r27579 = sin(r27578);
        float r27580 = r27577 * r27579;
        float r27581 = im;
        float r27582 = -r27581;
        float r27583 = exp(r27582);
        float r27584 = exp(r27581);
        float r27585 = r27583 - r27584;
        float r27586 = r27580 * r27585;
        return r27586;
}

double f_id(double re, double im) {
        double r27587 = 0.5;
        double r27588 = re;
        double r27589 = sin(r27588);
        double r27590 = r27587 * r27589;
        double r27591 = im;
        double r27592 = -r27591;
        double r27593 = exp(r27592);
        double r27594 = exp(r27591);
        double r27595 = r27593 - r27594;
        double r27596 = r27590 * r27595;
        return r27596;
}


double f_of(float re, float im) {
        float r27597 = im;
        float r27598 = 1/3;
        float r27599 = r27598 * r27597;
        float r27600 = 2;
        float r27601 = fma(r27599, r27597, r27600);
        float r27602 = 5;
        float r27603 = pow(r27597, r27602);
        float r27604 = 1/60;
        float r27605 = r27603 * r27604;
        float r27606 = fma(r27597, r27601, r27605);
        float r27607 = re;
        float r27608 = sin(r27607);
        float r27609 = 0.5;
        float r27610 = -r27609;
        float r27611 = r27608 * r27610;
        float r27612 = r27606 * r27611;
        return r27612;
}

double f_od(double re, double im) {
        double r27613 = im;
        double r27614 = 1/3;
        double r27615 = r27614 * r27613;
        double r27616 = 2;
        double r27617 = fma(r27615, r27613, r27616);
        double r27618 = 5;
        double r27619 = pow(r27613, r27618);
        double r27620 = 1/60;
        double r27621 = r27619 * r27620;
        double r27622 = fma(r27613, r27617, r27621);
        double r27623 = re;
        double r27624 = sin(r27623);
        double r27625 = 0.5;
        double r27626 = -r27625;
        double r27627 = r27624 * r27626;
        double r27628 = r27622 * r27627;
        return r27628;
}

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 r27629, r27630, r27631, r27632, r27633, r27634, r27635, r27636, r27637, r27638;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r27629, "0.5", 10, MPFR_RNDN);
        mpfr_init(r27630);
        mpfr_init(r27631);
        mpfr_init(r27632);
        mpfr_init(r27633);
        mpfr_init(r27634);
        mpfr_init(r27635);
        mpfr_init(r27636);
        mpfr_init(r27637);
        mpfr_init(r27638);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r27630, re, MPFR_RNDN);
        mpfr_sin(r27631, r27630, MPFR_RNDN);
        mpfr_mul(r27632, r27629, r27631, MPFR_RNDN);
        mpfr_set_d(r27633, im, MPFR_RNDN);
        mpfr_neg(r27634, r27633, MPFR_RNDN);
        mpfr_exp(r27635, r27634, MPFR_RNDN);
        mpfr_exp(r27636, r27633, MPFR_RNDN);
        mpfr_sub(r27637, r27635, r27636, MPFR_RNDN);
        mpfr_mul(r27638, r27632, r27637, MPFR_RNDN);
        return mpfr_get_d(r27638, MPFR_RNDN);
}

static mpfr_t r27639, r27640, r27641, r27642, r27643, r27644, r27645, r27646, r27647, r27648, r27649, r27650, r27651, r27652, r27653, r27654;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27639);
        mpfr_init_set_str(r27640, "1/3", 10, MPFR_RNDN);
        mpfr_init(r27641);
        mpfr_init_set_str(r27642, "2", 10, MPFR_RNDN);
        mpfr_init(r27643);
        mpfr_init_set_str(r27644, "5", 10, MPFR_RNDN);
        mpfr_init(r27645);
        mpfr_init_set_str(r27646, "1/60", 10, MPFR_RNDN);
        mpfr_init(r27647);
        mpfr_init(r27648);
        mpfr_init(r27649);
        mpfr_init(r27650);
        mpfr_init_set_str(r27651, "0.5", 10, MPFR_RNDN);
        mpfr_init(r27652);
        mpfr_init(r27653);
        mpfr_init(r27654);
}

double f_fm(double re, double im) {
        mpfr_set_d(r27639, im, MPFR_RNDN);
        ;
        mpfr_mul(r27641, r27640, r27639, MPFR_RNDN);
        ;
        mpfr_fma(r27643, r27641, r27639, r27642, MPFR_RNDN);
        ;
        mpfr_pow(r27645, r27639, r27644, MPFR_RNDN);
        ;
        mpfr_mul(r27647, r27645, r27646, MPFR_RNDN);
        mpfr_fma(r27648, r27639, r27643, r27647, MPFR_RNDN);
        mpfr_set_d(r27649, re, MPFR_RNDN);
        mpfr_sin(r27650, r27649, MPFR_RNDN);
        ;
        mpfr_neg(r27652, r27651, MPFR_RNDN);
        mpfr_mul(r27653, r27650, r27652, MPFR_RNDN);
        mpfr_mul(r27654, r27648, r27653, MPFR_RNDN);
        return mpfr_get_d(r27654, MPFR_RNDN);
}

static mpfr_t r27655, r27656, r27657, r27658, r27659, r27660, r27661, r27662, r27663, r27664, r27665, r27666, r27667, r27668, r27669, r27670;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27655);
        mpfr_init_set_str(r27656, "1/3", 10, MPFR_RNDN);
        mpfr_init(r27657);
        mpfr_init_set_str(r27658, "2", 10, MPFR_RNDN);
        mpfr_init(r27659);
        mpfr_init_set_str(r27660, "5", 10, MPFR_RNDN);
        mpfr_init(r27661);
        mpfr_init_set_str(r27662, "1/60", 10, MPFR_RNDN);
        mpfr_init(r27663);
        mpfr_init(r27664);
        mpfr_init(r27665);
        mpfr_init(r27666);
        mpfr_init_set_str(r27667, "0.5", 10, MPFR_RNDN);
        mpfr_init(r27668);
        mpfr_init(r27669);
        mpfr_init(r27670);
}

double f_dm(double re, double im) {
        mpfr_set_d(r27655, im, MPFR_RNDN);
        ;
        mpfr_mul(r27657, r27656, r27655, MPFR_RNDN);
        ;
        mpfr_fma(r27659, r27657, r27655, r27658, MPFR_RNDN);
        ;
        mpfr_pow(r27661, r27655, r27660, MPFR_RNDN);
        ;
        mpfr_mul(r27663, r27661, r27662, MPFR_RNDN);
        mpfr_fma(r27664, r27655, r27659, r27663, MPFR_RNDN);
        mpfr_set_d(r27665, re, MPFR_RNDN);
        mpfr_sin(r27666, r27665, MPFR_RNDN);
        ;
        mpfr_neg(r27668, r27667, MPFR_RNDN);
        mpfr_mul(r27669, r27666, r27668, MPFR_RNDN);
        mpfr_mul(r27670, r27664, r27669, MPFR_RNDN);
        return mpfr_get_d(r27670, MPFR_RNDN);
}

