#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 r34574 = 0.5f;
        float r34575 = re;
        float r34576 = sin(r34575);
        float r34577 = r34574 * r34576;
        float r34578 = im;
        float r34579 = -r34578;
        float r34580 = exp(r34579);
        float r34581 = exp(r34578);
        float r34582 = r34580 - r34581;
        float r34583 = r34577 * r34582;
        return r34583;
}

double f_id(double re, double im) {
        double r34584 = 0.5;
        double r34585 = re;
        double r34586 = sin(r34585);
        double r34587 = r34584 * r34586;
        double r34588 = im;
        double r34589 = -r34588;
        double r34590 = exp(r34589);
        double r34591 = exp(r34588);
        double r34592 = r34590 - r34591;
        double r34593 = r34587 * r34592;
        return r34593;
}


double f_of(float re, float im) {
        float r34594 = 0.5f;
        float r34595 = -r34594;
        float r34596 = re;
        float r34597 = sin(r34596);
        float r34598 = r34595 * r34597;
        float r34599 = im;
        float r34600 = r34599 + r34599;
        float r34601 = r34599 * (r34599 * r34599);
        float r34602 = 0.3333333333333333f;
        float r34603 = r34601 * r34602;
        float r34604 = r34600 + r34603;
        float r34605 = 5.0f;
        float r34606 = pow(r34599, r34605);
        float r34607 = 0.016666666666666666f;
        float r34608 = r34606 * r34607;
        float r34609 = r34604 + r34608;
        float r34610 = r34598 * r34609;
        return r34610;
}

double f_od(double re, double im) {
        double r34611 = 0.5;
        double r34612 = -r34611;
        double r34613 = re;
        double r34614 = sin(r34613);
        double r34615 = r34612 * r34614;
        double r34616 = im;
        double r34617 = r34616 + r34616;
        double r34618 = r34616 * (r34616 * r34616);
        double r34619 = 0.3333333333333333;
        double r34620 = r34618 * r34619;
        double r34621 = r34617 + r34620;
        double r34622 = 5.0;
        double r34623 = pow(r34616, r34622);
        double r34624 = 0.016666666666666666;
        double r34625 = r34623 * r34624;
        double r34626 = r34621 + r34625;
        double r34627 = r34615 * r34626;
        return r34627;
}

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 r34628, r34629, r34630, r34631, r34632, r34633, r34634, r34635, r34636, r34637;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r34628, "0.5", 10, MPFR_RNDN);
        mpfr_init(r34629);
        mpfr_init(r34630);
        mpfr_init(r34631);
        mpfr_init(r34632);
        mpfr_init(r34633);
        mpfr_init(r34634);
        mpfr_init(r34635);
        mpfr_init(r34636);
        mpfr_init(r34637);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r34629, re, MPFR_RNDN);
        mpfr_sin(r34630, r34629, MPFR_RNDN);
        mpfr_mul(r34631, r34628, r34630, MPFR_RNDN);
        mpfr_set_d(r34632, im, MPFR_RNDN);
        mpfr_neg(r34633, r34632, MPFR_RNDN);
        mpfr_exp(r34634, r34633, MPFR_RNDN);
        mpfr_exp(r34635, r34632, MPFR_RNDN);
        mpfr_sub(r34636, r34634, r34635, MPFR_RNDN);
        mpfr_mul(r34637, r34631, r34636, MPFR_RNDN);
        return mpfr_get_d(r34637, MPFR_RNDN);
}

