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

char *name = "Complex sine and cosine";

double f_if(float re, float im) {
        float r28664 = 0.5f;
        float r28665 = re;
        float r28666 = sin(r28665);
        float r28667 = r28664 * r28666;
        float r28668 = im;
        float r28669 = -r28668;
        float r28670 = exp(r28669);
        float r28671 = exp(r28668);
        float r28672 = r28670 - r28671;
        float r28673 = r28667 * r28672;
        return r28673;
}

double f_id(double re, double im) {
        double r28674 = 0.5;
        double r28675 = re;
        double r28676 = sin(r28675);
        double r28677 = r28674 * r28676;
        double r28678 = im;
        double r28679 = -r28678;
        double r28680 = exp(r28679);
        double r28681 = exp(r28678);
        double r28682 = r28680 - r28681;
        double r28683 = r28677 * r28682;
        return r28683;
}


double f_of(float re, float im) {
        float r28684 = im;
        float r28685 = 5.0f;
        float r28686 = pow(r28684, r28685);
        float r28687 = 0.016666666666666666f;
        float r28688 = r28686 * r28687;
        float r28689 = r28684 + r28684;
        float r28690 = r28688 + r28689;
        float r28691 = 0.3333333333333333f;
        float r28692 = r28684 * (r28684 * r28684);
        float r28693 = r28691 * r28692;
        float r28694 = r28690 + r28693;
        float r28695 = 0.5f;
        float r28696 = -r28695;
        float r28697 = re;
        float r28698 = sin(r28697);
        float r28699 = r28696 * r28698;
        float r28700 = r28694 * r28699;
        return r28700;
}

double f_od(double re, double im) {
        double r28701 = im;
        double r28702 = 5.0;
        double r28703 = pow(r28701, r28702);
        double r28704 = 0.016666666666666666;
        double r28705 = r28703 * r28704;
        double r28706 = r28701 + r28701;
        double r28707 = r28705 + r28706;
        double r28708 = 0.3333333333333333;
        double r28709 = r28701 * (r28701 * r28701);
        double r28710 = r28708 * r28709;
        double r28711 = r28707 + r28710;
        double r28712 = 0.5;
        double r28713 = -r28712;
        double r28714 = re;
        double r28715 = sin(r28714);
        double r28716 = r28713 * r28715;
        double r28717 = r28711 * r28716;
        return r28717;
}

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 r28718, r28719, r28720, r28721, r28722, r28723, r28724, r28725, r28726, r28727;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r28718, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28719);
        mpfr_init(r28720);
        mpfr_init(r28721);
        mpfr_init(r28722);
        mpfr_init(r28723);
        mpfr_init(r28724);
        mpfr_init(r28725);
        mpfr_init(r28726);
        mpfr_init(r28727);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r28719, re, MPFR_RNDN);
        mpfr_sin(r28720, r28719, MPFR_RNDN);
        mpfr_mul(r28721, r28718, r28720, MPFR_RNDN);
        mpfr_set_d(r28722, im, MPFR_RNDN);
        mpfr_neg(r28723, r28722, MPFR_RNDN);
        mpfr_exp(r28724, r28723, MPFR_RNDN);
        mpfr_exp(r28725, r28722, MPFR_RNDN);
        mpfr_sub(r28726, r28724, r28725, MPFR_RNDN);
        mpfr_mul(r28727, r28721, r28726, MPFR_RNDN);
        return mpfr_get_d(r28727, MPFR_RNDN);
}

static mpfr_t r28728, r28729, r28730, r28731, r28732, r28733, r28734, r28735, r28736, r28737, r28738, r28739, r28740, r28741, r28742, r28743, r28744;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28728);
        mpfr_init_set_str(r28729, "5", 10, MPFR_RNDN);
        mpfr_init(r28730);
        mpfr_init_set_str(r28731, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28732);
        mpfr_init(r28733);
        mpfr_init(r28734);
        mpfr_init_set_str(r28735, "1/3", 10, MPFR_RNDN);
        mpfr_init(r28736);
        mpfr_init(r28737);
        mpfr_init(r28738);
        mpfr_init_set_str(r28739, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28740);
        mpfr_init(r28741);
        mpfr_init(r28742);
        mpfr_init(r28743);
        mpfr_init(r28744);
}

double f_fm(double re, double im) {
        mpfr_set_d(r28728, im, MPFR_RNDN);
        ;
        mpfr_pow(r28730, r28728, r28729, MPFR_RNDN);
        ;
        mpfr_mul(r28732, r28730, r28731, MPFR_RNDN);
        mpfr_add(r28733, r28728, r28728, MPFR_RNDN);
        mpfr_add(r28734, r28732, r28733, MPFR_RNDN);
        ;
        mpfr_mul(r28736, r28728, r28728, MPFR_RNDN); mpfr_mul(r28736, r28736, r28728, MPFR_RNDN);
        mpfr_mul(r28737, r28735, r28736, MPFR_RNDN);
        mpfr_add(r28738, r28734, r28737, MPFR_RNDN);
        ;
        mpfr_neg(r28740, r28739, MPFR_RNDN);
        mpfr_set_d(r28741, re, MPFR_RNDN);
        mpfr_sin(r28742, r28741, MPFR_RNDN);
        mpfr_mul(r28743, r28740, r28742, MPFR_RNDN);
        mpfr_mul(r28744, r28738, r28743, MPFR_RNDN);
        return mpfr_get_d(r28744, MPFR_RNDN);
}

static mpfr_t r28745, r28746, r28747, r28748, r28749, r28750, r28751, r28752, r28753, r28754, r28755, r28756, r28757, r28758, r28759, r28760, r28761;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28745);
        mpfr_init_set_str(r28746, "5", 10, MPFR_RNDN);
        mpfr_init(r28747);
        mpfr_init_set_str(r28748, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28749);
        mpfr_init(r28750);
        mpfr_init(r28751);
        mpfr_init_set_str(r28752, "1/3", 10, MPFR_RNDN);
        mpfr_init(r28753);
        mpfr_init(r28754);
        mpfr_init(r28755);
        mpfr_init_set_str(r28756, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28757);
        mpfr_init(r28758);
        mpfr_init(r28759);
        mpfr_init(r28760);
        mpfr_init(r28761);
}

double f_dm(double re, double im) {
        mpfr_set_d(r28745, im, MPFR_RNDN);
        ;
        mpfr_pow(r28747, r28745, r28746, MPFR_RNDN);
        ;
        mpfr_mul(r28749, r28747, r28748, MPFR_RNDN);
        mpfr_add(r28750, r28745, r28745, MPFR_RNDN);
        mpfr_add(r28751, r28749, r28750, MPFR_RNDN);
        ;
        mpfr_mul(r28753, r28745, r28745, MPFR_RNDN); mpfr_mul(r28753, r28753, r28745, MPFR_RNDN);
        mpfr_mul(r28754, r28752, r28753, MPFR_RNDN);
        mpfr_add(r28755, r28751, r28754, MPFR_RNDN);
        ;
        mpfr_neg(r28757, r28756, MPFR_RNDN);
        mpfr_set_d(r28758, re, MPFR_RNDN);
        mpfr_sin(r28759, r28758, MPFR_RNDN);
        mpfr_mul(r28760, r28757, r28759, MPFR_RNDN);
        mpfr_mul(r28761, r28755, r28760, MPFR_RNDN);
        return mpfr_get_d(r28761, MPFR_RNDN);
}

