#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 r18313 = 0.5f;
        float r18314 = re;
        float r18315 = sin(r18314);
        float r18316 = r18313 * r18315;
        float r18317 = im;
        float r18318 = -r18317;
        float r18319 = exp(r18318);
        float r18320 = exp(r18317);
        float r18321 = r18319 - r18320;
        float r18322 = r18316 * r18321;
        return r18322;
}

double f_id(double re, double im) {
        double r18323 = 0.5;
        double r18324 = re;
        double r18325 = sin(r18324);
        double r18326 = r18323 * r18325;
        double r18327 = im;
        double r18328 = -r18327;
        double r18329 = exp(r18328);
        double r18330 = exp(r18327);
        double r18331 = r18329 - r18330;
        double r18332 = r18326 * r18331;
        return r18332;
}


double f_of(float re, float im) {
        float r18333 = im;
        float r18334 = r18333 * (r18333 * r18333);
        float r18335 = 0.3333333432674408f;
        float r18336 = 5.0f;
        float r18337 = pow(r18333, r18336);
        float r18338 = 0.01666666753590107f;
        float r18339 = 2.0f;
        float r18340 = r18333 * r18339;
        float r18341 = fma(r18337, r18338, r18340);
        float r18342 = fma(r18334, r18335, r18341);
        float r18343 = re;
        float r18344 = sin(r18343);
        float r18345 = 0.5f;
        float r18346 = -r18345;
        float r18347 = r18344 * r18346;
        float r18348 = r18342 * r18347;
        return r18348;
}

double f_od(double re, double im) {
        double r18349 = im;
        double r18350 = r18349 * (r18349 * r18349);
        double r18351 = 0.3333333432674408;
        double r18352 = 5.0;
        double r18353 = pow(r18349, r18352);
        double r18354 = 0.01666666753590107;
        double r18355 = 2.0;
        double r18356 = r18349 * r18355;
        double r18357 = fma(r18353, r18354, r18356);
        double r18358 = fma(r18350, r18351, r18357);
        double r18359 = re;
        double r18360 = sin(r18359);
        double r18361 = 0.5;
        double r18362 = -r18361;
        double r18363 = r18360 * r18362;
        double r18364 = r18358 * r18363;
        return r18364;
}

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 r18365, r18366, r18367, r18368, r18369, r18370, r18371, r18372, r18373, r18374;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18365, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18366);
        mpfr_init(r18367);
        mpfr_init(r18368);
        mpfr_init(r18369);
        mpfr_init(r18370);
        mpfr_init(r18371);
        mpfr_init(r18372);
        mpfr_init(r18373);
        mpfr_init(r18374);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r18366, re, MPFR_RNDN);
        mpfr_sin(r18367, r18366, MPFR_RNDN);
        mpfr_mul(r18368, r18365, r18367, MPFR_RNDN);
        mpfr_set_d(r18369, im, MPFR_RNDN);
        mpfr_neg(r18370, r18369, MPFR_RNDN);
        mpfr_exp(r18371, r18370, MPFR_RNDN);
        mpfr_exp(r18372, r18369, MPFR_RNDN);
        mpfr_sub(r18373, r18371, r18372, MPFR_RNDN);
        mpfr_mul(r18374, r18368, r18373, MPFR_RNDN);
        return mpfr_get_d(r18374, MPFR_RNDN);
}

static mpfr_t r18375, r18376, r18377, r18378, r18379, r18380, r18381, r18382, r18383, r18384, r18385, r18386, r18387, r18388, r18389, r18390;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r18375);
        mpfr_init(r18376);
        mpfr_init_set_str(r18377, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r18378, "5", 10, MPFR_RNDN);
        mpfr_init(r18379);
        mpfr_init_set_str(r18380, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r18381, "2", 10, MPFR_RNDN);
        mpfr_init(r18382);
        mpfr_init(r18383);
        mpfr_init(r18384);
        mpfr_init(r18385);
        mpfr_init(r18386);
        mpfr_init_set_str(r18387, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18388);
        mpfr_init(r18389);
        mpfr_init(r18390);
}

double f_fm(double re, double im) {
        mpfr_set_d(r18375, im, MPFR_RNDN);
        mpfr_mul(r18376, r18375, r18375, MPFR_RNDN); mpfr_mul(r18376, r18376, r18375, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r18379, r18375, r18378, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r18382, r18375, r18381, MPFR_RNDN);
        mpfr_fma(r18383, r18379, r18380, r18382, MPFR_RNDN);
        mpfr_fma(r18384, r18376, r18377, r18383, MPFR_RNDN);
        mpfr_set_d(r18385, re, MPFR_RNDN);
        mpfr_sin(r18386, r18385, MPFR_RNDN);
        ;
        mpfr_neg(r18388, r18387, MPFR_RNDN);
        mpfr_mul(r18389, r18386, r18388, MPFR_RNDN);
        mpfr_mul(r18390, r18384, r18389, MPFR_RNDN);
        return mpfr_get_d(r18390, MPFR_RNDN);
}

static mpfr_t r18391, r18392, r18393, r18394, r18395, r18396, r18397, r18398, r18399, r18400, r18401, r18402, r18403, r18404, r18405, r18406;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r18391);
        mpfr_init(r18392);
        mpfr_init_set_str(r18393, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r18394, "5", 10, MPFR_RNDN);
        mpfr_init(r18395);
        mpfr_init_set_str(r18396, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r18397, "2", 10, MPFR_RNDN);
        mpfr_init(r18398);
        mpfr_init(r18399);
        mpfr_init(r18400);
        mpfr_init(r18401);
        mpfr_init(r18402);
        mpfr_init_set_str(r18403, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18404);
        mpfr_init(r18405);
        mpfr_init(r18406);
}

double f_dm(double re, double im) {
        mpfr_set_d(r18391, im, MPFR_RNDN);
        mpfr_mul(r18392, r18391, r18391, MPFR_RNDN); mpfr_mul(r18392, r18392, r18391, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r18395, r18391, r18394, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r18398, r18391, r18397, MPFR_RNDN);
        mpfr_fma(r18399, r18395, r18396, r18398, MPFR_RNDN);
        mpfr_fma(r18400, r18392, r18393, r18399, MPFR_RNDN);
        mpfr_set_d(r18401, re, MPFR_RNDN);
        mpfr_sin(r18402, r18401, MPFR_RNDN);
        ;
        mpfr_neg(r18404, r18403, MPFR_RNDN);
        mpfr_mul(r18405, r18402, r18404, MPFR_RNDN);
        mpfr_mul(r18406, r18400, r18405, MPFR_RNDN);
        return mpfr_get_d(r18406, MPFR_RNDN);
}

