#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 r28243 = 0.5;
        float r28244 = re;
        float r28245 = cos(r28244);
        float r28246 = r28243 * r28245;
        float r28247 = 0;
        float r28248 = im;
        float r28249 = r28247 - r28248;
        float r28250 = exp(r28249);
        float r28251 = exp(r28248);
        float r28252 = r28250 - r28251;
        float r28253 = r28246 * r28252;
        return r28253;
}

double f_id(double re, double im) {
        double r28254 = 0.5;
        double r28255 = re;
        double r28256 = cos(r28255);
        double r28257 = r28254 * r28256;
        double r28258 = 0;
        double r28259 = im;
        double r28260 = r28258 - r28259;
        double r28261 = exp(r28260);
        double r28262 = exp(r28259);
        double r28263 = r28261 - r28262;
        double r28264 = r28257 * r28263;
        return r28264;
}


double f_of(float re, float im) {
        float r28265 = im;
        float r28266 = 1/3;
        float r28267 = r28266 * r28265;
        float r28268 = 2;
        float r28269 = fma(r28267, r28265, r28268);
        float r28270 = 5;
        float r28271 = pow(r28265, r28270);
        float r28272 = 1/60;
        float r28273 = r28271 * r28272;
        float r28274 = fma(r28265, r28269, r28273);
        float r28275 = re;
        float r28276 = cos(r28275);
        float r28277 = 0.5;
        float r28278 = -r28277;
        float r28279 = r28276 * r28278;
        float r28280 = r28274 * r28279;
        return r28280;
}

double f_od(double re, double im) {
        double r28281 = im;
        double r28282 = 1/3;
        double r28283 = r28282 * r28281;
        double r28284 = 2;
        double r28285 = fma(r28283, r28281, r28284);
        double r28286 = 5;
        double r28287 = pow(r28281, r28286);
        double r28288 = 1/60;
        double r28289 = r28287 * r28288;
        double r28290 = fma(r28281, r28285, r28289);
        double r28291 = re;
        double r28292 = cos(r28291);
        double r28293 = 0.5;
        double r28294 = -r28293;
        double r28295 = r28292 * r28294;
        double r28296 = r28290 * r28295;
        return r28296;
}

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 r28297, r28298, r28299, r28300, r28301, r28302, r28303, r28304, r28305, r28306, r28307;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28297, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28298);
        mpfr_init(r28299);
        mpfr_init(r28300);
        mpfr_init_set_str(r28301, "0", 10, MPFR_RNDN);
        mpfr_init(r28302);
        mpfr_init(r28303);
        mpfr_init(r28304);
        mpfr_init(r28305);
        mpfr_init(r28306);
        mpfr_init(r28307);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r28298, re, MPFR_RNDN);
        mpfr_cos(r28299, r28298, MPFR_RNDN);
        mpfr_mul(r28300, r28297, r28299, MPFR_RNDN);
        ;
        mpfr_set_d(r28302, im, MPFR_RNDN);
        mpfr_sub(r28303, r28301, r28302, MPFR_RNDN);
        mpfr_exp(r28304, r28303, MPFR_RNDN);
        mpfr_exp(r28305, r28302, MPFR_RNDN);
        mpfr_sub(r28306, r28304, r28305, MPFR_RNDN);
        mpfr_mul(r28307, r28300, r28306, MPFR_RNDN);
        return mpfr_get_d(r28307, MPFR_RNDN);
}

static mpfr_t r28308, r28309, r28310, r28311, r28312, r28313, r28314, r28315, r28316, r28317, r28318, r28319, r28320, r28321, r28322, r28323;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28308);
        mpfr_init_set_str(r28309, "1/3", 10, MPFR_RNDN);
        mpfr_init(r28310);
        mpfr_init_set_str(r28311, "2", 10, MPFR_RNDN);
        mpfr_init(r28312);
        mpfr_init_set_str(r28313, "5", 10, MPFR_RNDN);
        mpfr_init(r28314);
        mpfr_init_set_str(r28315, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28316);
        mpfr_init(r28317);
        mpfr_init(r28318);
        mpfr_init(r28319);
        mpfr_init_set_str(r28320, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28321);
        mpfr_init(r28322);
        mpfr_init(r28323);
}

double f_fm(double re, double im) {
        mpfr_set_d(r28308, im, MPFR_RNDN);
        ;
        mpfr_mul(r28310, r28309, r28308, MPFR_RNDN);
        ;
        mpfr_fma(r28312, r28310, r28308, r28311, MPFR_RNDN);
        ;
        mpfr_pow(r28314, r28308, r28313, MPFR_RNDN);
        ;
        mpfr_mul(r28316, r28314, r28315, MPFR_RNDN);
        mpfr_fma(r28317, r28308, r28312, r28316, MPFR_RNDN);
        mpfr_set_d(r28318, re, MPFR_RNDN);
        mpfr_cos(r28319, r28318, MPFR_RNDN);
        ;
        mpfr_neg(r28321, r28320, MPFR_RNDN);
        mpfr_mul(r28322, r28319, r28321, MPFR_RNDN);
        mpfr_mul(r28323, r28317, r28322, MPFR_RNDN);
        return mpfr_get_d(r28323, MPFR_RNDN);
}

static mpfr_t r28324, r28325, r28326, r28327, r28328, r28329, r28330, r28331, r28332, r28333, r28334, r28335, r28336, r28337, r28338, r28339;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28324);
        mpfr_init_set_str(r28325, "1/3", 10, MPFR_RNDN);
        mpfr_init(r28326);
        mpfr_init_set_str(r28327, "2", 10, MPFR_RNDN);
        mpfr_init(r28328);
        mpfr_init_set_str(r28329, "5", 10, MPFR_RNDN);
        mpfr_init(r28330);
        mpfr_init_set_str(r28331, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28332);
        mpfr_init(r28333);
        mpfr_init(r28334);
        mpfr_init(r28335);
        mpfr_init_set_str(r28336, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28337);
        mpfr_init(r28338);
        mpfr_init(r28339);
}

double f_dm(double re, double im) {
        mpfr_set_d(r28324, im, MPFR_RNDN);
        ;
        mpfr_mul(r28326, r28325, r28324, MPFR_RNDN);
        ;
        mpfr_fma(r28328, r28326, r28324, r28327, MPFR_RNDN);
        ;
        mpfr_pow(r28330, r28324, r28329, MPFR_RNDN);
        ;
        mpfr_mul(r28332, r28330, r28331, MPFR_RNDN);
        mpfr_fma(r28333, r28324, r28328, r28332, MPFR_RNDN);
        mpfr_set_d(r28334, re, MPFR_RNDN);
        mpfr_cos(r28335, r28334, MPFR_RNDN);
        ;
        mpfr_neg(r28337, r28336, MPFR_RNDN);
        mpfr_mul(r28338, r28335, r28337, MPFR_RNDN);
        mpfr_mul(r28339, r28333, r28338, MPFR_RNDN);
        return mpfr_get_d(r28339, MPFR_RNDN);
}

