#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "math.sin on complex, imaginary part";

double f_if(float re, float im) {
        float r11224 = 0.5f;
        float r11225 = re;
        float r11226 = cos(r11225);
        float r11227 = r11224 * r11226;
        float r11228 = 0.0f;
        float r11229 = im;
        float r11230 = r11228 - r11229;
        float r11231 = exp(r11230);
        float r11232 = exp(r11229);
        float r11233 = r11231 - r11232;
        float r11234 = r11227 * r11233;
        return r11234;
}

double f_id(double re, double im) {
        double r11235 = 0.5;
        double r11236 = re;
        double r11237 = cos(r11236);
        double r11238 = r11235 * r11237;
        double r11239 = 0.0;
        double r11240 = im;
        double r11241 = r11239 - r11240;
        double r11242 = exp(r11241);
        double r11243 = exp(r11240);
        double r11244 = r11242 - r11243;
        double r11245 = r11238 * r11244;
        return r11245;
}


double f_of(float re, float im) {
        float r11246 = im;
        float r11247 = 2.0f;
        float r11248 = r11246 * r11247;
        float r11249 = 5.0f;
        float r11250 = pow(r11246, r11249);
        float r11251 = 0.016666666666666666f;
        float r11252 = r11250 * r11251;
        float r11253 = r11248 + r11252;
        float r11254 = 3.0f;
        float r11255 = pow(r11246, r11254);
        float r11256 = 0.3333333333333333f;
        float r11257 = r11255 * r11256;
        float r11258 = r11253 + r11257;
        float r11259 = re;
        float r11260 = cos(r11259);
        float r11261 = 0.5f;
        float r11262 = -r11261;
        float r11263 = r11260 * r11262;
        float r11264 = r11258 * r11263;
        return r11264;
}

double f_od(double re, double im) {
        double r11265 = im;
        double r11266 = 2.0;
        double r11267 = r11265 * r11266;
        double r11268 = 5.0;
        double r11269 = pow(r11265, r11268);
        double r11270 = 0.016666666666666666;
        double r11271 = r11269 * r11270;
        double r11272 = r11267 + r11271;
        double r11273 = 3.0;
        double r11274 = pow(r11265, r11273);
        double r11275 = 0.3333333333333333;
        double r11276 = r11274 * r11275;
        double r11277 = r11272 + r11276;
        double r11278 = re;
        double r11279 = cos(r11278);
        double r11280 = 0.5;
        double r11281 = -r11280;
        double r11282 = r11279 * r11281;
        double r11283 = r11277 * r11282;
        return r11283;
}

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 r11284, r11285, r11286, r11287, r11288, r11289, r11290, r11291, r11292, r11293, r11294;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r11284, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11285);
        mpfr_init(r11286);
        mpfr_init(r11287);
        mpfr_init_set_str(r11288, "0", 10, MPFR_RNDN);
        mpfr_init(r11289);
        mpfr_init(r11290);
        mpfr_init(r11291);
        mpfr_init(r11292);
        mpfr_init(r11293);
        mpfr_init(r11294);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r11285, re, MPFR_RNDN);
        mpfr_cos(r11286, r11285, MPFR_RNDN);
        mpfr_mul(r11287, r11284, r11286, MPFR_RNDN);
        ;
        mpfr_set_d(r11289, im, MPFR_RNDN);
        mpfr_sub(r11290, r11288, r11289, MPFR_RNDN);
        mpfr_exp(r11291, r11290, MPFR_RNDN);
        mpfr_exp(r11292, r11289, MPFR_RNDN);
        mpfr_sub(r11293, r11291, r11292, MPFR_RNDN);
        mpfr_mul(r11294, r11287, r11293, MPFR_RNDN);
        return mpfr_get_d(r11294, MPFR_RNDN);
}

