#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 r56509543 = 0.5;
        float r56509544 = re;
        float r56509545 = sin(r56509544);
        float r56509546 = r56509543 * r56509545;
        float r56509547 = im;
        float r56509548 = -r56509547;
        float r56509549 = exp(r56509548);
        float r56509550 = exp(r56509547);
        float r56509551 = r56509549 - r56509550;
        float r56509552 = r56509546 * r56509551;
        return r56509552;
}

double f_id(double re, double im) {
        double r56509553 = 0.5;
        double r56509554 = re;
        double r56509555 = sin(r56509554);
        double r56509556 = r56509553 * r56509555;
        double r56509557 = im;
        double r56509558 = -r56509557;
        double r56509559 = exp(r56509558);
        double r56509560 = exp(r56509557);
        double r56509561 = r56509559 - r56509560;
        double r56509562 = r56509556 * r56509561;
        return r56509562;
}


double f_of(float re, float im) {
        float r56509563 = 0.5;
        float r56509564 = re;
        float r56509565 = sin(r56509564);
        float r56509566 = r56509563 * r56509565;
        float r56509567 = 1/60;
        float r56509568 = im;
        float r56509569 = 5;
        float r56509570 = pow(r56509568, r56509569);
        float r56509571 = r56509567 * r56509570;
        float r56509572 = 1/3;
        float r56509573 = 3;
        float r56509574 = pow(r56509568, r56509573);
        float r56509575 = r56509572 * r56509574;
        float r56509576 = 2;
        float r56509577 = r56509576 * r56509568;
        float r56509578 = r56509575 + r56509577;
        float r56509579 = r56509571 + r56509578;
        float r56509580 = -r56509579;
        float r56509581 = r56509566 * r56509580;
        return r56509581;
}

double f_od(double re, double im) {
        double r56509582 = 0.5;
        double r56509583 = re;
        double r56509584 = sin(r56509583);
        double r56509585 = r56509582 * r56509584;
        double r56509586 = 1/60;
        double r56509587 = im;
        double r56509588 = 5;
        double r56509589 = pow(r56509587, r56509588);
        double r56509590 = r56509586 * r56509589;
        double r56509591 = 1/3;
        double r56509592 = 3;
        double r56509593 = pow(r56509587, r56509592);
        double r56509594 = r56509591 * r56509593;
        double r56509595 = 2;
        double r56509596 = r56509595 * r56509587;
        double r56509597 = r56509594 + r56509596;
        double r56509598 = r56509590 + r56509597;
        double r56509599 = -r56509598;
        double r56509600 = r56509585 * r56509599;
        return r56509600;
}

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 r56509601, r56509602, r56509603, r56509604, r56509605, r56509606, r56509607, r56509608, r56509609, r56509610;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r56509601, "0.5", 10, MPFR_RNDN);
        mpfr_init(r56509602);
        mpfr_init(r56509603);
        mpfr_init(r56509604);
        mpfr_init(r56509605);
        mpfr_init(r56509606);
        mpfr_init(r56509607);
        mpfr_init(r56509608);
        mpfr_init(r56509609);
        mpfr_init(r56509610);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r56509602, re, MPFR_RNDN);
        mpfr_sin(r56509603, r56509602, MPFR_RNDN);
        mpfr_mul(r56509604, r56509601, r56509603, MPFR_RNDN);
        mpfr_set_d(r56509605, im, MPFR_RNDN);
        mpfr_neg(r56509606, r56509605, MPFR_RNDN);
        mpfr_exp(r56509607, r56509606, MPFR_RNDN);
        mpfr_exp(r56509608, r56509605, MPFR_RNDN);
        mpfr_sub(r56509609, r56509607, r56509608, MPFR_RNDN);
        mpfr_mul(r56509610, r56509604, r56509609, MPFR_RNDN);
        return mpfr_get_d(r56509610, MPFR_RNDN);
}

