#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 r28179 = 0.5;
        float r28180 = re;
        float r28181 = cos(r28180);
        float r28182 = r28179 * r28181;
        float r28183 = 0;
        float r28184 = im;
        float r28185 = r28183 - r28184;
        float r28186 = exp(r28185);
        float r28187 = exp(r28184);
        float r28188 = r28186 - r28187;
        float r28189 = r28182 * r28188;
        return r28189;
}

double f_id(double re, double im) {
        double r28190 = 0.5;
        double r28191 = re;
        double r28192 = cos(r28191);
        double r28193 = r28190 * r28192;
        double r28194 = 0;
        double r28195 = im;
        double r28196 = r28194 - r28195;
        double r28197 = exp(r28196);
        double r28198 = exp(r28195);
        double r28199 = r28197 - r28198;
        double r28200 = r28193 * r28199;
        return r28200;
}


double f_of(float re, float im) {
        float r28201 = im;
        float r28202 = -r28201;
        float r28203 = exp(r28202);
        float r28204 = exp(r28201);
        float r28205 = r28203 - r28204;
        float r28206 = 0.5;
        float r28207 = re;
        float r28208 = cos(r28207);
        float r28209 = r28206 * r28208;
        float r28210 = r28205 * r28209;
        float r28211 = -0.05534827214616331;
        bool r28212 = r28210 <= r28211;
        float r28213 = r28204 / r28206;
        float r28214 = r28208 / r28213;
        float r28215 = -r28206;
        float r28216 = r28208 * r28215;
        float r28217 = r28204 * r28216;
        float r28218 = r28214 + r28217;
        float r28219 = 5;
        float r28220 = pow(r28201, r28219);
        float r28221 = 1/60;
        float r28222 = r28220 * r28221;
        float r28223 = 1/3;
        float r28224 = 3;
        float r28225 = pow(r28201, r28224);
        float r28226 = r28223 * r28225;
        float r28227 = 2;
        float r28228 = r28227 * r28201;
        float r28229 = r28226 + r28228;
        float r28230 = r28222 + r28229;
        float r28231 = r28216 * r28230;
        float r28232 = r28212 ? r28218 : r28231;
        return r28232;
}

double f_od(double re, double im) {
        double r28233 = im;
        double r28234 = -r28233;
        double r28235 = exp(r28234);
        double r28236 = exp(r28233);
        double r28237 = r28235 - r28236;
        double r28238 = 0.5;
        double r28239 = re;
        double r28240 = cos(r28239);
        double r28241 = r28238 * r28240;
        double r28242 = r28237 * r28241;
        double r28243 = -0.05534827214616331;
        bool r28244 = r28242 <= r28243;
        double r28245 = r28236 / r28238;
        double r28246 = r28240 / r28245;
        double r28247 = -r28238;
        double r28248 = r28240 * r28247;
        double r28249 = r28236 * r28248;
        double r28250 = r28246 + r28249;
        double r28251 = 5;
        double r28252 = pow(r28233, r28251);
        double r28253 = 1/60;
        double r28254 = r28252 * r28253;
        double r28255 = 1/3;
        double r28256 = 3;
        double r28257 = pow(r28233, r28256);
        double r28258 = r28255 * r28257;
        double r28259 = 2;
        double r28260 = r28259 * r28233;
        double r28261 = r28258 + r28260;
        double r28262 = r28254 + r28261;
        double r28263 = r28248 * r28262;
        double r28264 = r28244 ? r28250 : r28263;
        return r28264;
}

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 r28265, r28266, r28267, r28268, r28269, r28270, r28271, r28272, r28273, r28274, r28275;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28265, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28266);
        mpfr_init(r28267);
        mpfr_init(r28268);
        mpfr_init_set_str(r28269, "0", 10, MPFR_RNDN);
        mpfr_init(r28270);
        mpfr_init(r28271);
        mpfr_init(r28272);
        mpfr_init(r28273);
        mpfr_init(r28274);
        mpfr_init(r28275);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r28266, re, MPFR_RNDN);
        mpfr_cos(r28267, r28266, MPFR_RNDN);
        mpfr_mul(r28268, r28265, r28267, MPFR_RNDN);
        ;
        mpfr_set_d(r28270, im, MPFR_RNDN);
        mpfr_sub(r28271, r28269, r28270, MPFR_RNDN);
        mpfr_exp(r28272, r28271, MPFR_RNDN);
        mpfr_exp(r28273, r28270, MPFR_RNDN);
        mpfr_sub(r28274, r28272, r28273, MPFR_RNDN);
        mpfr_mul(r28275, r28268, r28274, MPFR_RNDN);
        return mpfr_get_d(r28275, MPFR_RNDN);
}

