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

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

double f_if(float re, float im) {
        float r28571 = 0.5;
        float r28572 = re;
        float r28573 = cos(r28572);
        float r28574 = r28571 * r28573;
        float r28575 = 0;
        float r28576 = im;
        float r28577 = r28575 - r28576;
        float r28578 = exp(r28577);
        float r28579 = exp(r28576);
        float r28580 = r28578 - r28579;
        float r28581 = r28574 * r28580;
        return r28581;
}

double f_id(double re, double im) {
        double r28582 = 0.5;
        double r28583 = re;
        double r28584 = cos(r28583);
        double r28585 = r28582 * r28584;
        double r28586 = 0;
        double r28587 = im;
        double r28588 = r28586 - r28587;
        double r28589 = exp(r28588);
        double r28590 = exp(r28587);
        double r28591 = r28589 - r28590;
        double r28592 = r28585 * r28591;
        return r28592;
}


double f_of(float re, float im) {
        float r28593 = 0.5;
        float r28594 = re;
        float r28595 = cos(r28594);
        float r28596 = r28593 * r28595;
        float r28597 = 1/60;
        float r28598 = im;
        float r28599 = 5;
        float r28600 = pow(r28598, r28599);
        float r28601 = r28597 * r28600;
        float r28602 = 2;
        float r28603 = r28602 * r28598;
        float r28604 = 1/3;
        float r28605 = 3;
        float r28606 = pow(r28598, r28605);
        float r28607 = r28604 * r28606;
        float r28608 = r28603 + r28607;
        float r28609 = r28601 + r28608;
        float r28610 = -r28609;
        float r28611 = r28596 * r28610;
        return r28611;
}

double f_od(double re, double im) {
        double r28612 = 0.5;
        double r28613 = re;
        double r28614 = cos(r28613);
        double r28615 = r28612 * r28614;
        double r28616 = 1/60;
        double r28617 = im;
        double r28618 = 5;
        double r28619 = pow(r28617, r28618);
        double r28620 = r28616 * r28619;
        double r28621 = 2;
        double r28622 = r28621 * r28617;
        double r28623 = 1/3;
        double r28624 = 3;
        double r28625 = pow(r28617, r28624);
        double r28626 = r28623 * r28625;
        double r28627 = r28622 + r28626;
        double r28628 = r28620 + r28627;
        double r28629 = -r28628;
        double r28630 = r28615 * r28629;
        return r28630;
}

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 r28631, r28632, r28633, r28634, r28635, r28636, r28637, r28638, r28639, r28640, r28641;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28631, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28632);
        mpfr_init(r28633);
        mpfr_init(r28634);
        mpfr_init_set_str(r28635, "0", 10, MPFR_RNDN);
        mpfr_init(r28636);
        mpfr_init(r28637);
        mpfr_init(r28638);
        mpfr_init(r28639);
        mpfr_init(r28640);
        mpfr_init(r28641);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r28632, re, MPFR_RNDN);
        mpfr_cos(r28633, r28632, MPFR_RNDN);
        mpfr_mul(r28634, r28631, r28633, MPFR_RNDN);
        ;
        mpfr_set_d(r28636, im, MPFR_RNDN);
        mpfr_sub(r28637, r28635, r28636, MPFR_RNDN);
        mpfr_exp(r28638, r28637, MPFR_RNDN);
        mpfr_exp(r28639, r28636, MPFR_RNDN);
        mpfr_sub(r28640, r28638, r28639, MPFR_RNDN);
        mpfr_mul(r28641, r28634, r28640, MPFR_RNDN);
        return mpfr_get_d(r28641, MPFR_RNDN);
}

static mpfr_t r28642, r28643, r28644, r28645, r28646, r28647, r28648, r28649, r28650, r28651, r28652, r28653, r28654, r28655, r28656, r28657, r28658, r28659, r28660;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28642, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28643);
        mpfr_init(r28644);
        mpfr_init(r28645);
        mpfr_init_set_str(r28646, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28647);
        mpfr_init_set_str(r28648, "5", 10, MPFR_RNDN);
        mpfr_init(r28649);
        mpfr_init(r28650);
        mpfr_init_set_str(r28651, "2", 10, MPFR_RNDN);
        mpfr_init(r28652);
        mpfr_init_set_str(r28653, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r28654, "3", 10, MPFR_RNDN);
        mpfr_init(r28655);
        mpfr_init(r28656);
        mpfr_init(r28657);
        mpfr_init(r28658);
        mpfr_init(r28659);
        mpfr_init(r28660);
}

double f_fm(double re, double im) {
        ;
        mpfr_set_d(r28643, re, MPFR_RNDN);
        mpfr_cos(r28644, r28643, MPFR_RNDN);
        mpfr_mul(r28645, r28642, r28644, MPFR_RNDN);
        ;
        mpfr_set_d(r28647, im, MPFR_RNDN);
        ;
        mpfr_pow(r28649, r28647, r28648, MPFR_RNDN);
        mpfr_mul(r28650, r28646, r28649, MPFR_RNDN);
        ;
        mpfr_mul(r28652, r28651, r28647, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28655, r28647, r28654, MPFR_RNDN);
        mpfr_mul(r28656, r28653, r28655, MPFR_RNDN);
        mpfr_add(r28657, r28652, r28656, MPFR_RNDN);
        mpfr_add(r28658, r28650, r28657, MPFR_RNDN);
        mpfr_neg(r28659, r28658, MPFR_RNDN);
        mpfr_mul(r28660, r28645, r28659, MPFR_RNDN);
        return mpfr_get_d(r28660, MPFR_RNDN);
}

static mpfr_t r28661, r28662, r28663, r28664, r28665, r28666, r28667, r28668, r28669, r28670, r28671, r28672, r28673, r28674, r28675, r28676, r28677, r28678, r28679;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28661, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28662);
        mpfr_init(r28663);
        mpfr_init(r28664);
        mpfr_init_set_str(r28665, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28666);
        mpfr_init_set_str(r28667, "5", 10, MPFR_RNDN);
        mpfr_init(r28668);
        mpfr_init(r28669);
        mpfr_init_set_str(r28670, "2", 10, MPFR_RNDN);
        mpfr_init(r28671);
        mpfr_init_set_str(r28672, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r28673, "3", 10, MPFR_RNDN);
        mpfr_init(r28674);
        mpfr_init(r28675);
        mpfr_init(r28676);
        mpfr_init(r28677);
        mpfr_init(r28678);
        mpfr_init(r28679);
}

double f_dm(double re, double im) {
        ;
        mpfr_set_d(r28662, re, MPFR_RNDN);
        mpfr_cos(r28663, r28662, MPFR_RNDN);
        mpfr_mul(r28664, r28661, r28663, MPFR_RNDN);
        ;
        mpfr_set_d(r28666, im, MPFR_RNDN);
        ;
        mpfr_pow(r28668, r28666, r28667, MPFR_RNDN);
        mpfr_mul(r28669, r28665, r28668, MPFR_RNDN);
        ;
        mpfr_mul(r28671, r28670, r28666, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28674, r28666, r28673, MPFR_RNDN);
        mpfr_mul(r28675, r28672, r28674, MPFR_RNDN);
        mpfr_add(r28676, r28671, r28675, MPFR_RNDN);
        mpfr_add(r28677, r28669, r28676, MPFR_RNDN);
        mpfr_neg(r28678, r28677, MPFR_RNDN);
        mpfr_mul(r28679, r28664, r28678, MPFR_RNDN);
        return mpfr_get_d(r28679, MPFR_RNDN);
}

