#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 r11429 = 0.5f;
        float r11430 = re;
        float r11431 = sin(r11430);
        float r11432 = r11429 * r11431;
        float r11433 = im;
        float r11434 = -r11433;
        float r11435 = exp(r11434);
        float r11436 = exp(r11433);
        float r11437 = r11435 - r11436;
        float r11438 = r11432 * r11437;
        return r11438;
}

double f_id(double re, double im) {
        double r11439 = 0.5;
        double r11440 = re;
        double r11441 = sin(r11440);
        double r11442 = r11439 * r11441;
        double r11443 = im;
        double r11444 = -r11443;
        double r11445 = exp(r11444);
        double r11446 = exp(r11443);
        double r11447 = r11445 - r11446;
        double r11448 = r11442 * r11447;
        return r11448;
}


double f_of(float re, float im) {
        float r11449 = im;
        float r11450 = r11449 * r11449;
        float r11451 = 0.3333333333333333f;
        float r11452 = 2.0f;
        float r11453 = fma(r11450, r11451, r11452);
        float r11454 = -r11449;
        float r11455 = 0.016666666666666666f;
        float r11456 = -r11455;
        float r11457 = 5.0f;
        float r11458 = pow(r11449, r11457);
        float r11459 = r11456 * r11458;
        float r11460 = fma(r11453, r11454, r11459);
        float r11461 = 0.5f;
        float r11462 = re;
        float r11463 = sin(r11462);
        float r11464 = r11461 * r11463;
        float r11465 = r11460 * r11464;
        return r11465;
}

double f_od(double re, double im) {
        double r11466 = im;
        double r11467 = r11466 * r11466;
        double r11468 = 0.3333333333333333;
        double r11469 = 2.0;
        double r11470 = fma(r11467, r11468, r11469);
        double r11471 = -r11466;
        double r11472 = 0.016666666666666666;
        double r11473 = -r11472;
        double r11474 = 5.0;
        double r11475 = pow(r11466, r11474);
        double r11476 = r11473 * r11475;
        double r11477 = fma(r11470, r11471, r11476);
        double r11478 = 0.5;
        double r11479 = re;
        double r11480 = sin(r11479);
        double r11481 = r11478 * r11480;
        double r11482 = r11477 * r11481;
        return r11482;
}

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 r11483, r11484, r11485, r11486, r11487, r11488, r11489, r11490, r11491, r11492;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r11483, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11484);
        mpfr_init(r11485);
        mpfr_init(r11486);
        mpfr_init(r11487);
        mpfr_init(r11488);
        mpfr_init(r11489);
        mpfr_init(r11490);
        mpfr_init(r11491);
        mpfr_init(r11492);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r11484, re, MPFR_RNDN);
        mpfr_sin(r11485, r11484, MPFR_RNDN);
        mpfr_mul(r11486, r11483, r11485, MPFR_RNDN);
        mpfr_set_d(r11487, im, MPFR_RNDN);
        mpfr_neg(r11488, r11487, MPFR_RNDN);
        mpfr_exp(r11489, r11488, MPFR_RNDN);
        mpfr_exp(r11490, r11487, MPFR_RNDN);
        mpfr_sub(r11491, r11489, r11490, MPFR_RNDN);
        mpfr_mul(r11492, r11486, r11491, MPFR_RNDN);
        return mpfr_get_d(r11492, MPFR_RNDN);
}

static mpfr_t r11493, r11494, r11495, r11496, r11497, r11498, r11499, r11500, r11501, r11502, r11503, r11504, r11505, r11506, r11507, r11508, r11509;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11493);
        mpfr_init(r11494);
        mpfr_init_set_str(r11495, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r11496, "2", 10, MPFR_RNDN);
        mpfr_init(r11497);
        mpfr_init(r11498);
        mpfr_init_set_str(r11499, "1/60", 10, MPFR_RNDN);
        mpfr_init(r11500);
        mpfr_init_set_str(r11501, "5", 10, MPFR_RNDN);
        mpfr_init(r11502);
        mpfr_init(r11503);
        mpfr_init(r11504);
        mpfr_init_set_str(r11505, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11506);
        mpfr_init(r11507);
        mpfr_init(r11508);
        mpfr_init(r11509);
}

double f_fm(double re, double im) {
        mpfr_set_d(r11493, im, MPFR_RNDN);
        mpfr_mul(r11494, r11493, r11493, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r11497, r11494, r11495, r11496, MPFR_RNDN);
        mpfr_neg(r11498, r11493, MPFR_RNDN);
        ;
        mpfr_neg(r11500, r11499, MPFR_RNDN);
        ;
        mpfr_pow(r11502, r11493, r11501, MPFR_RNDN);
        mpfr_mul(r11503, r11500, r11502, MPFR_RNDN);
        mpfr_fma(r11504, r11497, r11498, r11503, MPFR_RNDN);
        ;
        mpfr_set_d(r11506, re, MPFR_RNDN);
        mpfr_sin(r11507, r11506, MPFR_RNDN);
        mpfr_mul(r11508, r11505, r11507, MPFR_RNDN);
        mpfr_mul(r11509, r11504, r11508, MPFR_RNDN);
        return mpfr_get_d(r11509, MPFR_RNDN);
}

static mpfr_t r11510, r11511, r11512, r11513, r11514, r11515, r11516, r11517, r11518, r11519, r11520, r11521, r11522, r11523, r11524, r11525, r11526;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11510);
        mpfr_init(r11511);
        mpfr_init_set_str(r11512, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r11513, "2", 10, MPFR_RNDN);
        mpfr_init(r11514);
        mpfr_init(r11515);
        mpfr_init_set_str(r11516, "1/60", 10, MPFR_RNDN);
        mpfr_init(r11517);
        mpfr_init_set_str(r11518, "5", 10, MPFR_RNDN);
        mpfr_init(r11519);
        mpfr_init(r11520);
        mpfr_init(r11521);
        mpfr_init_set_str(r11522, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11523);
        mpfr_init(r11524);
        mpfr_init(r11525);
        mpfr_init(r11526);
}

double f_dm(double re, double im) {
        mpfr_set_d(r11510, im, MPFR_RNDN);
        mpfr_mul(r11511, r11510, r11510, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r11514, r11511, r11512, r11513, MPFR_RNDN);
        mpfr_neg(r11515, r11510, MPFR_RNDN);
        ;
        mpfr_neg(r11517, r11516, MPFR_RNDN);
        ;
        mpfr_pow(r11519, r11510, r11518, MPFR_RNDN);
        mpfr_mul(r11520, r11517, r11519, MPFR_RNDN);
        mpfr_fma(r11521, r11514, r11515, r11520, MPFR_RNDN);
        ;
        mpfr_set_d(r11523, re, MPFR_RNDN);
        mpfr_sin(r11524, r11523, MPFR_RNDN);
        mpfr_mul(r11525, r11522, r11524, MPFR_RNDN);
        mpfr_mul(r11526, r11521, r11525, MPFR_RNDN);
        return mpfr_get_d(r11526, MPFR_RNDN);
}

