#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 r11599 = 0.5f;
        float r11600 = re;
        float r11601 = sin(r11600);
        float r11602 = r11599 * r11601;
        float r11603 = im;
        float r11604 = -r11603;
        float r11605 = exp(r11604);
        float r11606 = exp(r11603);
        float r11607 = r11605 - r11606;
        float r11608 = r11602 * r11607;
        return r11608;
}

double f_id(double re, double im) {
        double r11609 = 0.5;
        double r11610 = re;
        double r11611 = sin(r11610);
        double r11612 = r11609 * r11611;
        double r11613 = im;
        double r11614 = -r11613;
        double r11615 = exp(r11614);
        double r11616 = exp(r11613);
        double r11617 = r11615 - r11616;
        double r11618 = r11612 * r11617;
        return r11618;
}


double f_of(float re, float im) {
        float r11619 = im;
        float r11620 = r11619 * r11619;
        float r11621 = 0.3333333333333333f;
        float r11622 = 2.0f;
        float r11623 = fma(r11620, r11621, r11622);
        float r11624 = -r11619;
        float r11625 = 0.016666666666666666f;
        float r11626 = -r11625;
        float r11627 = 5.0f;
        float r11628 = pow(r11619, r11627);
        float r11629 = r11626 * r11628;
        float r11630 = fma(r11623, r11624, r11629);
        float r11631 = 0.5f;
        float r11632 = re;
        float r11633 = sin(r11632);
        float r11634 = r11631 * r11633;
        float r11635 = r11630 * r11634;
        return r11635;
}

double f_od(double re, double im) {
        double r11636 = im;
        double r11637 = r11636 * r11636;
        double r11638 = 0.3333333333333333;
        double r11639 = 2.0;
        double r11640 = fma(r11637, r11638, r11639);
        double r11641 = -r11636;
        double r11642 = 0.016666666666666666;
        double r11643 = -r11642;
        double r11644 = 5.0;
        double r11645 = pow(r11636, r11644);
        double r11646 = r11643 * r11645;
        double r11647 = fma(r11640, r11641, r11646);
        double r11648 = 0.5;
        double r11649 = re;
        double r11650 = sin(r11649);
        double r11651 = r11648 * r11650;
        double r11652 = r11647 * r11651;
        return r11652;
}

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 r11653, r11654, r11655, r11656, r11657, r11658, r11659, r11660, r11661, r11662;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r11653, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11654);
        mpfr_init(r11655);
        mpfr_init(r11656);
        mpfr_init(r11657);
        mpfr_init(r11658);
        mpfr_init(r11659);
        mpfr_init(r11660);
        mpfr_init(r11661);
        mpfr_init(r11662);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r11654, re, MPFR_RNDN);
        mpfr_sin(r11655, r11654, MPFR_RNDN);
        mpfr_mul(r11656, r11653, r11655, MPFR_RNDN);
        mpfr_set_d(r11657, im, MPFR_RNDN);
        mpfr_neg(r11658, r11657, MPFR_RNDN);
        mpfr_exp(r11659, r11658, MPFR_RNDN);
        mpfr_exp(r11660, r11657, MPFR_RNDN);
        mpfr_sub(r11661, r11659, r11660, MPFR_RNDN);
        mpfr_mul(r11662, r11656, r11661, MPFR_RNDN);
        return mpfr_get_d(r11662, MPFR_RNDN);
}

static mpfr_t r11663, r11664, r11665, r11666, r11667, r11668, r11669, r11670, r11671, r11672, r11673, r11674, r11675, r11676, r11677, r11678, r11679;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11663);
        mpfr_init(r11664);
        mpfr_init_set_str(r11665, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r11666, "2", 10, MPFR_RNDN);
        mpfr_init(r11667);
        mpfr_init(r11668);
        mpfr_init_set_str(r11669, "1/60", 10, MPFR_RNDN);
        mpfr_init(r11670);
        mpfr_init_set_str(r11671, "5", 10, MPFR_RNDN);
        mpfr_init(r11672);
        mpfr_init(r11673);
        mpfr_init(r11674);
        mpfr_init_set_str(r11675, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11676);
        mpfr_init(r11677);
        mpfr_init(r11678);
        mpfr_init(r11679);
}

double f_fm(double re, double im) {
        mpfr_set_d(r11663, im, MPFR_RNDN);
        mpfr_mul(r11664, r11663, r11663, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r11667, r11664, r11665, r11666, MPFR_RNDN);
        mpfr_neg(r11668, r11663, MPFR_RNDN);
        ;
        mpfr_neg(r11670, r11669, MPFR_RNDN);
        ;
        mpfr_pow(r11672, r11663, r11671, MPFR_RNDN);
        mpfr_mul(r11673, r11670, r11672, MPFR_RNDN);
        mpfr_fma(r11674, r11667, r11668, r11673, MPFR_RNDN);
        ;
        mpfr_set_d(r11676, re, MPFR_RNDN);
        mpfr_sin(r11677, r11676, MPFR_RNDN);
        mpfr_mul(r11678, r11675, r11677, MPFR_RNDN);
        mpfr_mul(r11679, r11674, r11678, MPFR_RNDN);
        return mpfr_get_d(r11679, MPFR_RNDN);
}

static mpfr_t r11680, r11681, r11682, r11683, r11684, r11685, r11686, r11687, r11688, r11689, r11690, r11691, r11692, r11693, r11694, r11695, r11696;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11680);
        mpfr_init(r11681);
        mpfr_init_set_str(r11682, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r11683, "2", 10, MPFR_RNDN);
        mpfr_init(r11684);
        mpfr_init(r11685);
        mpfr_init_set_str(r11686, "1/60", 10, MPFR_RNDN);
        mpfr_init(r11687);
        mpfr_init_set_str(r11688, "5", 10, MPFR_RNDN);
        mpfr_init(r11689);
        mpfr_init(r11690);
        mpfr_init(r11691);
        mpfr_init_set_str(r11692, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11693);
        mpfr_init(r11694);
        mpfr_init(r11695);
        mpfr_init(r11696);
}

double f_dm(double re, double im) {
        mpfr_set_d(r11680, im, MPFR_RNDN);
        mpfr_mul(r11681, r11680, r11680, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r11684, r11681, r11682, r11683, MPFR_RNDN);
        mpfr_neg(r11685, r11680, MPFR_RNDN);
        ;
        mpfr_neg(r11687, r11686, MPFR_RNDN);
        ;
        mpfr_pow(r11689, r11680, r11688, MPFR_RNDN);
        mpfr_mul(r11690, r11687, r11689, MPFR_RNDN);
        mpfr_fma(r11691, r11684, r11685, r11690, MPFR_RNDN);
        ;
        mpfr_set_d(r11693, re, MPFR_RNDN);
        mpfr_sin(r11694, r11693, MPFR_RNDN);
        mpfr_mul(r11695, r11692, r11694, MPFR_RNDN);
        mpfr_mul(r11696, r11691, r11695, MPFR_RNDN);
        return mpfr_get_d(r11696, MPFR_RNDN);
}

