#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 r25262 = 0.5;
        float r25263 = re;
        float r25264 = sin(r25263);
        float r25265 = r25262 * r25264;
        float r25266 = im;
        float r25267 = -r25266;
        float r25268 = exp(r25267);
        float r25269 = exp(r25266);
        float r25270 = r25268 - r25269;
        float r25271 = r25265 * r25270;
        return r25271;
}

double f_id(double re, double im) {
        double r25272 = 0.5;
        double r25273 = re;
        double r25274 = sin(r25273);
        double r25275 = r25272 * r25274;
        double r25276 = im;
        double r25277 = -r25276;
        double r25278 = exp(r25277);
        double r25279 = exp(r25276);
        double r25280 = r25278 - r25279;
        double r25281 = r25275 * r25280;
        return r25281;
}


double f_of(float re, float im) {
        float r25282 = im;
        float r25283 = 1/3;
        float r25284 = r25283 * r25282;
        float r25285 = 2;
        float r25286 = fma(r25284, r25282, r25285);
        float r25287 = 5;
        float r25288 = pow(r25282, r25287);
        float r25289 = 1/60;
        float r25290 = r25288 * r25289;
        float r25291 = fma(r25282, r25286, r25290);
        float r25292 = re;
        float r25293 = sin(r25292);
        float r25294 = 0.5;
        float r25295 = -r25294;
        float r25296 = r25293 * r25295;
        float r25297 = r25291 * r25296;
        return r25297;
}

double f_od(double re, double im) {
        double r25298 = im;
        double r25299 = 1/3;
        double r25300 = r25299 * r25298;
        double r25301 = 2;
        double r25302 = fma(r25300, r25298, r25301);
        double r25303 = 5;
        double r25304 = pow(r25298, r25303);
        double r25305 = 1/60;
        double r25306 = r25304 * r25305;
        double r25307 = fma(r25298, r25302, r25306);
        double r25308 = re;
        double r25309 = sin(r25308);
        double r25310 = 0.5;
        double r25311 = -r25310;
        double r25312 = r25309 * r25311;
        double r25313 = r25307 * r25312;
        return r25313;
}

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 r25314, r25315, r25316, r25317, r25318, r25319, r25320, r25321, r25322, r25323;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r25314, "0.5", 10, MPFR_RNDN);
        mpfr_init(r25315);
        mpfr_init(r25316);
        mpfr_init(r25317);
        mpfr_init(r25318);
        mpfr_init(r25319);
        mpfr_init(r25320);
        mpfr_init(r25321);
        mpfr_init(r25322);
        mpfr_init(r25323);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r25315, re, MPFR_RNDN);
        mpfr_sin(r25316, r25315, MPFR_RNDN);
        mpfr_mul(r25317, r25314, r25316, MPFR_RNDN);
        mpfr_set_d(r25318, im, MPFR_RNDN);
        mpfr_neg(r25319, r25318, MPFR_RNDN);
        mpfr_exp(r25320, r25319, MPFR_RNDN);
        mpfr_exp(r25321, r25318, MPFR_RNDN);
        mpfr_sub(r25322, r25320, r25321, MPFR_RNDN);
        mpfr_mul(r25323, r25317, r25322, MPFR_RNDN);
        return mpfr_get_d(r25323, MPFR_RNDN);
}

static mpfr_t r25324, r25325, r25326, r25327, r25328, r25329, r25330, r25331, r25332, r25333, r25334, r25335, r25336, r25337, r25338, r25339;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r25324);
        mpfr_init_set_str(r25325, "1/3", 10, MPFR_RNDN);
        mpfr_init(r25326);
        mpfr_init_set_str(r25327, "2", 10, MPFR_RNDN);
        mpfr_init(r25328);
        mpfr_init_set_str(r25329, "5", 10, MPFR_RNDN);
        mpfr_init(r25330);
        mpfr_init_set_str(r25331, "1/60", 10, MPFR_RNDN);
        mpfr_init(r25332);
        mpfr_init(r25333);
        mpfr_init(r25334);
        mpfr_init(r25335);
        mpfr_init_set_str(r25336, "0.5", 10, MPFR_RNDN);
        mpfr_init(r25337);
        mpfr_init(r25338);
        mpfr_init(r25339);
}

double f_fm(double re, double im) {
        mpfr_set_d(r25324, im, MPFR_RNDN);
        ;
        mpfr_mul(r25326, r25325, r25324, MPFR_RNDN);
        ;
        mpfr_fma(r25328, r25326, r25324, r25327, MPFR_RNDN);
        ;
        mpfr_pow(r25330, r25324, r25329, MPFR_RNDN);
        ;
        mpfr_mul(r25332, r25330, r25331, MPFR_RNDN);
        mpfr_fma(r25333, r25324, r25328, r25332, MPFR_RNDN);
        mpfr_set_d(r25334, re, MPFR_RNDN);
        mpfr_sin(r25335, r25334, MPFR_RNDN);
        ;
        mpfr_neg(r25337, r25336, MPFR_RNDN);
        mpfr_mul(r25338, r25335, r25337, MPFR_RNDN);
        mpfr_mul(r25339, r25333, r25338, MPFR_RNDN);
        return mpfr_get_d(r25339, MPFR_RNDN);
}

static mpfr_t r25340, r25341, r25342, r25343, r25344, r25345, r25346, r25347, r25348, r25349, r25350, r25351, r25352, r25353, r25354, r25355;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r25340);
        mpfr_init_set_str(r25341, "1/3", 10, MPFR_RNDN);
        mpfr_init(r25342);
        mpfr_init_set_str(r25343, "2", 10, MPFR_RNDN);
        mpfr_init(r25344);
        mpfr_init_set_str(r25345, "5", 10, MPFR_RNDN);
        mpfr_init(r25346);
        mpfr_init_set_str(r25347, "1/60", 10, MPFR_RNDN);
        mpfr_init(r25348);
        mpfr_init(r25349);
        mpfr_init(r25350);
        mpfr_init(r25351);
        mpfr_init_set_str(r25352, "0.5", 10, MPFR_RNDN);
        mpfr_init(r25353);
        mpfr_init(r25354);
        mpfr_init(r25355);
}

double f_dm(double re, double im) {
        mpfr_set_d(r25340, im, MPFR_RNDN);
        ;
        mpfr_mul(r25342, r25341, r25340, MPFR_RNDN);
        ;
        mpfr_fma(r25344, r25342, r25340, r25343, MPFR_RNDN);
        ;
        mpfr_pow(r25346, r25340, r25345, MPFR_RNDN);
        ;
        mpfr_mul(r25348, r25346, r25347, MPFR_RNDN);
        mpfr_fma(r25349, r25340, r25344, r25348, MPFR_RNDN);
        mpfr_set_d(r25350, re, MPFR_RNDN);
        mpfr_sin(r25351, r25350, MPFR_RNDN);
        ;
        mpfr_neg(r25353, r25352, MPFR_RNDN);
        mpfr_mul(r25354, r25351, r25353, MPFR_RNDN);
        mpfr_mul(r25355, r25349, r25354, MPFR_RNDN);
        return mpfr_get_d(r25355, MPFR_RNDN);
}

