#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 r11570 = 0.5f;
        float r11571 = re;
        float r11572 = sin(r11571);
        float r11573 = r11570 * r11572;
        float r11574 = im;
        float r11575 = -r11574;
        float r11576 = exp(r11575);
        float r11577 = exp(r11574);
        float r11578 = r11576 - r11577;
        float r11579 = r11573 * r11578;
        return r11579;
}

double f_id(double re, double im) {
        double r11580 = 0.5;
        double r11581 = re;
        double r11582 = sin(r11581);
        double r11583 = r11580 * r11582;
        double r11584 = im;
        double r11585 = -r11584;
        double r11586 = exp(r11585);
        double r11587 = exp(r11584);
        double r11588 = r11586 - r11587;
        double r11589 = r11583 * r11588;
        return r11589;
}


double f_of(float re, float im) {
        float r11590 = im;
        float r11591 = r11590 * r11590;
        float r11592 = 0.3333333333333333f;
        float r11593 = 2.0f;
        float r11594 = fma(r11591, r11592, r11593);
        float r11595 = -r11590;
        float r11596 = 0.016666666666666666f;
        float r11597 = -r11596;
        float r11598 = 5.0f;
        float r11599 = pow(r11590, r11598);
        float r11600 = r11597 * r11599;
        float r11601 = fma(r11594, r11595, r11600);
        float r11602 = 0.5f;
        float r11603 = re;
        float r11604 = sin(r11603);
        float r11605 = r11602 * r11604;
        float r11606 = r11601 * r11605;
        return r11606;
}

double f_od(double re, double im) {
        double r11607 = im;
        double r11608 = r11607 * r11607;
        double r11609 = 0.3333333333333333;
        double r11610 = 2.0;
        double r11611 = fma(r11608, r11609, r11610);
        double r11612 = -r11607;
        double r11613 = 0.016666666666666666;
        double r11614 = -r11613;
        double r11615 = 5.0;
        double r11616 = pow(r11607, r11615);
        double r11617 = r11614 * r11616;
        double r11618 = fma(r11611, r11612, r11617);
        double r11619 = 0.5;
        double r11620 = re;
        double r11621 = sin(r11620);
        double r11622 = r11619 * r11621;
        double r11623 = r11618 * r11622;
        return r11623;
}

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 r11624, r11625, r11626, r11627, r11628, r11629, r11630, r11631, r11632, r11633;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r11624, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11625);
        mpfr_init(r11626);
        mpfr_init(r11627);
        mpfr_init(r11628);
        mpfr_init(r11629);
        mpfr_init(r11630);
        mpfr_init(r11631);
        mpfr_init(r11632);
        mpfr_init(r11633);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r11625, re, MPFR_RNDN);
        mpfr_sin(r11626, r11625, MPFR_RNDN);
        mpfr_mul(r11627, r11624, r11626, MPFR_RNDN);
        mpfr_set_d(r11628, im, MPFR_RNDN);
        mpfr_neg(r11629, r11628, MPFR_RNDN);
        mpfr_exp(r11630, r11629, MPFR_RNDN);
        mpfr_exp(r11631, r11628, MPFR_RNDN);
        mpfr_sub(r11632, r11630, r11631, MPFR_RNDN);
        mpfr_mul(r11633, r11627, r11632, MPFR_RNDN);
        return mpfr_get_d(r11633, MPFR_RNDN);
}

static mpfr_t r11634, r11635, r11636, r11637, r11638, r11639, r11640, r11641, r11642, r11643, r11644, r11645, r11646, r11647, r11648, r11649, r11650;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11634);
        mpfr_init(r11635);
        mpfr_init_set_str(r11636, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r11637, "2", 10, MPFR_RNDN);
        mpfr_init(r11638);
        mpfr_init(r11639);
        mpfr_init_set_str(r11640, "1/60", 10, MPFR_RNDN);
        mpfr_init(r11641);
        mpfr_init_set_str(r11642, "5", 10, MPFR_RNDN);
        mpfr_init(r11643);
        mpfr_init(r11644);
        mpfr_init(r11645);
        mpfr_init_set_str(r11646, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11647);
        mpfr_init(r11648);
        mpfr_init(r11649);
        mpfr_init(r11650);
}

double f_fm(double re, double im) {
        mpfr_set_d(r11634, im, MPFR_RNDN);
        mpfr_mul(r11635, r11634, r11634, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r11638, r11635, r11636, r11637, MPFR_RNDN);
        mpfr_neg(r11639, r11634, MPFR_RNDN);
        ;
        mpfr_neg(r11641, r11640, MPFR_RNDN);
        ;
        mpfr_pow(r11643, r11634, r11642, MPFR_RNDN);
        mpfr_mul(r11644, r11641, r11643, MPFR_RNDN);
        mpfr_fma(r11645, r11638, r11639, r11644, MPFR_RNDN);
        ;
        mpfr_set_d(r11647, re, MPFR_RNDN);
        mpfr_sin(r11648, r11647, MPFR_RNDN);
        mpfr_mul(r11649, r11646, r11648, MPFR_RNDN);
        mpfr_mul(r11650, r11645, r11649, MPFR_RNDN);
        return mpfr_get_d(r11650, MPFR_RNDN);
}

static mpfr_t r11651, r11652, r11653, r11654, r11655, r11656, r11657, r11658, r11659, r11660, r11661, r11662, r11663, r11664, r11665, r11666, r11667;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11651);
        mpfr_init(r11652);
        mpfr_init_set_str(r11653, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r11654, "2", 10, MPFR_RNDN);
        mpfr_init(r11655);
        mpfr_init(r11656);
        mpfr_init_set_str(r11657, "1/60", 10, MPFR_RNDN);
        mpfr_init(r11658);
        mpfr_init_set_str(r11659, "5", 10, MPFR_RNDN);
        mpfr_init(r11660);
        mpfr_init(r11661);
        mpfr_init(r11662);
        mpfr_init_set_str(r11663, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11664);
        mpfr_init(r11665);
        mpfr_init(r11666);
        mpfr_init(r11667);
}

double f_dm(double re, double im) {
        mpfr_set_d(r11651, im, MPFR_RNDN);
        mpfr_mul(r11652, r11651, r11651, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r11655, r11652, r11653, r11654, MPFR_RNDN);
        mpfr_neg(r11656, r11651, MPFR_RNDN);
        ;
        mpfr_neg(r11658, r11657, MPFR_RNDN);
        ;
        mpfr_pow(r11660, r11651, r11659, MPFR_RNDN);
        mpfr_mul(r11661, r11658, r11660, MPFR_RNDN);
        mpfr_fma(r11662, r11655, r11656, r11661, MPFR_RNDN);
        ;
        mpfr_set_d(r11664, re, MPFR_RNDN);
        mpfr_sin(r11665, r11664, MPFR_RNDN);
        mpfr_mul(r11666, r11663, r11665, MPFR_RNDN);
        mpfr_mul(r11667, r11662, r11666, MPFR_RNDN);
        return mpfr_get_d(r11667, MPFR_RNDN);
}

