#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 r18222 = 0.5f;
        float r18223 = re;
        float r18224 = cos(r18223);
        float r18225 = r18222 * r18224;
        float r18226 = 0.0f;
        float r18227 = im;
        float r18228 = r18226 - r18227;
        float r18229 = exp(r18228);
        float r18230 = exp(r18227);
        float r18231 = r18229 - r18230;
        float r18232 = r18225 * r18231;
        return r18232;
}

double f_id(double re, double im) {
        double r18233 = 0.5;
        double r18234 = re;
        double r18235 = cos(r18234);
        double r18236 = r18233 * r18235;
        double r18237 = 0.0;
        double r18238 = im;
        double r18239 = r18237 - r18238;
        double r18240 = exp(r18239);
        double r18241 = exp(r18238);
        double r18242 = r18240 - r18241;
        double r18243 = r18236 * r18242;
        return r18243;
}


double f_of(float re, float im) {
        float r18244 = 0.01666666753590107f;
        float r18245 = im;
        float r18246 = 5.0f;
        float r18247 = pow(r18245, r18246);
        float r18248 = r18244 * r18247;
        float r18249 = 2.0f;
        float r18250 = r18249 * r18245;
        float r18251 = 0.3333333432674408f;
        float r18252 = 3.0f;
        float r18253 = pow(r18245, r18252);
        float r18254 = r18251 * r18253;
        float r18255 = r18250 + r18254;
        float r18256 = r18248 + r18255;
        float r18257 = -r18256;
        float r18258 = re;
        float r18259 = cos(r18258);
        float r18260 = 0.5f;
        float r18261 = r18259 * r18260;
        float r18262 = r18257 * r18261;
        return r18262;
}

double f_od(double re, double im) {
        double r18263 = 0.01666666753590107;
        double r18264 = im;
        double r18265 = 5.0;
        double r18266 = pow(r18264, r18265);
        double r18267 = r18263 * r18266;
        double r18268 = 2.0;
        double r18269 = r18268 * r18264;
        double r18270 = 0.3333333432674408;
        double r18271 = 3.0;
        double r18272 = pow(r18264, r18271);
        double r18273 = r18270 * r18272;
        double r18274 = r18269 + r18273;
        double r18275 = r18267 + r18274;
        double r18276 = -r18275;
        double r18277 = re;
        double r18278 = cos(r18277);
        double r18279 = 0.5;
        double r18280 = r18278 * r18279;
        double r18281 = r18276 * r18280;
        return r18281;
}

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 r18282, r18283, r18284, r18285, r18286, r18287, r18288, r18289, r18290, r18291, r18292;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18282, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18283);
        mpfr_init(r18284);
        mpfr_init(r18285);
        mpfr_init_set_str(r18286, "0", 10, MPFR_RNDN);
        mpfr_init(r18287);
        mpfr_init(r18288);
        mpfr_init(r18289);
        mpfr_init(r18290);
        mpfr_init(r18291);
        mpfr_init(r18292);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r18283, re, MPFR_RNDN);
        mpfr_cos(r18284, r18283, MPFR_RNDN);
        mpfr_mul(r18285, r18282, r18284, MPFR_RNDN);
        ;
        mpfr_set_d(r18287, im, MPFR_RNDN);
        mpfr_sub(r18288, r18286, r18287, MPFR_RNDN);
        mpfr_exp(r18289, r18288, MPFR_RNDN);
        mpfr_exp(r18290, r18287, MPFR_RNDN);
        mpfr_sub(r18291, r18289, r18290, MPFR_RNDN);
        mpfr_mul(r18292, r18285, r18291, MPFR_RNDN);
        return mpfr_get_d(r18292, MPFR_RNDN);
}

