#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 r20315 = 0.5f;
        float r20316 = re;
        float r20317 = cos(r20316);
        float r20318 = r20315 * r20317;
        float r20319 = 0.0f;
        float r20320 = im;
        float r20321 = r20319 - r20320;
        float r20322 = exp(r20321);
        float r20323 = exp(r20320);
        float r20324 = r20322 - r20323;
        float r20325 = r20318 * r20324;
        return r20325;
}

double f_id(double re, double im) {
        double r20326 = 0.5;
        double r20327 = re;
        double r20328 = cos(r20327);
        double r20329 = r20326 * r20328;
        double r20330 = 0.0;
        double r20331 = im;
        double r20332 = r20330 - r20331;
        double r20333 = exp(r20332);
        double r20334 = exp(r20331);
        double r20335 = r20333 - r20334;
        double r20336 = r20329 * r20335;
        return r20336;
}


double f_of(float re, float im) {
        float r20337 = im;
        float r20338 = r20337 * (r20337 * r20337);
        float r20339 = 0.3333333333333333f;
        float r20340 = r20338 * r20339;
        float r20341 = 0.016666666666666666f;
        float r20342 = 5.0f;
        float r20343 = pow(r20337, r20342);
        float r20344 = r20341 * r20343;
        float r20345 = 2.0f;
        float r20346 = r20337 * r20345;
        float r20347 = r20344 + r20346;
        float r20348 = r20340 + r20347;
        float r20349 = 1.0f;
        float r20350 = r20348 / r20349;
        float r20351 = 0.5f;
        float r20352 = -r20351;
        float r20353 = re;
        float r20354 = cos(r20353);
        float r20355 = r20352 * r20354;
        float r20356 = r20350 * r20355;
        return r20356;
}

double f_od(double re, double im) {
        double r20357 = im;
        double r20358 = r20357 * (r20357 * r20357);
        double r20359 = 0.3333333333333333;
        double r20360 = r20358 * r20359;
        double r20361 = 0.016666666666666666;
        double r20362 = 5.0;
        double r20363 = pow(r20357, r20362);
        double r20364 = r20361 * r20363;
        double r20365 = 2.0;
        double r20366 = r20357 * r20365;
        double r20367 = r20364 + r20366;
        double r20368 = r20360 + r20367;
        double r20369 = 1.0;
        double r20370 = r20368 / r20369;
        double r20371 = 0.5;
        double r20372 = -r20371;
        double r20373 = re;
        double r20374 = cos(r20373);
        double r20375 = r20372 * r20374;
        double r20376 = r20370 * r20375;
        return r20376;
}

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 r20377, r20378, r20379, r20380, r20381, r20382, r20383, r20384, r20385, r20386, r20387;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r20377, "0.5", 10, MPFR_RNDN);
        mpfr_init(r20378);
        mpfr_init(r20379);
        mpfr_init(r20380);
        mpfr_init_set_str(r20381, "0", 10, MPFR_RNDN);
        mpfr_init(r20382);
        mpfr_init(r20383);
        mpfr_init(r20384);
        mpfr_init(r20385);
        mpfr_init(r20386);
        mpfr_init(r20387);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r20378, re, MPFR_RNDN);
        mpfr_cos(r20379, r20378, MPFR_RNDN);
        mpfr_mul(r20380, r20377, r20379, MPFR_RNDN);
        ;
        mpfr_set_d(r20382, im, MPFR_RNDN);
        mpfr_sub(r20383, r20381, r20382, MPFR_RNDN);
        mpfr_exp(r20384, r20383, MPFR_RNDN);
        mpfr_exp(r20385, r20382, MPFR_RNDN);
        mpfr_sub(r20386, r20384, r20385, MPFR_RNDN);
        mpfr_mul(r20387, r20380, r20386, MPFR_RNDN);
        return mpfr_get_d(r20387, MPFR_RNDN);
}

