#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 r8628 = 0.5;
        float r8629 = re;
        float r8630 = sin(r8629);
        float r8631 = r8628 * r8630;
        float r8632 = 0;
        float r8633 = im;
        float r8634 = r8632 - r8633;
        float r8635 = exp(r8634);
        float r8636 = exp(r8633);
        float r8637 = r8635 + r8636;
        float r8638 = r8631 * r8637;
        return r8638;
}

double f_id(double re, double im) {
        double r8639 = 0.5;
        double r8640 = re;
        double r8641 = sin(r8640);
        double r8642 = r8639 * r8641;
        double r8643 = 0;
        double r8644 = im;
        double r8645 = r8643 - r8644;
        double r8646 = exp(r8645);
        double r8647 = exp(r8644);
        double r8648 = r8646 + r8647;
        double r8649 = r8642 * r8648;
        return r8649;
}


double f_of(float re, float im) {
        float r8650 = re;
        float r8651 = sin(r8650);
        float r8652 = 0.5;
        float r8653 = r8651 * r8652;
        float r8654 = im;
        float r8655 = exp(r8654);
        float r8656 = r8653 / r8655;
        float r8657 = r8652 * r8651;
        float r8658 = r8657 * r8655;
        float r8659 = r8656 + r8658;
        return r8659;
}

double f_od(double re, double im) {
        double r8660 = re;
        double r8661 = sin(r8660);
        double r8662 = 0.5;
        double r8663 = r8661 * r8662;
        double r8664 = im;
        double r8665 = exp(r8664);
        double r8666 = r8663 / r8665;
        double r8667 = r8662 * r8661;
        double r8668 = r8667 * r8665;
        double r8669 = r8666 + r8668;
        return r8669;
}

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 r8670, r8671, r8672, r8673, r8674, r8675, r8676, r8677, r8678, r8679, r8680;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8670, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8671);
        mpfr_init(r8672);
        mpfr_init(r8673);
        mpfr_init_set_str(r8674, "0", 10, MPFR_RNDN);
        mpfr_init(r8675);
        mpfr_init(r8676);
        mpfr_init(r8677);
        mpfr_init(r8678);
        mpfr_init(r8679);
        mpfr_init(r8680);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r8671, re, MPFR_RNDN);
        mpfr_sin(r8672, r8671, MPFR_RNDN);
        mpfr_mul(r8673, r8670, r8672, MPFR_RNDN);
        ;
        mpfr_set_d(r8675, im, MPFR_RNDN);
        mpfr_sub(r8676, r8674, r8675, MPFR_RNDN);
        mpfr_exp(r8677, r8676, MPFR_RNDN);
        mpfr_exp(r8678, r8675, MPFR_RNDN);
        mpfr_add(r8679, r8677, r8678, MPFR_RNDN);
        mpfr_mul(r8680, r8673, r8679, MPFR_RNDN);
        return mpfr_get_d(r8680, MPFR_RNDN);
}

static mpfr_t r8681, r8682, r8683, r8684, r8685, r8686, r8687, r8688, r8689, r8690;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8681);
        mpfr_init(r8682);
        mpfr_init_set_str(r8683, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8684);
        mpfr_init(r8685);
        mpfr_init(r8686);
        mpfr_init(r8687);
        mpfr_init(r8688);
        mpfr_init(r8689);
        mpfr_init(r8690);
}

double f_fm(double re, double im) {
        mpfr_set_d(r8681, re, MPFR_RNDN);
        mpfr_sin(r8682, r8681, MPFR_RNDN);
        ;
        mpfr_mul(r8684, r8682, r8683, MPFR_RNDN);
        mpfr_set_d(r8685, im, MPFR_RNDN);
        mpfr_exp(r8686, r8685, MPFR_RNDN);
        mpfr_div(r8687, r8684, r8686, MPFR_RNDN);
        mpfr_mul(r8688, r8683, r8682, MPFR_RNDN);
        mpfr_mul(r8689, r8688, r8686, MPFR_RNDN);
        mpfr_add(r8690, r8687, r8689, MPFR_RNDN);
        return mpfr_get_d(r8690, MPFR_RNDN);
}

static mpfr_t r8691, r8692, r8693, r8694, r8695, r8696, r8697, r8698, r8699, r8700;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8691);
        mpfr_init(r8692);
        mpfr_init_set_str(r8693, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8694);
        mpfr_init(r8695);
        mpfr_init(r8696);
        mpfr_init(r8697);
        mpfr_init(r8698);
        mpfr_init(r8699);
        mpfr_init(r8700);
}

double f_dm(double re, double im) {
        mpfr_set_d(r8691, re, MPFR_RNDN);
        mpfr_sin(r8692, r8691, MPFR_RNDN);
        ;
        mpfr_mul(r8694, r8692, r8693, MPFR_RNDN);
        mpfr_set_d(r8695, im, MPFR_RNDN);
        mpfr_exp(r8696, r8695, MPFR_RNDN);
        mpfr_div(r8697, r8694, r8696, MPFR_RNDN);
        mpfr_mul(r8698, r8693, r8692, MPFR_RNDN);
        mpfr_mul(r8699, r8698, r8696, MPFR_RNDN);
        mpfr_add(r8700, r8697, r8699, MPFR_RNDN);
        return mpfr_get_d(r8700, MPFR_RNDN);
}

