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

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

double f_if(float re, float im) {
        float r8552 = 0.5;
        float r8553 = re;
        float r8554 = sin(r8553);
        float r8555 = r8552 * r8554;
        float r8556 = 0;
        float r8557 = im;
        float r8558 = r8556 - r8557;
        float r8559 = exp(r8558);
        float r8560 = exp(r8557);
        float r8561 = r8559 + r8560;
        float r8562 = r8555 * r8561;
        return r8562;
}

double f_id(double re, double im) {
        double r8563 = 0.5;
        double r8564 = re;
        double r8565 = sin(r8564);
        double r8566 = r8563 * r8565;
        double r8567 = 0;
        double r8568 = im;
        double r8569 = r8567 - r8568;
        double r8570 = exp(r8569);
        double r8571 = exp(r8568);
        double r8572 = r8570 + r8571;
        double r8573 = r8566 * r8572;
        return r8573;
}


double f_of(float re, float im) {
        float r8574 = re;
        float r8575 = sin(r8574);
        float r8576 = 0.5;
        float r8577 = r8575 * r8576;
        float r8578 = im;
        float r8579 = exp(r8578);
        float r8580 = r8577 / r8579;
        float r8581 = r8576 * r8575;
        float r8582 = r8581 * r8579;
        float r8583 = r8580 + r8582;
        return r8583;
}

double f_od(double re, double im) {
        double r8584 = re;
        double r8585 = sin(r8584);
        double r8586 = 0.5;
        double r8587 = r8585 * r8586;
        double r8588 = im;
        double r8589 = exp(r8588);
        double r8590 = r8587 / r8589;
        double r8591 = r8586 * r8585;
        double r8592 = r8591 * r8589;
        double r8593 = r8590 + r8592;
        return r8593;
}

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 r8594, r8595, r8596, r8597, r8598, r8599, r8600, r8601, r8602, r8603, r8604;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8594, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8595);
        mpfr_init(r8596);
        mpfr_init(r8597);
        mpfr_init_set_str(r8598, "0", 10, MPFR_RNDN);
        mpfr_init(r8599);
        mpfr_init(r8600);
        mpfr_init(r8601);
        mpfr_init(r8602);
        mpfr_init(r8603);
        mpfr_init(r8604);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r8595, re, MPFR_RNDN);
        mpfr_sin(r8596, r8595, MPFR_RNDN);
        mpfr_mul(r8597, r8594, r8596, MPFR_RNDN);
        ;
        mpfr_set_d(r8599, im, MPFR_RNDN);
        mpfr_sub(r8600, r8598, r8599, MPFR_RNDN);
        mpfr_exp(r8601, r8600, MPFR_RNDN);
        mpfr_exp(r8602, r8599, MPFR_RNDN);
        mpfr_add(r8603, r8601, r8602, MPFR_RNDN);
        mpfr_mul(r8604, r8597, r8603, MPFR_RNDN);
        return mpfr_get_d(r8604, MPFR_RNDN);
}

static mpfr_t r8605, r8606, r8607, r8608, r8609, r8610, r8611, r8612, r8613, r8614;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8605);
        mpfr_init(r8606);
        mpfr_init_set_str(r8607, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8608);
        mpfr_init(r8609);
        mpfr_init(r8610);
        mpfr_init(r8611);
        mpfr_init(r8612);
        mpfr_init(r8613);
        mpfr_init(r8614);
}

double f_fm(double re, double im) {
        mpfr_set_d(r8605, re, MPFR_RNDN);
        mpfr_sin(r8606, r8605, MPFR_RNDN);
        ;
        mpfr_mul(r8608, r8606, r8607, MPFR_RNDN);
        mpfr_set_d(r8609, im, MPFR_RNDN);
        mpfr_exp(r8610, r8609, MPFR_RNDN);
        mpfr_div(r8611, r8608, r8610, MPFR_RNDN);
        mpfr_mul(r8612, r8607, r8606, MPFR_RNDN);
        mpfr_mul(r8613, r8612, r8610, MPFR_RNDN);
        mpfr_add(r8614, r8611, r8613, MPFR_RNDN);
        return mpfr_get_d(r8614, MPFR_RNDN);
}

static mpfr_t r8615, r8616, r8617, r8618, r8619, r8620, r8621, r8622, r8623, r8624;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8615);
        mpfr_init(r8616);
        mpfr_init_set_str(r8617, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8618);
        mpfr_init(r8619);
        mpfr_init(r8620);
        mpfr_init(r8621);
        mpfr_init(r8622);
        mpfr_init(r8623);
        mpfr_init(r8624);
}

double f_dm(double re, double im) {
        mpfr_set_d(r8615, re, MPFR_RNDN);
        mpfr_sin(r8616, r8615, MPFR_RNDN);
        ;
        mpfr_mul(r8618, r8616, r8617, MPFR_RNDN);
        mpfr_set_d(r8619, im, MPFR_RNDN);
        mpfr_exp(r8620, r8619, MPFR_RNDN);
        mpfr_div(r8621, r8618, r8620, MPFR_RNDN);
        mpfr_mul(r8622, r8617, r8616, MPFR_RNDN);
        mpfr_mul(r8623, r8622, r8620, MPFR_RNDN);
        mpfr_add(r8624, r8621, r8623, MPFR_RNDN);
        return mpfr_get_d(r8624, MPFR_RNDN);
}

