#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 r28532 = 0.5;
        float r28533 = re;
        float r28534 = cos(r28533);
        float r28535 = r28532 * r28534;
        float r28536 = 0;
        float r28537 = im;
        float r28538 = r28536 - r28537;
        float r28539 = exp(r28538);
        float r28540 = exp(r28537);
        float r28541 = r28539 - r28540;
        float r28542 = r28535 * r28541;
        return r28542;
}

double f_id(double re, double im) {
        double r28543 = 0.5;
        double r28544 = re;
        double r28545 = cos(r28544);
        double r28546 = r28543 * r28545;
        double r28547 = 0;
        double r28548 = im;
        double r28549 = r28547 - r28548;
        double r28550 = exp(r28549);
        double r28551 = exp(r28548);
        double r28552 = r28550 - r28551;
        double r28553 = r28546 * r28552;
        return r28553;
}


double f_of(float re, float im) {
        float r28554 = 0.5;
        float r28555 = re;
        float r28556 = cos(r28555);
        float r28557 = r28554 * r28556;
        float r28558 = 1/60;
        float r28559 = im;
        float r28560 = 5;
        float r28561 = pow(r28559, r28560);
        float r28562 = r28558 * r28561;
        float r28563 = 2;
        float r28564 = r28563 * r28559;
        float r28565 = 1/3;
        float r28566 = 3;
        float r28567 = pow(r28559, r28566);
        float r28568 = r28565 * r28567;
        float r28569 = r28564 + r28568;
        float r28570 = r28562 + r28569;
        float r28571 = -r28570;
        float r28572 = r28557 * r28571;
        return r28572;
}

double f_od(double re, double im) {
        double r28573 = 0.5;
        double r28574 = re;
        double r28575 = cos(r28574);
        double r28576 = r28573 * r28575;
        double r28577 = 1/60;
        double r28578 = im;
        double r28579 = 5;
        double r28580 = pow(r28578, r28579);
        double r28581 = r28577 * r28580;
        double r28582 = 2;
        double r28583 = r28582 * r28578;
        double r28584 = 1/3;
        double r28585 = 3;
        double r28586 = pow(r28578, r28585);
        double r28587 = r28584 * r28586;
        double r28588 = r28583 + r28587;
        double r28589 = r28581 + r28588;
        double r28590 = -r28589;
        double r28591 = r28576 * r28590;
        return r28591;
}

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 r28592, r28593, r28594, r28595, r28596, r28597, r28598, r28599, r28600, r28601, r28602;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28592, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28593);
        mpfr_init(r28594);
        mpfr_init(r28595);
        mpfr_init_set_str(r28596, "0", 10, MPFR_RNDN);
        mpfr_init(r28597);
        mpfr_init(r28598);
        mpfr_init(r28599);
        mpfr_init(r28600);
        mpfr_init(r28601);
        mpfr_init(r28602);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r28593, re, MPFR_RNDN);
        mpfr_cos(r28594, r28593, MPFR_RNDN);
        mpfr_mul(r28595, r28592, r28594, MPFR_RNDN);
        ;
        mpfr_set_d(r28597, im, MPFR_RNDN);
        mpfr_sub(r28598, r28596, r28597, MPFR_RNDN);
        mpfr_exp(r28599, r28598, MPFR_RNDN);
        mpfr_exp(r28600, r28597, MPFR_RNDN);
        mpfr_sub(r28601, r28599, r28600, MPFR_RNDN);
        mpfr_mul(r28602, r28595, r28601, MPFR_RNDN);
        return mpfr_get_d(r28602, MPFR_RNDN);
}

static mpfr_t r28603, r28604, r28605, r28606, r28607, r28608, r28609, r28610, r28611, r28612, r28613, r28614, r28615, r28616, r28617, r28618, r28619, r28620, r28621;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28603, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28604);
        mpfr_init(r28605);
        mpfr_init(r28606);
        mpfr_init_set_str(r28607, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28608);
        mpfr_init_set_str(r28609, "5", 10, MPFR_RNDN);
        mpfr_init(r28610);
        mpfr_init(r28611);
        mpfr_init_set_str(r28612, "2", 10, MPFR_RNDN);
        mpfr_init(r28613);
        mpfr_init_set_str(r28614, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r28615, "3", 10, MPFR_RNDN);
        mpfr_init(r28616);
        mpfr_init(r28617);
        mpfr_init(r28618);
        mpfr_init(r28619);
        mpfr_init(r28620);
        mpfr_init(r28621);
}

double f_fm(double re, double im) {
        ;
        mpfr_set_d(r28604, re, MPFR_RNDN);
        mpfr_cos(r28605, r28604, MPFR_RNDN);
        mpfr_mul(r28606, r28603, r28605, MPFR_RNDN);
        ;
        mpfr_set_d(r28608, im, MPFR_RNDN);
        ;
        mpfr_pow(r28610, r28608, r28609, MPFR_RNDN);
        mpfr_mul(r28611, r28607, r28610, MPFR_RNDN);
        ;
        mpfr_mul(r28613, r28612, r28608, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28616, r28608, r28615, MPFR_RNDN);
        mpfr_mul(r28617, r28614, r28616, MPFR_RNDN);
        mpfr_add(r28618, r28613, r28617, MPFR_RNDN);
        mpfr_add(r28619, r28611, r28618, MPFR_RNDN);
        mpfr_neg(r28620, r28619, MPFR_RNDN);
        mpfr_mul(r28621, r28606, r28620, MPFR_RNDN);
        return mpfr_get_d(r28621, MPFR_RNDN);
}

static mpfr_t r28622, r28623, r28624, r28625, r28626, r28627, r28628, r28629, r28630, r28631, r28632, r28633, r28634, r28635, r28636, r28637, r28638, r28639, r28640;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28622, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28623);
        mpfr_init(r28624);
        mpfr_init(r28625);
        mpfr_init_set_str(r28626, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28627);
        mpfr_init_set_str(r28628, "5", 10, MPFR_RNDN);
        mpfr_init(r28629);
        mpfr_init(r28630);
        mpfr_init_set_str(r28631, "2", 10, MPFR_RNDN);
        mpfr_init(r28632);
        mpfr_init_set_str(r28633, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r28634, "3", 10, MPFR_RNDN);
        mpfr_init(r28635);
        mpfr_init(r28636);
        mpfr_init(r28637);
        mpfr_init(r28638);
        mpfr_init(r28639);
        mpfr_init(r28640);
}

double f_dm(double re, double im) {
        ;
        mpfr_set_d(r28623, re, MPFR_RNDN);
        mpfr_cos(r28624, r28623, MPFR_RNDN);
        mpfr_mul(r28625, r28622, r28624, MPFR_RNDN);
        ;
        mpfr_set_d(r28627, im, MPFR_RNDN);
        ;
        mpfr_pow(r28629, r28627, r28628, MPFR_RNDN);
        mpfr_mul(r28630, r28626, r28629, MPFR_RNDN);
        ;
        mpfr_mul(r28632, r28631, r28627, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28635, r28627, r28634, MPFR_RNDN);
        mpfr_mul(r28636, r28633, r28635, MPFR_RNDN);
        mpfr_add(r28637, r28632, r28636, MPFR_RNDN);
        mpfr_add(r28638, r28630, r28637, MPFR_RNDN);
        mpfr_neg(r28639, r28638, MPFR_RNDN);
        mpfr_mul(r28640, r28625, r28639, MPFR_RNDN);
        return mpfr_get_d(r28640, MPFR_RNDN);
}

