#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 r28361 = 0.5;
        float r28362 = re;
        float r28363 = sin(r28362);
        float r28364 = r28361 * r28363;
        float r28365 = im;
        float r28366 = -r28365;
        float r28367 = exp(r28366);
        float r28368 = exp(r28365);
        float r28369 = r28367 - r28368;
        float r28370 = r28364 * r28369;
        return r28370;
}

double f_id(double re, double im) {
        double r28371 = 0.5;
        double r28372 = re;
        double r28373 = sin(r28372);
        double r28374 = r28371 * r28373;
        double r28375 = im;
        double r28376 = -r28375;
        double r28377 = exp(r28376);
        double r28378 = exp(r28375);
        double r28379 = r28377 - r28378;
        double r28380 = r28374 * r28379;
        return r28380;
}


double f_of(float re, float im) {
        float r28381 = re;
        float r28382 = sin(r28381);
        float r28383 = -r28382;
        float r28384 = im;
        float r28385 = r28384 * r28384;
        float r28386 = 0.16666666666666666;
        float r28387 = r28384 * r28386;
        float r28388 = r28385 * r28387;
        float r28389 = 0.008333333333333333;
        float r28390 = 5;
        float r28391 = pow(r28384, r28390);
        float r28392 = 1.0;
        float r28393 = r28384 * r28392;
        float r28394 = fma(r28389, r28391, r28393);
        float r28395 = r28383 * r28394;
        float r28396 = fma(r28383, r28388, r28395);
        return r28396;
}

double f_od(double re, double im) {
        double r28397 = re;
        double r28398 = sin(r28397);
        double r28399 = -r28398;
        double r28400 = im;
        double r28401 = r28400 * r28400;
        double r28402 = 0.16666666666666666;
        double r28403 = r28400 * r28402;
        double r28404 = r28401 * r28403;
        double r28405 = 0.008333333333333333;
        double r28406 = 5;
        double r28407 = pow(r28400, r28406);
        double r28408 = 1.0;
        double r28409 = r28400 * r28408;
        double r28410 = fma(r28405, r28407, r28409);
        double r28411 = r28399 * r28410;
        double r28412 = fma(r28399, r28404, r28411);
        return r28412;
}

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 r28413, r28414, r28415, r28416, r28417, r28418, r28419, r28420, r28421, r28422;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28413, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28414);
        mpfr_init(r28415);
        mpfr_init(r28416);
        mpfr_init(r28417);
        mpfr_init(r28418);
        mpfr_init(r28419);
        mpfr_init(r28420);
        mpfr_init(r28421);
        mpfr_init(r28422);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r28414, re, MPFR_RNDN);
        mpfr_sin(r28415, r28414, MPFR_RNDN);
        mpfr_mul(r28416, r28413, r28415, MPFR_RNDN);
        mpfr_set_d(r28417, im, MPFR_RNDN);
        mpfr_neg(r28418, r28417, MPFR_RNDN);
        mpfr_exp(r28419, r28418, MPFR_RNDN);
        mpfr_exp(r28420, r28417, MPFR_RNDN);
        mpfr_sub(r28421, r28419, r28420, MPFR_RNDN);
        mpfr_mul(r28422, r28416, r28421, MPFR_RNDN);
        return mpfr_get_d(r28422, MPFR_RNDN);
}

static mpfr_t r28423, r28424, r28425, r28426, r28427, r28428, r28429, r28430, r28431, r28432, r28433, r28434, r28435, r28436, r28437, r28438;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28423);
        mpfr_init(r28424);
        mpfr_init(r28425);
        mpfr_init(r28426);
        mpfr_init(r28427);
        mpfr_init_set_str(r28428, "0.16666666666666666", 10, MPFR_RNDN);
        mpfr_init(r28429);
        mpfr_init(r28430);
        mpfr_init_set_str(r28431, "0.008333333333333333", 10, MPFR_RNDN);
        mpfr_init_set_str(r28432, "5", 10, MPFR_RNDN);
        mpfr_init(r28433);
        mpfr_init_set_str(r28434, "1.0", 10, MPFR_RNDN);
        mpfr_init(r28435);
        mpfr_init(r28436);
        mpfr_init(r28437);
        mpfr_init(r28438);
}

double f_fm(double re, double im) {
        mpfr_set_d(r28423, re, MPFR_RNDN);
        mpfr_sin(r28424, r28423, MPFR_RNDN);
        mpfr_neg(r28425, r28424, MPFR_RNDN);
        mpfr_set_d(r28426, im, MPFR_RNDN);
        mpfr_mul(r28427, r28426, r28426, MPFR_RNDN);
        ;
        mpfr_mul(r28429, r28426, r28428, MPFR_RNDN);
        mpfr_mul(r28430, r28427, r28429, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28433, r28426, r28432, MPFR_RNDN);
        ;
        mpfr_mul(r28435, r28426, r28434, MPFR_RNDN);
        mpfr_fma(r28436, r28431, r28433, r28435, MPFR_RNDN);
        mpfr_mul(r28437, r28425, r28436, MPFR_RNDN);
        mpfr_fma(r28438, r28425, r28430, r28437, MPFR_RNDN);
        return mpfr_get_d(r28438, MPFR_RNDN);
}

static mpfr_t r28439, r28440, r28441, r28442, r28443, r28444, r28445, r28446, r28447, r28448, r28449, r28450, r28451, r28452, r28453, r28454;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28439);
        mpfr_init(r28440);
        mpfr_init(r28441);
        mpfr_init(r28442);
        mpfr_init(r28443);
        mpfr_init_set_str(r28444, "0.16666666666666666", 10, MPFR_RNDN);
        mpfr_init(r28445);
        mpfr_init(r28446);
        mpfr_init_set_str(r28447, "0.008333333333333333", 10, MPFR_RNDN);
        mpfr_init_set_str(r28448, "5", 10, MPFR_RNDN);
        mpfr_init(r28449);
        mpfr_init_set_str(r28450, "1.0", 10, MPFR_RNDN);
        mpfr_init(r28451);
        mpfr_init(r28452);
        mpfr_init(r28453);
        mpfr_init(r28454);
}

double f_dm(double re, double im) {
        mpfr_set_d(r28439, re, MPFR_RNDN);
        mpfr_sin(r28440, r28439, MPFR_RNDN);
        mpfr_neg(r28441, r28440, MPFR_RNDN);
        mpfr_set_d(r28442, im, MPFR_RNDN);
        mpfr_mul(r28443, r28442, r28442, MPFR_RNDN);
        ;
        mpfr_mul(r28445, r28442, r28444, MPFR_RNDN);
        mpfr_mul(r28446, r28443, r28445, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28449, r28442, r28448, MPFR_RNDN);
        ;
        mpfr_mul(r28451, r28442, r28450, MPFR_RNDN);
        mpfr_fma(r28452, r28447, r28449, r28451, MPFR_RNDN);
        mpfr_mul(r28453, r28441, r28452, MPFR_RNDN);
        mpfr_fma(r28454, r28441, r28446, r28453, MPFR_RNDN);
        return mpfr_get_d(r28454, MPFR_RNDN);
}

