#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 r12222 = 0.5;
        float r12223 = re;
        float r12224 = sin(r12223);
        float r12225 = r12222 * r12224;
        float r12226 = im;
        float r12227 = -r12226;
        float r12228 = exp(r12227);
        float r12229 = exp(r12226);
        float r12230 = r12228 - r12229;
        float r12231 = r12225 * r12230;
        return r12231;
}

double f_id(double re, double im) {
        double r12232 = 0.5;
        double r12233 = re;
        double r12234 = sin(r12233);
        double r12235 = r12232 * r12234;
        double r12236 = im;
        double r12237 = -r12236;
        double r12238 = exp(r12237);
        double r12239 = exp(r12236);
        double r12240 = r12238 - r12239;
        double r12241 = r12235 * r12240;
        return r12241;
}


double f_of(float re, float im) {
        float r12242 = re;
        float r12243 = sin(r12242);
        float r12244 = im;
        float r12245 = -r12244;
        float r12246 = r12243 * r12245;
        float r12247 = 0.16666666666666666;
        float r12248 = r12244 * r12244;
        float r12249 = 1.0;
        float r12250 = fma(r12247, r12248, r12249);
        float r12251 = r12246 * r12250;
        return r12251;
}

double f_od(double re, double im) {
        double r12252 = re;
        double r12253 = sin(r12252);
        double r12254 = im;
        double r12255 = -r12254;
        double r12256 = r12253 * r12255;
        double r12257 = 0.16666666666666666;
        double r12258 = r12254 * r12254;
        double r12259 = 1.0;
        double r12260 = fma(r12257, r12258, r12259);
        double r12261 = r12256 * r12260;
        return r12261;
}

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 r12262, r12263, r12264, r12265, r12266, r12267, r12268, r12269, r12270, r12271;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r12262, "0.5", 10, MPFR_RNDN);
        mpfr_init(r12263);
        mpfr_init(r12264);
        mpfr_init(r12265);
        mpfr_init(r12266);
        mpfr_init(r12267);
        mpfr_init(r12268);
        mpfr_init(r12269);
        mpfr_init(r12270);
        mpfr_init(r12271);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r12263, re, MPFR_RNDN);
        mpfr_sin(r12264, r12263, MPFR_RNDN);
        mpfr_mul(r12265, r12262, r12264, MPFR_RNDN);
        mpfr_set_d(r12266, im, MPFR_RNDN);
        mpfr_neg(r12267, r12266, MPFR_RNDN);
        mpfr_exp(r12268, r12267, MPFR_RNDN);
        mpfr_exp(r12269, r12266, MPFR_RNDN);
        mpfr_sub(r12270, r12268, r12269, MPFR_RNDN);
        mpfr_mul(r12271, r12265, r12270, MPFR_RNDN);
        return mpfr_get_d(r12271, MPFR_RNDN);
}

static mpfr_t r12272, r12273, r12274, r12275, r12276, r12277, r12278, r12279, r12280, r12281;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12272);
        mpfr_init(r12273);
        mpfr_init(r12274);
        mpfr_init(r12275);
        mpfr_init(r12276);
        mpfr_init_set_str(r12277, "0.16666666666666666", 10, MPFR_RNDN);
        mpfr_init(r12278);
        mpfr_init_set_str(r12279, "1.0", 10, MPFR_RNDN);
        mpfr_init(r12280);
        mpfr_init(r12281);
}

double f_fm(double re, double im) {
        mpfr_set_d(r12272, re, MPFR_RNDN);
        mpfr_sin(r12273, r12272, MPFR_RNDN);
        mpfr_set_d(r12274, im, MPFR_RNDN);
        mpfr_neg(r12275, r12274, MPFR_RNDN);
        mpfr_mul(r12276, r12273, r12275, MPFR_RNDN);
        ;
        mpfr_mul(r12278, r12274, r12274, MPFR_RNDN);
        ;
        mpfr_fma(r12280, r12277, r12278, r12279, MPFR_RNDN);
        mpfr_mul(r12281, r12276, r12280, MPFR_RNDN);
        return mpfr_get_d(r12281, MPFR_RNDN);
}

static mpfr_t r12282, r12283, r12284, r12285, r12286, r12287, r12288, r12289, r12290, r12291;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12282);
        mpfr_init(r12283);
        mpfr_init(r12284);
        mpfr_init(r12285);
        mpfr_init(r12286);
        mpfr_init_set_str(r12287, "0.16666666666666666", 10, MPFR_RNDN);
        mpfr_init(r12288);
        mpfr_init_set_str(r12289, "1.0", 10, MPFR_RNDN);
        mpfr_init(r12290);
        mpfr_init(r12291);
}

double f_dm(double re, double im) {
        mpfr_set_d(r12282, re, MPFR_RNDN);
        mpfr_sin(r12283, r12282, MPFR_RNDN);
        mpfr_set_d(r12284, im, MPFR_RNDN);
        mpfr_neg(r12285, r12284, MPFR_RNDN);
        mpfr_mul(r12286, r12283, r12285, MPFR_RNDN);
        ;
        mpfr_mul(r12288, r12284, r12284, MPFR_RNDN);
        ;
        mpfr_fma(r12290, r12287, r12288, r12289, MPFR_RNDN);
        mpfr_mul(r12291, r12286, r12290, MPFR_RNDN);
        return mpfr_get_d(r12291, MPFR_RNDN);
}