static mpfr_t r28276, r28277, r28278, r28279, r28280, r28281, r28282, r28283, r28284, r28285, r28286, r28287, r28288, r28289, r28290, r28291, r28292, r28293, r28294, r28295, r28296, r28297, r28298, r28299, r28300, r28301, r28302, r28303, r28304, r28305, r28306, r28307;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28276);
        mpfr_init(r28277);
        mpfr_init(r28278);
        mpfr_init(r28279);
        mpfr_init(r28280);
        mpfr_init_set_str(r28281, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28282);
        mpfr_init(r28283);
        mpfr_init(r28284);
        mpfr_init(r28285);
        mpfr_init_set_str(r28286, "-0.05534827214616331", 10, MPFR_RNDN);
        mpfr_init(r28287);
        mpfr_init(r28288);
        mpfr_init(r28289);
        mpfr_init(r28290);
        mpfr_init(r28291);
        mpfr_init(r28292);
        mpfr_init(r28293);
        mpfr_init_set_str(r28294, "5", 10, MPFR_RNDN);
        mpfr_init(r28295);
        mpfr_init_set_str(r28296, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28297);
        mpfr_init_set_str(r28298, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r28299, "3", 10, MPFR_RNDN);
        mpfr_init(r28300);
        mpfr_init(r28301);
        mpfr_init_set_str(r28302, "2", 10, MPFR_RNDN);
        mpfr_init(r28303);
        mpfr_init(r28304);
        mpfr_init(r28305);
        mpfr_init(r28306);
        mpfr_init(r28307);
}

double f_fm(double re, double im) {
        mpfr_set_d(r28276, im, MPFR_RNDN);
        mpfr_neg(r28277, r28276, MPFR_RNDN);
        mpfr_exp(r28278, r28277, MPFR_RNDN);
        mpfr_exp(r28279, r28276, MPFR_RNDN);
        mpfr_sub(r28280, r28278, r28279, MPFR_RNDN);
        ;
        mpfr_set_d(r28282, re, MPFR_RNDN);
        mpfr_cos(r28283, r28282, MPFR_RNDN);
        mpfr_mul(r28284, r28281, r28283, MPFR_RNDN);
        mpfr_mul(r28285, r28280, r28284, MPFR_RNDN);
        ;
        mpfr_set_si(r28287, mpfr_cmp(r28285, r28286) <= 0, MPFR_RNDN);
        mpfr_div(r28288, r28279, r28281, MPFR_RNDN);
        mpfr_div(r28289, r28283, r28288, MPFR_RNDN);
        mpfr_neg(r28290, r28281, MPFR_RNDN);
        mpfr_mul(r28291, r28283, r28290, MPFR_RNDN);
        mpfr_mul(r28292, r28279, r28291, MPFR_RNDN);
        mpfr_add(r28293, r28289, r28292, MPFR_RNDN);
        ;
        mpfr_pow(r28295, r28276, r28294, MPFR_RNDN);
        ;
        mpfr_mul(r28297, r28295, r28296, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28300, r28276, r28299, MPFR_RNDN);
        mpfr_mul(r28301, r28298, r28300, MPFR_RNDN);
        ;
        mpfr_mul(r28303, r28302, r28276, MPFR_RNDN);
        mpfr_add(r28304, r28301, r28303, MPFR_RNDN);
        mpfr_add(r28305, r28297, r28304, MPFR_RNDN);
        mpfr_mul(r28306, r28291, r28305, MPFR_RNDN);
        if (mpfr_get_si(r28287, MPFR_RNDN)) { mpfr_set(r28307, r28293, MPFR_RNDN); } else { mpfr_set(r28307, r28306, MPFR_RNDN); };
        return mpfr_get_d(r28307, MPFR_RNDN);
}

