#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 r11318 = 0.5f;
        float r11319 = re;
        float r11320 = cos(r11319);
        float r11321 = r11318 * r11320;
        float r11322 = 0.0f;
        float r11323 = im;
        float r11324 = r11322 - r11323;
        float r11325 = exp(r11324);
        float r11326 = exp(r11323);
        float r11327 = r11325 - r11326;
        float r11328 = r11321 * r11327;
        return r11328;
}

double f_id(double re, double im) {
        double r11329 = 0.5;
        double r11330 = re;
        double r11331 = cos(r11330);
        double r11332 = r11329 * r11331;
        double r11333 = 0.0;
        double r11334 = im;
        double r11335 = r11333 - r11334;
        double r11336 = exp(r11335);
        double r11337 = exp(r11334);
        double r11338 = r11336 - r11337;
        double r11339 = r11332 * r11338;
        return r11339;
}


double f_of(float re, float im) {
        float r11340 = im;
        float r11341 = r11340 * r11340;
        float r11342 = 0.3333333333333333f;
        float r11343 = 2.0f;
        float r11344 = fma(r11341, r11342, r11343);
        float r11345 = -r11340;
        float r11346 = 0.016666666666666666f;
        float r11347 = -r11346;
        float r11348 = 5.0f;
        float r11349 = pow(r11340, r11348);
        float r11350 = r11347 * r11349;
        float r11351 = fma(r11344, r11345, r11350);
        float r11352 = 0.5f;
        float r11353 = re;
        float r11354 = cos(r11353);
        float r11355 = r11352 * r11354;
        float r11356 = r11351 * r11355;
        return r11356;
}

double f_od(double re, double im) {
        double r11357 = im;
        double r11358 = r11357 * r11357;
        double r11359 = 0.3333333333333333;
        double r11360 = 2.0;
        double r11361 = fma(r11358, r11359, r11360);
        double r11362 = -r11357;
        double r11363 = 0.016666666666666666;
        double r11364 = -r11363;
        double r11365 = 5.0;
        double r11366 = pow(r11357, r11365);
        double r11367 = r11364 * r11366;
        double r11368 = fma(r11361, r11362, r11367);
        double r11369 = 0.5;
        double r11370 = re;
        double r11371 = cos(r11370);
        double r11372 = r11369 * r11371;
        double r11373 = r11368 * r11372;
        return r11373;
}

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 r11374, r11375, r11376, r11377, r11378, r11379, r11380, r11381, r11382, r11383, r11384;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r11374, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11375);
        mpfr_init(r11376);
        mpfr_init(r11377);
        mpfr_init_set_str(r11378, "0", 10, MPFR_RNDN);
        mpfr_init(r11379);
        mpfr_init(r11380);
        mpfr_init(r11381);
        mpfr_init(r11382);
        mpfr_init(r11383);
        mpfr_init(r11384);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r11375, re, MPFR_RNDN);
        mpfr_cos(r11376, r11375, MPFR_RNDN);
        mpfr_mul(r11377, r11374, r11376, MPFR_RNDN);
        ;
        mpfr_set_d(r11379, im, MPFR_RNDN);
        mpfr_sub(r11380, r11378, r11379, MPFR_RNDN);
        mpfr_exp(r11381, r11380, MPFR_RNDN);
        mpfr_exp(r11382, r11379, MPFR_RNDN);
        mpfr_sub(r11383, r11381, r11382, MPFR_RNDN);
        mpfr_mul(r11384, r11377, r11383, MPFR_RNDN);
        return mpfr_get_d(r11384, MPFR_RNDN);
}

static mpfr_t r11385, r11386, r11387, r11388, r11389, r11390, r11391, r11392, r11393, r11394, r11395, r11396, r11397, r11398, r11399, r11400, r11401;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11385);
        mpfr_init(r11386);
        mpfr_init_set_str(r11387, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r11388, "2", 10, MPFR_RNDN);
        mpfr_init(r11389);
        mpfr_init(r11390);
        mpfr_init_set_str(r11391, "1/60", 10, MPFR_RNDN);
        mpfr_init(r11392);
        mpfr_init_set_str(r11393, "5", 10, MPFR_RNDN);
        mpfr_init(r11394);
        mpfr_init(r11395);
        mpfr_init(r11396);
        mpfr_init_set_str(r11397, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11398);
        mpfr_init(r11399);
        mpfr_init(r11400);
        mpfr_init(r11401);
}

double f_fm(double re, double im) {
        mpfr_set_d(r11385, im, MPFR_RNDN);
        mpfr_mul(r11386, r11385, r11385, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r11389, r11386, r11387, r11388, MPFR_RNDN);
        mpfr_neg(r11390, r11385, MPFR_RNDN);
        ;
        mpfr_neg(r11392, r11391, MPFR_RNDN);
        ;
        mpfr_pow(r11394, r11385, r11393, MPFR_RNDN);
        mpfr_mul(r11395, r11392, r11394, MPFR_RNDN);
        mpfr_fma(r11396, r11389, r11390, r11395, MPFR_RNDN);
        ;
        mpfr_set_d(r11398, re, MPFR_RNDN);
        mpfr_cos(r11399, r11398, MPFR_RNDN);
        mpfr_mul(r11400, r11397, r11399, MPFR_RNDN);
        mpfr_mul(r11401, r11396, r11400, MPFR_RNDN);
        return mpfr_get_d(r11401, MPFR_RNDN);
}

static mpfr_t r11402, r11403, r11404, r11405, r11406, r11407, r11408, r11409, r11410, r11411, r11412, r11413, r11414, r11415, r11416, r11417, r11418;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11402);
        mpfr_init(r11403);
        mpfr_init_set_str(r11404, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r11405, "2", 10, MPFR_RNDN);
        mpfr_init(r11406);
        mpfr_init(r11407);
        mpfr_init_set_str(r11408, "1/60", 10, MPFR_RNDN);
        mpfr_init(r11409);
        mpfr_init_set_str(r11410, "5", 10, MPFR_RNDN);
        mpfr_init(r11411);
        mpfr_init(r11412);
        mpfr_init(r11413);
        mpfr_init_set_str(r11414, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11415);
        mpfr_init(r11416);
        mpfr_init(r11417);
        mpfr_init(r11418);
}

double f_dm(double re, double im) {
        mpfr_set_d(r11402, im, MPFR_RNDN);
        mpfr_mul(r11403, r11402, r11402, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r11406, r11403, r11404, r11405, MPFR_RNDN);
        mpfr_neg(r11407, r11402, MPFR_RNDN);
        ;
        mpfr_neg(r11409, r11408, MPFR_RNDN);
        ;
        mpfr_pow(r11411, r11402, r11410, MPFR_RNDN);
        mpfr_mul(r11412, r11409, r11411, MPFR_RNDN);
        mpfr_fma(r11413, r11406, r11407, r11412, MPFR_RNDN);
        ;
        mpfr_set_d(r11415, re, MPFR_RNDN);
        mpfr_cos(r11416, r11415, MPFR_RNDN);
        mpfr_mul(r11417, r11414, r11416, MPFR_RNDN);
        mpfr_mul(r11418, r11413, r11417, MPFR_RNDN);
        return mpfr_get_d(r11418, MPFR_RNDN);
}