static mpfr_t r34638, r34639, r34640, r34641, r34642, r34643, r34644, r34645, r34646, r34647, r34648, r34649, r34650, r34651, r34652, r34653, r34654;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r34638, "0.5", 10, MPFR_RNDN);
        mpfr_init(r34639);
        mpfr_init(r34640);
        mpfr_init(r34641);
        mpfr_init(r34642);
        mpfr_init(r34643);
        mpfr_init(r34644);
        mpfr_init(r34645);
        mpfr_init_set_str(r34646, "1/3", 10, MPFR_RNDN);
        mpfr_init(r34647);
        mpfr_init(r34648);
        mpfr_init_set_str(r34649, "5", 10, MPFR_RNDN);
        mpfr_init(r34650);
        mpfr_init_set_str(r34651, "1/60", 10, MPFR_RNDN);
        mpfr_init(r34652);
        mpfr_init(r34653);
        mpfr_init(r34654);
}

double f_fm(double re, double im) {
        ;
        mpfr_neg(r34639, r34638, MPFR_RNDN);
        mpfr_set_d(r34640, re, MPFR_RNDN);
        mpfr_sin(r34641, r34640, MPFR_RNDN);
        mpfr_mul(r34642, r34639, r34641, MPFR_RNDN);
        mpfr_set_d(r34643, im, MPFR_RNDN);
        mpfr_add(r34644, r34643, r34643, MPFR_RNDN);
        mpfr_mul(r34645, r34643, r34643, MPFR_RNDN); mpfr_mul(r34645, r34645, r34643, MPFR_RNDN);
        ;
        mpfr_mul(r34647, r34645, r34646, MPFR_RNDN);
        mpfr_add(r34648, r34644, r34647, MPFR_RNDN);
        ;
        mpfr_pow(r34650, r34643, r34649, MPFR_RNDN);
        ;
        mpfr_mul(r34652, r34650, r34651, MPFR_RNDN);
        mpfr_add(r34653, r34648, r34652, MPFR_RNDN);
        mpfr_mul(r34654, r34642, r34653, MPFR_RNDN);
        return mpfr_get_d(r34654, MPFR_RNDN);
}

static mpfr_t r34655, r34656, r34657, r34658, r34659, r34660, r34661, r34662, r34663, r34664, r34665, r34666, r34667, r34668, r34669, r34670, r34671;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r34655, "0.5", 10, MPFR_RNDN);
        mpfr_init(r34656);
        mpfr_init(r34657);
        mpfr_init(r34658);
        mpfr_init(r34659);
        mpfr_init(r34660);
        mpfr_init(r34661);
        mpfr_init(r34662);
        mpfr_init_set_str(r34663, "1/3", 10, MPFR_RNDN);
        mpfr_init(r34664);
        mpfr_init(r34665);
        mpfr_init_set_str(r34666, "5", 10, MPFR_RNDN);
        mpfr_init(r34667);
        mpfr_init_set_str(r34668, "1/60", 10, MPFR_RNDN);
        mpfr_init(r34669);
        mpfr_init(r34670);
        mpfr_init(r34671);
}

double f_dm(double re, double im) {
        ;
        mpfr_neg(r34656, r34655, MPFR_RNDN);
        mpfr_set_d(r34657, re, MPFR_RNDN);
        mpfr_sin(r34658, r34657, MPFR_RNDN);
        mpfr_mul(r34659, r34656, r34658, MPFR_RNDN);
        mpfr_set_d(r34660, im, MPFR_RNDN);
        mpfr_add(r34661, r34660, r34660, MPFR_RNDN);
        mpfr_mul(r34662, r34660, r34660, MPFR_RNDN); mpfr_mul(r34662, r34662, r34660, MPFR_RNDN);
        ;
        mpfr_mul(r34664, r34662, r34663, MPFR_RNDN);
        mpfr_add(r34665, r34661, r34664, MPFR_RNDN);
        ;
        mpfr_pow(r34667, r34660, r34666, MPFR_RNDN);
        ;
        mpfr_mul(r34669, r34667, r34668, MPFR_RNDN);
        mpfr_add(r34670, r34665, r34669, MPFR_RNDN);
        mpfr_mul(r34671, r34659, r34670, MPFR_RNDN);
        return mpfr_get_d(r34671, MPFR_RNDN);
}