static mpfr_t r28308, r28309, r28310, r28311, r28312, r28313, r28314, r28315, r28316, r28317, r28318, r28319, r28320, r28321, r28322, r28323, r28324, r28325, r28326, r28327, r28328, r28329, r28330, r28331, r28332, r28333, r28334, r28335, r28336, r28337, r28338, r28339;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28308);
        mpfr_init(r28309);
        mpfr_init(r28310);
        mpfr_init(r28311);
        mpfr_init(r28312);
        mpfr_init_set_str(r28313, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28314);
        mpfr_init(r28315);
        mpfr_init(r28316);
        mpfr_init(r28317);
        mpfr_init_set_str(r28318, "-0.05534827214616331", 10, MPFR_RNDN);
        mpfr_init(r28319);
        mpfr_init(r28320);
        mpfr_init(r28321);
        mpfr_init(r28322);
        mpfr_init(r28323);
        mpfr_init(r28324);
        mpfr_init(r28325);
        mpfr_init_set_str(r28326, "5", 10, MPFR_RNDN);
        mpfr_init(r28327);
        mpfr_init_set_str(r28328, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28329);
        mpfr_init_set_str(r28330, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r28331, "3", 10, MPFR_RNDN);
        mpfr_init(r28332);
        mpfr_init(r28333);
        mpfr_init_set_str(r28334, "2", 10, MPFR_RNDN);
        mpfr_init(r28335);
        mpfr_init(r28336);
        mpfr_init(r28337);
        mpfr_init(r28338);
        mpfr_init(r28339);
}

double f_dm(double re, double im) {
        mpfr_set_d(r28308, im, MPFR_RNDN);
        mpfr_neg(r28309, r28308, MPFR_RNDN);
        mpfr_exp(r28310, r28309, MPFR_RNDN);
        mpfr_exp(r28311, r28308, MPFR_RNDN);
        mpfr_sub(r28312, r28310, r28311, MPFR_RNDN);
        ;
        mpfr_set_d(r28314, re, MPFR_RNDN);
        mpfr_cos(r28315, r28314, MPFR_RNDN);
        mpfr_mul(r28316, r28313, r28315, MPFR_RNDN);
        mpfr_mul(r28317, r28312, r28316, MPFR_RNDN);
        ;
        mpfr_set_si(r28319, mpfr_cmp(r28317, r28318) <= 0, MPFR_RNDN);
        mpfr_div(r28320, r28311, r28313, MPFR_RNDN);
        mpfr_div(r28321, r28315, r28320, MPFR_RNDN);
        mpfr_neg(r28322, r28313, MPFR_RNDN);
        mpfr_mul(r28323, r28315, r28322, MPFR_RNDN);
        mpfr_mul(r28324, r28311, r28323, MPFR_RNDN);
        mpfr_add(r28325, r28321, r28324, MPFR_RNDN);
        ;
        mpfr_pow(r28327, r28308, r28326, MPFR_RNDN);
        ;
        mpfr_mul(r28329, r28327, r28328, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28332, r28308, r28331, MPFR_RNDN);
        mpfr_mul(r28333, r28330, r28332, MPFR_RNDN);
        ;
        mpfr_mul(r28335, r28334, r28308, MPFR_RNDN);
        mpfr_add(r28336, r28333, r28335, MPFR_RNDN);
        mpfr_add(r28337, r28329, r28336, MPFR_RNDN);
        mpfr_mul(r28338, r28323, r28337, MPFR_RNDN);
        if (mpfr_get_si(r28319, MPFR_RNDN)) { mpfr_set(r28339, r28325, MPFR_RNDN); } else { mpfr_set(r28339, r28338, MPFR_RNDN); };
        return mpfr_get_d(r28339, MPFR_RNDN);
}