static mpfr_t r56509611, r56509612, r56509613, r56509614, r56509615, r56509616, r56509617, r56509618, r56509619, r56509620, r56509621, r56509622, r56509623, r56509624, r56509625, r56509626, r56509627, r56509628, r56509629;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r56509611, "0.5", 10, MPFR_RNDN);
        mpfr_init(r56509612);
        mpfr_init(r56509613);
        mpfr_init(r56509614);
        mpfr_init_set_str(r56509615, "1/60", 10, MPFR_RNDN);
        mpfr_init(r56509616);
        mpfr_init_set_str(r56509617, "5", 10, MPFR_RNDN);
        mpfr_init(r56509618);
        mpfr_init(r56509619);
        mpfr_init_set_str(r56509620, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r56509621, "3", 10, MPFR_RNDN);
        mpfr_init(r56509622);
        mpfr_init(r56509623);
        mpfr_init_set_str(r56509624, "2", 10, MPFR_RNDN);
        mpfr_init(r56509625);
        mpfr_init(r56509626);
        mpfr_init(r56509627);
        mpfr_init(r56509628);
        mpfr_init(r56509629);
}

double f_fm(double re, double im) {
        ;
        mpfr_set_d(r56509612, re, MPFR_RNDN);
        mpfr_sin(r56509613, r56509612, MPFR_RNDN);
        mpfr_mul(r56509614, r56509611, r56509613, MPFR_RNDN);
        ;
        mpfr_set_d(r56509616, im, MPFR_RNDN);
        ;
        mpfr_pow(r56509618, r56509616, r56509617, MPFR_RNDN);
        mpfr_mul(r56509619, r56509615, r56509618, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r56509622, r56509616, r56509621, MPFR_RNDN);
        mpfr_mul(r56509623, r56509620, r56509622, MPFR_RNDN);
        ;
        mpfr_mul(r56509625, r56509624, r56509616, MPFR_RNDN);
        mpfr_add(r56509626, r56509623, r56509625, MPFR_RNDN);
        mpfr_add(r56509627, r56509619, r56509626, MPFR_RNDN);
        mpfr_neg(r56509628, r56509627, MPFR_RNDN);
        mpfr_mul(r56509629, r56509614, r56509628, MPFR_RNDN);
        return mpfr_get_d(r56509629, MPFR_RNDN);
}

static mpfr_t r56509630, r56509631, r56509632, r56509633, r56509634, r56509635, r56509636, r56509637, r56509638, r56509639, r56509640, r56509641, r56509642, r56509643, r56509644, r56509645, r56509646, r56509647, r56509648;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r56509630, "0.5", 10, MPFR_RNDN);
        mpfr_init(r56509631);
        mpfr_init(r56509632);
        mpfr_init(r56509633);
        mpfr_init_set_str(r56509634, "1/60", 10, MPFR_RNDN);
        mpfr_init(r56509635);
        mpfr_init_set_str(r56509636, "5", 10, MPFR_RNDN);
        mpfr_init(r56509637);
        mpfr_init(r56509638);
        mpfr_init_set_str(r56509639, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r56509640, "3", 10, MPFR_RNDN);
        mpfr_init(r56509641);
        mpfr_init(r56509642);
        mpfr_init_set_str(r56509643, "2", 10, MPFR_RNDN);
        mpfr_init(r56509644);
        mpfr_init(r56509645);
        mpfr_init(r56509646);
        mpfr_init(r56509647);
        mpfr_init(r56509648);
}

double f_dm(double re, double im) {
        ;
        mpfr_set_d(r56509631, re, MPFR_RNDN);
        mpfr_sin(r56509632, r56509631, MPFR_RNDN);
        mpfr_mul(r56509633, r56509630, r56509632, MPFR_RNDN);
        ;
        mpfr_set_d(r56509635, im, MPFR_RNDN);
        ;
        mpfr_pow(r56509637, r56509635, r56509636, MPFR_RNDN);
        mpfr_mul(r56509638, r56509634, r56509637, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r56509641, r56509635, r56509640, MPFR_RNDN);
        mpfr_mul(r56509642, r56509639, r56509641, MPFR_RNDN);
        ;
        mpfr_mul(r56509644, r56509643, r56509635, MPFR_RNDN);
        mpfr_add(r56509645, r56509642, r56509644, MPFR_RNDN);
        mpfr_add(r56509646, r56509638, r56509645, MPFR_RNDN);
        mpfr_neg(r56509647, r56509646, MPFR_RNDN);
        mpfr_mul(r56509648, r56509633, r56509647, MPFR_RNDN);
        return mpfr_get_d(r56509648, MPFR_RNDN);
}