static mpfr_t r20388, r20389, r20390, r20391, r20392, r20393, r20394, r20395, r20396, r20397, r20398, r20399, r20400, r20401, r20402, r20403, r20404, r20405, r20406, r20407;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r20388);
        mpfr_init(r20389);
        mpfr_init_set_str(r20390, "1/3", 10, MPFR_RNDN);
        mpfr_init(r20391);
        mpfr_init_set_str(r20392, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r20393, "5", 10, MPFR_RNDN);
        mpfr_init(r20394);
        mpfr_init(r20395);
        mpfr_init_set_str(r20396, "2", 10, MPFR_RNDN);
        mpfr_init(r20397);
        mpfr_init(r20398);
        mpfr_init(r20399);
        mpfr_init_set_str(r20400, "1", 10, MPFR_RNDN);
        mpfr_init(r20401);
        mpfr_init_set_str(r20402, "0.5", 10, MPFR_RNDN);
        mpfr_init(r20403);
        mpfr_init(r20404);
        mpfr_init(r20405);
        mpfr_init(r20406);
        mpfr_init(r20407);
}

double f_fm(double re, double im) {
        mpfr_set_d(r20388, im, MPFR_RNDN);
        mpfr_mul(r20389, r20388, r20388, MPFR_RNDN); mpfr_mul(r20389, r20389, r20388, MPFR_RNDN);
        ;
        mpfr_mul(r20391, r20389, r20390, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r20394, r20388, r20393, MPFR_RNDN);
        mpfr_mul(r20395, r20392, r20394, MPFR_RNDN);
        ;
        mpfr_mul(r20397, r20388, r20396, MPFR_RNDN);
        mpfr_add(r20398, r20395, r20397, MPFR_RNDN);
        mpfr_add(r20399, r20391, r20398, MPFR_RNDN);
        ;
        mpfr_div(r20401, r20399, r20400, MPFR_RNDN);
        ;
        mpfr_neg(r20403, r20402, MPFR_RNDN);
        mpfr_set_d(r20404, re, MPFR_RNDN);
        mpfr_cos(r20405, r20404, MPFR_RNDN);
        mpfr_mul(r20406, r20403, r20405, MPFR_RNDN);
        mpfr_mul(r20407, r20401, r20406, MPFR_RNDN);
        return mpfr_get_d(r20407, MPFR_RNDN);
}

static mpfr_t r20408, r20409, r20410, r20411, r20412, r20413, r20414, r20415, r20416, r20417, r20418, r20419, r20420, r20421, r20422, r20423, r20424, r20425, r20426, r20427;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r20408);
        mpfr_init(r20409);
        mpfr_init_set_str(r20410, "1/3", 10, MPFR_RNDN);
        mpfr_init(r20411);
        mpfr_init_set_str(r20412, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r20413, "5", 10, MPFR_RNDN);
        mpfr_init(r20414);
        mpfr_init(r20415);
        mpfr_init_set_str(r20416, "2", 10, MPFR_RNDN);
        mpfr_init(r20417);
        mpfr_init(r20418);
        mpfr_init(r20419);
        mpfr_init_set_str(r20420, "1", 10, MPFR_RNDN);
        mpfr_init(r20421);
        mpfr_init_set_str(r20422, "0.5", 10, MPFR_RNDN);
        mpfr_init(r20423);
        mpfr_init(r20424);
        mpfr_init(r20425);
        mpfr_init(r20426);
        mpfr_init(r20427);
}

double f_dm(double re, double im) {
        mpfr_set_d(r20408, im, MPFR_RNDN);
        mpfr_mul(r20409, r20408, r20408, MPFR_RNDN); mpfr_mul(r20409, r20409, r20408, MPFR_RNDN);
        ;
        mpfr_mul(r20411, r20409, r20410, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r20414, r20408, r20413, MPFR_RNDN);
        mpfr_mul(r20415, r20412, r20414, MPFR_RNDN);
        ;
        mpfr_mul(r20417, r20408, r20416, MPFR_RNDN);
        mpfr_add(r20418, r20415, r20417, MPFR_RNDN);
        mpfr_add(r20419, r20411, r20418, MPFR_RNDN);
        ;
        mpfr_div(r20421, r20419, r20420, MPFR_RNDN);
        ;
        mpfr_neg(r20423, r20422, MPFR_RNDN);
        mpfr_set_d(r20424, re, MPFR_RNDN);
        mpfr_cos(r20425, r20424, MPFR_RNDN);
        mpfr_mul(r20426, r20423, r20425, MPFR_RNDN);
        mpfr_mul(r20427, r20421, r20426, MPFR_RNDN);
        return mpfr_get_d(r20427, MPFR_RNDN);
}

