#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 r18413 = 0.5f;
        float r18414 = re;
        float r18415 = sin(r18414);
        float r18416 = r18413 * r18415;
        float r18417 = im;
        float r18418 = -r18417;
        float r18419 = exp(r18418);
        float r18420 = exp(r18417);
        float r18421 = r18419 - r18420;
        float r18422 = r18416 * r18421;
        return r18422;
}

double f_id(double re, double im) {
        double r18423 = 0.5;
        double r18424 = re;
        double r18425 = sin(r18424);
        double r18426 = r18423 * r18425;
        double r18427 = im;
        double r18428 = -r18427;
        double r18429 = exp(r18428);
        double r18430 = exp(r18427);
        double r18431 = r18429 - r18430;
        double r18432 = r18426 * r18431;
        return r18432;
}


double f_of(float re, float im) {
        float r18433 = im;
        float r18434 = r18433 * (r18433 * r18433);
        float r18435 = exp(r18434);
        float r18436 = log(r18435);
        float r18437 = 0.3333333432674408f;
        float r18438 = 5.0f;
        float r18439 = pow(r18433, r18438);
        float r18440 = 0.01666666753590107f;
        float r18441 = 2.0f;
        float r18442 = r18433 * r18441;
        float r18443 = fma(r18439, r18440, r18442);
        float r18444 = fma(r18436, r18437, r18443);
        float r18445 = re;
        float r18446 = sin(r18445);
        float r18447 = 0.5f;
        float r18448 = -r18447;
        float r18449 = r18446 * r18448;
        float r18450 = r18444 * r18449;
        return r18450;
}

double f_od(double re, double im) {
        double r18451 = im;
        double r18452 = r18451 * (r18451 * r18451);
        double r18453 = exp(r18452);
        double r18454 = log(r18453);
        double r18455 = 0.3333333432674408;
        double r18456 = 5.0;
        double r18457 = pow(r18451, r18456);
        double r18458 = 0.01666666753590107;
        double r18459 = 2.0;
        double r18460 = r18451 * r18459;
        double r18461 = fma(r18457, r18458, r18460);
        double r18462 = fma(r18454, r18455, r18461);
        double r18463 = re;
        double r18464 = sin(r18463);
        double r18465 = 0.5;
        double r18466 = -r18465;
        double r18467 = r18464 * r18466;
        double r18468 = r18462 * r18467;
        return r18468;
}

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 r18469, r18470, r18471, r18472, r18473, r18474, r18475, r18476, r18477, r18478;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18469, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18470);
        mpfr_init(r18471);
        mpfr_init(r18472);
        mpfr_init(r18473);
        mpfr_init(r18474);
        mpfr_init(r18475);
        mpfr_init(r18476);
        mpfr_init(r18477);
        mpfr_init(r18478);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r18470, re, MPFR_RNDN);
        mpfr_sin(r18471, r18470, MPFR_RNDN);
        mpfr_mul(r18472, r18469, r18471, MPFR_RNDN);
        mpfr_set_d(r18473, im, MPFR_RNDN);
        mpfr_neg(r18474, r18473, MPFR_RNDN);
        mpfr_exp(r18475, r18474, MPFR_RNDN);
        mpfr_exp(r18476, r18473, MPFR_RNDN);
        mpfr_sub(r18477, r18475, r18476, MPFR_RNDN);
        mpfr_mul(r18478, r18472, r18477, MPFR_RNDN);
        return mpfr_get_d(r18478, MPFR_RNDN);
}

static mpfr_t r18479, r18480, r18481, r18482, r18483, r18484, r18485, r18486, r18487, r18488, r18489, r18490, r18491, r18492, r18493, r18494, r18495, r18496;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r18479);
        mpfr_init(r18480);
        mpfr_init(r18481);
        mpfr_init(r18482);
        mpfr_init_set_str(r18483, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r18484, "5", 10, MPFR_RNDN);
        mpfr_init(r18485);
        mpfr_init_set_str(r18486, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r18487, "2", 10, MPFR_RNDN);
        mpfr_init(r18488);
        mpfr_init(r18489);
        mpfr_init(r18490);
        mpfr_init(r18491);
        mpfr_init(r18492);
        mpfr_init_set_str(r18493, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18494);
        mpfr_init(r18495);
        mpfr_init(r18496);
}

double f_fm(double re, double im) {
        mpfr_set_d(r18479, im, MPFR_RNDN);
        mpfr_mul(r18480, r18479, r18479, MPFR_RNDN); mpfr_mul(r18480, r18480, r18479, MPFR_RNDN);
        mpfr_exp(r18481, r18480, MPFR_RNDN);
        mpfr_log(r18482, r18481, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r18485, r18479, r18484, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r18488, r18479, r18487, MPFR_RNDN);
        mpfr_fma(r18489, r18485, r18486, r18488, MPFR_RNDN);
        mpfr_fma(r18490, r18482, r18483, r18489, MPFR_RNDN);
        mpfr_set_d(r18491, re, MPFR_RNDN);
        mpfr_sin(r18492, r18491, MPFR_RNDN);
        ;
        mpfr_neg(r18494, r18493, MPFR_RNDN);
        mpfr_mul(r18495, r18492, r18494, MPFR_RNDN);
        mpfr_mul(r18496, r18490, r18495, MPFR_RNDN);
        return mpfr_get_d(r18496, MPFR_RNDN);
}

static mpfr_t r18497, r18498, r18499, r18500, r18501, r18502, r18503, r18504, r18505, r18506, r18507, r18508, r18509, r18510, r18511, r18512, r18513, r18514;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r18497);
        mpfr_init(r18498);
        mpfr_init(r18499);
        mpfr_init(r18500);
        mpfr_init_set_str(r18501, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r18502, "5", 10, MPFR_RNDN);
        mpfr_init(r18503);
        mpfr_init_set_str(r18504, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r18505, "2", 10, MPFR_RNDN);
        mpfr_init(r18506);
        mpfr_init(r18507);
        mpfr_init(r18508);
        mpfr_init(r18509);
        mpfr_init(r18510);
        mpfr_init_set_str(r18511, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18512);
        mpfr_init(r18513);
        mpfr_init(r18514);
}

double f_dm(double re, double im) {
        mpfr_set_d(r18497, im, MPFR_RNDN);
        mpfr_mul(r18498, r18497, r18497, MPFR_RNDN); mpfr_mul(r18498, r18498, r18497, MPFR_RNDN);
        mpfr_exp(r18499, r18498, MPFR_RNDN);
        mpfr_log(r18500, r18499, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r18503, r18497, r18502, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r18506, r18497, r18505, MPFR_RNDN);
        mpfr_fma(r18507, r18503, r18504, r18506, MPFR_RNDN);
        mpfr_fma(r18508, r18500, r18501, r18507, MPFR_RNDN);
        mpfr_set_d(r18509, re, MPFR_RNDN);
        mpfr_sin(r18510, r18509, MPFR_RNDN);
        ;
        mpfr_neg(r18512, r18511, MPFR_RNDN);
        mpfr_mul(r18513, r18510, r18512, MPFR_RNDN);
        mpfr_mul(r18514, r18508, r18513, MPFR_RNDN);
        return mpfr_get_d(r18514, MPFR_RNDN);
}