static mpfr_t r11295, r11296, r11297, r11298, r11299, r11300, r11301, r11302, r11303, r11304, r11305, r11306, r11307, r11308, r11309, r11310, r11311, r11312, r11313;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11295);
        mpfr_init_set_str(r11296, "2", 10, MPFR_RNDN);
        mpfr_init(r11297);
        mpfr_init_set_str(r11298, "5", 10, MPFR_RNDN);
        mpfr_init(r11299);
        mpfr_init_set_str(r11300, "1/60", 10, MPFR_RNDN);
        mpfr_init(r11301);
        mpfr_init(r11302);
        mpfr_init_set_str(r11303, "3", 10, MPFR_RNDN);
        mpfr_init(r11304);
        mpfr_init_set_str(r11305, "1/3", 10, MPFR_RNDN);
        mpfr_init(r11306);
        mpfr_init(r11307);
        mpfr_init(r11308);
        mpfr_init(r11309);
        mpfr_init_set_str(r11310, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11311);
        mpfr_init(r11312);
        mpfr_init(r11313);
}

double f_fm(double re, double im) {
        mpfr_set_d(r11295, im, MPFR_RNDN);
        ;
        mpfr_mul(r11297, r11295, r11296, MPFR_RNDN);
        ;
        mpfr_pow(r11299, r11295, r11298, MPFR_RNDN);
        ;
        mpfr_mul(r11301, r11299, r11300, MPFR_RNDN);
        mpfr_add(r11302, r11297, r11301, MPFR_RNDN);
        ;
        mpfr_pow(r11304, r11295, r11303, MPFR_RNDN);
        ;
        mpfr_mul(r11306, r11304, r11305, MPFR_RNDN);
        mpfr_add(r11307, r11302, r11306, MPFR_RNDN);
        mpfr_set_d(r11308, re, MPFR_RNDN);
        mpfr_cos(r11309, r11308, MPFR_RNDN);
        ;
        mpfr_neg(r11311, r11310, MPFR_RNDN);
        mpfr_mul(r11312, r11309, r11311, MPFR_RNDN);
        mpfr_mul(r11313, r11307, r11312, MPFR_RNDN);
        return mpfr_get_d(r11313, MPFR_RNDN);
}

static mpfr_t r11314, r11315, r11316, r11317, r11318, r11319, r11320, r11321, r11322, r11323, r11324, r11325, r11326, r11327, r11328, r11329, r11330, r11331, r11332;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11314);
        mpfr_init_set_str(r11315, "2", 10, MPFR_RNDN);
        mpfr_init(r11316);
        mpfr_init_set_str(r11317, "5", 10, MPFR_RNDN);
        mpfr_init(r11318);
        mpfr_init_set_str(r11319, "1/60", 10, MPFR_RNDN);
        mpfr_init(r11320);
        mpfr_init(r11321);
        mpfr_init_set_str(r11322, "3", 10, MPFR_RNDN);
        mpfr_init(r11323);
        mpfr_init_set_str(r11324, "1/3", 10, MPFR_RNDN);
        mpfr_init(r11325);
        mpfr_init(r11326);
        mpfr_init(r11327);
        mpfr_init(r11328);
        mpfr_init_set_str(r11329, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11330);
        mpfr_init(r11331);
        mpfr_init(r11332);
}

double f_dm(double re, double im) {
        mpfr_set_d(r11314, im, MPFR_RNDN);
        ;
        mpfr_mul(r11316, r11314, r11315, MPFR_RNDN);
        ;
        mpfr_pow(r11318, r11314, r11317, MPFR_RNDN);
        ;
        mpfr_mul(r11320, r11318, r11319, MPFR_RNDN);
        mpfr_add(r11321, r11316, r11320, MPFR_RNDN);
        ;
        mpfr_pow(r11323, r11314, r11322, MPFR_RNDN);
        ;
        mpfr_mul(r11325, r11323, r11324, MPFR_RNDN);
        mpfr_add(r11326, r11321, r11325, MPFR_RNDN);
        mpfr_set_d(r11327, re, MPFR_RNDN);
        mpfr_cos(r11328, r11327, MPFR_RNDN);
        ;
        mpfr_neg(r11330, r11329, MPFR_RNDN);
        mpfr_mul(r11331, r11328, r11330, MPFR_RNDN);
        mpfr_mul(r11332, r11326, r11331, MPFR_RNDN);
        return mpfr_get_d(r11332, MPFR_RNDN);
}

