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

char *name = "math.cos on complex, imaginary part";

double f_if(float re, float im) {
        float r28259 = 0.5;
        float r28260 = re;
        float r28261 = sin(r28260);
        float r28262 = r28259 * r28261;
        float r28263 = im;
        float r28264 = -r28263;
        float r28265 = exp(r28264);
        float r28266 = exp(r28263);
        float r28267 = r28265 - r28266;
        float r28268 = r28262 * r28267;
        return r28268;
}

double f_id(double re, double im) {
        double r28269 = 0.5;
        double r28270 = re;
        double r28271 = sin(r28270);
        double r28272 = r28269 * r28271;
        double r28273 = im;
        double r28274 = -r28273;
        double r28275 = exp(r28274);
        double r28276 = exp(r28273);
        double r28277 = r28275 - r28276;
        double r28278 = r28272 * r28277;
        return r28278;
}


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

double f_od(double re, double im) {
        double r28295 = im;
        double r28296 = 1/3;
        double r28297 = r28296 * r28295;
        double r28298 = 2;
        double r28299 = fma(r28297, r28295, r28298);
        double r28300 = 5;
        double r28301 = pow(r28295, r28300);
        double r28302 = 1/60;
        double r28303 = r28301 * r28302;
        double r28304 = fma(r28295, r28299, r28303);
        double r28305 = re;
        double r28306 = sin(r28305);
        double r28307 = 0.5;
        double r28308 = -r28307;
        double r28309 = r28306 * r28308;
        double r28310 = r28304 * r28309;
        return r28310;
}

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 r28311, r28312, r28313, r28314, r28315, r28316, r28317, r28318, r28319, r28320;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28311, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28312);
        mpfr_init(r28313);
        mpfr_init(r28314);
        mpfr_init(r28315);
        mpfr_init(r28316);
        mpfr_init(r28317);
        mpfr_init(r28318);
        mpfr_init(r28319);
        mpfr_init(r28320);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r28312, re, MPFR_RNDN);
        mpfr_sin(r28313, r28312, MPFR_RNDN);
        mpfr_mul(r28314, r28311, r28313, MPFR_RNDN);
        mpfr_set_d(r28315, im, MPFR_RNDN);
        mpfr_neg(r28316, r28315, MPFR_RNDN);
        mpfr_exp(r28317, r28316, MPFR_RNDN);
        mpfr_exp(r28318, r28315, MPFR_RNDN);
        mpfr_sub(r28319, r28317, r28318, MPFR_RNDN);
        mpfr_mul(r28320, r28314, r28319, MPFR_RNDN);
        return mpfr_get_d(r28320, MPFR_RNDN);
}

static mpfr_t r28321, r28322, r28323, r28324, r28325, r28326, r28327, r28328, r28329, r28330, r28331, r28332, r28333, r28334, r28335, r28336;

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

double f_fm(double re, double im) {
        mpfr_set_d(r28321, im, MPFR_RNDN);
        ;
        mpfr_mul(r28323, r28322, r28321, MPFR_RNDN);
        ;
        mpfr_fma(r28325, r28323, r28321, r28324, MPFR_RNDN);
        ;
        mpfr_pow(r28327, r28321, r28326, MPFR_RNDN);
        ;
        mpfr_mul(r28329, r28327, r28328, MPFR_RNDN);
        mpfr_fma(r28330, r28321, r28325, r28329, MPFR_RNDN);
        mpfr_set_d(r28331, re, MPFR_RNDN);
        mpfr_sin(r28332, r28331, MPFR_RNDN);
        ;
        mpfr_neg(r28334, r28333, MPFR_RNDN);
        mpfr_mul(r28335, r28332, r28334, MPFR_RNDN);
        mpfr_mul(r28336, r28330, r28335, MPFR_RNDN);
        return mpfr_get_d(r28336, MPFR_RNDN);
}

static mpfr_t r28337, r28338, r28339, r28340, r28341, r28342, r28343, r28344, r28345, r28346, r28347, r28348, r28349, r28350, r28351, r28352;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28337);
        mpfr_init_set_str(r28338, "1/3", 10, MPFR_RNDN);
        mpfr_init(r28339);
        mpfr_init_set_str(r28340, "2", 10, MPFR_RNDN);
        mpfr_init(r28341);
        mpfr_init_set_str(r28342, "5", 10, MPFR_RNDN);
        mpfr_init(r28343);
        mpfr_init_set_str(r28344, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28345);
        mpfr_init(r28346);
        mpfr_init(r28347);
        mpfr_init(r28348);
        mpfr_init_set_str(r28349, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28350);
        mpfr_init(r28351);
        mpfr_init(r28352);
}

double f_dm(double re, double im) {
        mpfr_set_d(r28337, im, MPFR_RNDN);
        ;
        mpfr_mul(r28339, r28338, r28337, MPFR_RNDN);
        ;
        mpfr_fma(r28341, r28339, r28337, r28340, MPFR_RNDN);
        ;
        mpfr_pow(r28343, r28337, r28342, MPFR_RNDN);
        ;
        mpfr_mul(r28345, r28343, r28344, MPFR_RNDN);
        mpfr_fma(r28346, r28337, r28341, r28345, MPFR_RNDN);
        mpfr_set_d(r28347, re, MPFR_RNDN);
        mpfr_sin(r28348, r28347, MPFR_RNDN);
        ;
        mpfr_neg(r28350, r28349, MPFR_RNDN);
        mpfr_mul(r28351, r28348, r28350, MPFR_RNDN);
        mpfr_mul(r28352, r28346, r28351, MPFR_RNDN);
        return mpfr_get_d(r28352, MPFR_RNDN);
}