static mpfr_t r18293, r18294, r18295, r18296, r18297, r18298, r18299, r18300, r18301, r18302, r18303, r18304, r18305, r18306, r18307, r18308, r18309, r18310, r18311;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18293, "1/60", 10, MPFR_RNDN);
        mpfr_init(r18294);
        mpfr_init_set_str(r18295, "5", 10, MPFR_RNDN);
        mpfr_init(r18296);
        mpfr_init(r18297);
        mpfr_init_set_str(r18298, "2", 10, MPFR_RNDN);
        mpfr_init(r18299);
        mpfr_init_set_str(r18300, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r18301, "3", 10, MPFR_RNDN);
        mpfr_init(r18302);
        mpfr_init(r18303);
        mpfr_init(r18304);
        mpfr_init(r18305);
        mpfr_init(r18306);
        mpfr_init(r18307);
        mpfr_init(r18308);
        mpfr_init_set_str(r18309, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18310);
        mpfr_init(r18311);
}

double f_fm(double re, double im) {
        ;
        mpfr_set_d(r18294, im, MPFR_RNDN);
        ;
        mpfr_pow(r18296, r18294, r18295, MPFR_RNDN);
        mpfr_mul(r18297, r18293, r18296, MPFR_RNDN);
        ;
        mpfr_mul(r18299, r18298, r18294, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r18302, r18294, r18301, MPFR_RNDN);
        mpfr_mul(r18303, r18300, r18302, MPFR_RNDN);
        mpfr_add(r18304, r18299, r18303, MPFR_RNDN);
        mpfr_add(r18305, r18297, r18304, MPFR_RNDN);
        mpfr_neg(r18306, r18305, MPFR_RNDN);
        mpfr_set_d(r18307, re, MPFR_RNDN);
        mpfr_cos(r18308, r18307, MPFR_RNDN);
        ;
        mpfr_mul(r18310, r18308, r18309, MPFR_RNDN);
        mpfr_mul(r18311, r18306, r18310, MPFR_RNDN);
        return mpfr_get_d(r18311, MPFR_RNDN);
}

static mpfr_t r18312, r18313, r18314, r18315, r18316, r18317, r18318, r18319, r18320, r18321, r18322, r18323, r18324, r18325, r18326, r18327, r18328, r18329, r18330;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18312, "1/60", 10, MPFR_RNDN);
        mpfr_init(r18313);
        mpfr_init_set_str(r18314, "5", 10, MPFR_RNDN);
        mpfr_init(r18315);
        mpfr_init(r18316);
        mpfr_init_set_str(r18317, "2", 10, MPFR_RNDN);
        mpfr_init(r18318);
        mpfr_init_set_str(r18319, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r18320, "3", 10, MPFR_RNDN);
        mpfr_init(r18321);
        mpfr_init(r18322);
        mpfr_init(r18323);
        mpfr_init(r18324);
        mpfr_init(r18325);
        mpfr_init(r18326);
        mpfr_init(r18327);
        mpfr_init_set_str(r18328, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18329);
        mpfr_init(r18330);
}

double f_dm(double re, double im) {
        ;
        mpfr_set_d(r18313, im, MPFR_RNDN);
        ;
        mpfr_pow(r18315, r18313, r18314, MPFR_RNDN);
        mpfr_mul(r18316, r18312, r18315, MPFR_RNDN);
        ;
        mpfr_mul(r18318, r18317, r18313, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r18321, r18313, r18320, MPFR_RNDN);
        mpfr_mul(r18322, r18319, r18321, MPFR_RNDN);
        mpfr_add(r18323, r18318, r18322, MPFR_RNDN);
        mpfr_add(r18324, r18316, r18323, MPFR_RNDN);
        mpfr_neg(r18325, r18324, MPFR_RNDN);
        mpfr_set_d(r18326, re, MPFR_RNDN);
        mpfr_cos(r18327, r18326, MPFR_RNDN);
        ;
        mpfr_mul(r18329, r18327, r18328, MPFR_RNDN);
        mpfr_mul(r18330, r18325, r18329, MPFR_RNDN);
        return mpfr_get_d(r18330, MPFR_RNDN);
}

