#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 r18305 = 0.5f;
        float r18306 = re;
        float r18307 = sin(r18306);
        float r18308 = r18305 * r18307;
        float r18309 = im;
        float r18310 = -r18309;
        float r18311 = exp(r18310);
        float r18312 = exp(r18309);
        float r18313 = r18311 - r18312;
        float r18314 = r18308 * r18313;
        return r18314;
}

double f_id(double re, double im) {
        double r18315 = 0.5;
        double r18316 = re;
        double r18317 = sin(r18316);
        double r18318 = r18315 * r18317;
        double r18319 = im;
        double r18320 = -r18319;
        double r18321 = exp(r18320);
        double r18322 = exp(r18319);
        double r18323 = r18321 - r18322;
        double r18324 = r18318 * r18323;
        return r18324;
}


double f_of(float re, float im) {
        float r18325 = im;
        float r18326 = r18325 * (r18325 * r18325);
        float r18327 = 0.3333333432674408f;
        float r18328 = 5.0f;
        float r18329 = pow(r18325, r18328);
        float r18330 = 0.01666666753590107f;
        float r18331 = 2.0f;
        float r18332 = r18325 * r18331;
        float r18333 = fma(r18329, r18330, r18332);
        float r18334 = fma(r18326, r18327, r18333);
        float r18335 = re;
        float r18336 = sin(r18335);
        float r18337 = 0.5f;
        float r18338 = -r18337;
        float r18339 = r18336 * r18338;
        float r18340 = r18334 * r18339;
        return r18340;
}

double f_od(double re, double im) {
        double r18341 = im;
        double r18342 = r18341 * (r18341 * r18341);
        double r18343 = 0.3333333432674408;
        double r18344 = 5.0;
        double r18345 = pow(r18341, r18344);
        double r18346 = 0.01666666753590107;
        double r18347 = 2.0;
        double r18348 = r18341 * r18347;
        double r18349 = fma(r18345, r18346, r18348);
        double r18350 = fma(r18342, r18343, r18349);
        double r18351 = re;
        double r18352 = sin(r18351);
        double r18353 = 0.5;
        double r18354 = -r18353;
        double r18355 = r18352 * r18354;
        double r18356 = r18350 * r18355;
        return r18356;
}

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 r18357, r18358, r18359, r18360, r18361, r18362, r18363, r18364, r18365, r18366;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18357, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18358);
        mpfr_init(r18359);
        mpfr_init(r18360);
        mpfr_init(r18361);
        mpfr_init(r18362);
        mpfr_init(r18363);
        mpfr_init(r18364);
        mpfr_init(r18365);
        mpfr_init(r18366);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r18358, re, MPFR_RNDN);
        mpfr_sin(r18359, r18358, MPFR_RNDN);
        mpfr_mul(r18360, r18357, r18359, MPFR_RNDN);
        mpfr_set_d(r18361, im, MPFR_RNDN);
        mpfr_neg(r18362, r18361, MPFR_RNDN);
        mpfr_exp(r18363, r18362, MPFR_RNDN);
        mpfr_exp(r18364, r18361, MPFR_RNDN);
        mpfr_sub(r18365, r18363, r18364, MPFR_RNDN);
        mpfr_mul(r18366, r18360, r18365, MPFR_RNDN);
        return mpfr_get_d(r18366, MPFR_RNDN);
}

static mpfr_t r18367, r18368, r18369, r18370, r18371, r18372, r18373, r18374, r18375, r18376, r18377, r18378, r18379, r18380, r18381, r18382;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r18367);
        mpfr_init(r18368);
        mpfr_init_set_str(r18369, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r18370, "5", 10, MPFR_RNDN);
        mpfr_init(r18371);
        mpfr_init_set_str(r18372, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r18373, "2", 10, MPFR_RNDN);
        mpfr_init(r18374);
        mpfr_init(r18375);
        mpfr_init(r18376);
        mpfr_init(r18377);
        mpfr_init(r18378);
        mpfr_init_set_str(r18379, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18380);
        mpfr_init(r18381);
        mpfr_init(r18382);
}

double f_fm(double re, double im) {
        mpfr_set_d(r18367, im, MPFR_RNDN);
        mpfr_mul(r18368, r18367, r18367, MPFR_RNDN); mpfr_mul(r18368, r18368, r18367, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r18371, r18367, r18370, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r18374, r18367, r18373, MPFR_RNDN);
        mpfr_fma(r18375, r18371, r18372, r18374, MPFR_RNDN);
        mpfr_fma(r18376, r18368, r18369, r18375, MPFR_RNDN);
        mpfr_set_d(r18377, re, MPFR_RNDN);
        mpfr_sin(r18378, r18377, MPFR_RNDN);
        ;
        mpfr_neg(r18380, r18379, MPFR_RNDN);
        mpfr_mul(r18381, r18378, r18380, MPFR_RNDN);
        mpfr_mul(r18382, r18376, r18381, MPFR_RNDN);
        return mpfr_get_d(r18382, MPFR_RNDN);
}

static mpfr_t r18383, r18384, r18385, r18386, r18387, r18388, r18389, r18390, r18391, r18392, r18393, r18394, r18395, r18396, r18397, r18398;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r18383);
        mpfr_init(r18384);
        mpfr_init_set_str(r18385, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r18386, "5", 10, MPFR_RNDN);
        mpfr_init(r18387);
        mpfr_init_set_str(r18388, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r18389, "2", 10, MPFR_RNDN);
        mpfr_init(r18390);
        mpfr_init(r18391);
        mpfr_init(r18392);
        mpfr_init(r18393);
        mpfr_init(r18394);
        mpfr_init_set_str(r18395, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18396);
        mpfr_init(r18397);
        mpfr_init(r18398);
}

double f_dm(double re, double im) {
        mpfr_set_d(r18383, im, MPFR_RNDN);
        mpfr_mul(r18384, r18383, r18383, MPFR_RNDN); mpfr_mul(r18384, r18384, r18383, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r18387, r18383, r18386, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r18390, r18383, r18389, MPFR_RNDN);
        mpfr_fma(r18391, r18387, r18388, r18390, MPFR_RNDN);
        mpfr_fma(r18392, r18384, r18385, r18391, MPFR_RNDN);
        mpfr_set_d(r18393, re, MPFR_RNDN);
        mpfr_sin(r18394, r18393, MPFR_RNDN);
        ;
        mpfr_neg(r18396, r18395, MPFR_RNDN);
        mpfr_mul(r18397, r18394, r18396, MPFR_RNDN);
        mpfr_mul(r18398, r18392, r18397, MPFR_RNDN);
        return mpfr_get_d(r18398, MPFR_RNDN);
}

