#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 r8245 = 0.5f;
        float r8246 = re;
        float r8247 = sin(r8246);
        float r8248 = r8245 * r8247;
        float r8249 = 0.0f;
        float r8250 = im;
        float r8251 = r8249 - r8250;
        float r8252 = exp(r8251);
        float r8253 = exp(r8250);
        float r8254 = r8252 + r8253;
        float r8255 = r8248 * r8254;
        return r8255;
}

double f_id(double re, double im) {
        double r8256 = 0.5;
        double r8257 = re;
        double r8258 = sin(r8257);
        double r8259 = r8256 * r8258;
        double r8260 = 0.0;
        double r8261 = im;
        double r8262 = r8260 - r8261;
        double r8263 = exp(r8262);
        double r8264 = exp(r8261);
        double r8265 = r8263 + r8264;
        double r8266 = r8259 * r8265;
        return r8266;
}


double f_of(float re, float im) {
        float r8267 = 0.5f;
        float r8268 = re;
        float r8269 = sin(r8268);
        float r8270 = r8267 * r8269;
        float r8271 = im;
        float r8272 = -r8271;
        float r8273 = exp(r8272);
        float r8274 = exp(r8271);
        float r8275 = r8273 + r8274;
        float r8276 = r8270 * r8275;
        return r8276;
}

double f_od(double re, double im) {
        double r8277 = 0.5;
        double r8278 = re;
        double r8279 = sin(r8278);
        double r8280 = r8277 * r8279;
        double r8281 = im;
        double r8282 = -r8281;
        double r8283 = exp(r8282);
        double r8284 = exp(r8281);
        double r8285 = r8283 + r8284;
        double r8286 = r8280 * r8285;
        return r8286;
}

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 r8287, r8288, r8289, r8290, r8291, r8292, r8293, r8294, r8295, r8296, r8297;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8287, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8288);
        mpfr_init(r8289);
        mpfr_init(r8290);
        mpfr_init_set_str(r8291, "0", 10, MPFR_RNDN);
        mpfr_init(r8292);
        mpfr_init(r8293);
        mpfr_init(r8294);
        mpfr_init(r8295);
        mpfr_init(r8296);
        mpfr_init(r8297);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r8288, re, MPFR_RNDN);
        mpfr_sin(r8289, r8288, MPFR_RNDN);
        mpfr_mul(r8290, r8287, r8289, MPFR_RNDN);
        ;
        mpfr_set_d(r8292, im, MPFR_RNDN);
        mpfr_sub(r8293, r8291, r8292, MPFR_RNDN);
        mpfr_exp(r8294, r8293, MPFR_RNDN);
        mpfr_exp(r8295, r8292, MPFR_RNDN);
        mpfr_add(r8296, r8294, r8295, MPFR_RNDN);
        mpfr_mul(r8297, r8290, r8296, MPFR_RNDN);
        return mpfr_get_d(r8297, MPFR_RNDN);
}

static mpfr_t r8298, r8299, r8300, r8301, r8302, r8303, r8304, r8305, r8306, r8307;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8298, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8299);
        mpfr_init(r8300);
        mpfr_init(r8301);
        mpfr_init(r8302);
        mpfr_init(r8303);
        mpfr_init(r8304);
        mpfr_init(r8305);
        mpfr_init(r8306);
        mpfr_init(r8307);
}

double f_fm(double re, double im) {
        ;
        mpfr_set_d(r8299, re, MPFR_RNDN);
        mpfr_sin(r8300, r8299, MPFR_RNDN);
        mpfr_mul(r8301, r8298, r8300, MPFR_RNDN);
        mpfr_set_d(r8302, im, MPFR_RNDN);
        mpfr_neg(r8303, r8302, MPFR_RNDN);
        mpfr_exp(r8304, r8303, MPFR_RNDN);
        mpfr_exp(r8305, r8302, MPFR_RNDN);
        mpfr_add(r8306, r8304, r8305, MPFR_RNDN);
        mpfr_mul(r8307, r8301, r8306, MPFR_RNDN);
        return mpfr_get_d(r8307, MPFR_RNDN);
}

static mpfr_t r8308, r8309, r8310, r8311, r8312, r8313, r8314, r8315, r8316, r8317;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8308, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8309);
        mpfr_init(r8310);
        mpfr_init(r8311);
        mpfr_init(r8312);
        mpfr_init(r8313);
        mpfr_init(r8314);
        mpfr_init(r8315);
        mpfr_init(r8316);
        mpfr_init(r8317);
}

double f_dm(double re, double im) {
        ;
        mpfr_set_d(r8309, re, MPFR_RNDN);
        mpfr_sin(r8310, r8309, MPFR_RNDN);
        mpfr_mul(r8311, r8308, r8310, MPFR_RNDN);
        mpfr_set_d(r8312, im, MPFR_RNDN);
        mpfr_neg(r8313, r8312, MPFR_RNDN);
        mpfr_exp(r8314, r8313, MPFR_RNDN);
        mpfr_exp(r8315, r8312, MPFR_RNDN);
        mpfr_add(r8316, r8314, r8315, MPFR_RNDN);
        mpfr_mul(r8317, r8311, r8316, MPFR_RNDN);
        return mpfr_get_d(r8317, MPFR_RNDN);
}

