#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 r11347 = 0.5f;
        float r11348 = re;
        float r11349 = cos(r11348);
        float r11350 = r11347 * r11349;
        float r11351 = 0.0f;
        float r11352 = im;
        float r11353 = r11351 - r11352;
        float r11354 = exp(r11353);
        float r11355 = exp(r11352);
        float r11356 = r11354 - r11355;
        float r11357 = r11350 * r11356;
        return r11357;
}

double f_id(double re, double im) {
        double r11358 = 0.5;
        double r11359 = re;
        double r11360 = cos(r11359);
        double r11361 = r11358 * r11360;
        double r11362 = 0.0;
        double r11363 = im;
        double r11364 = r11362 - r11363;
        double r11365 = exp(r11364);
        double r11366 = exp(r11363);
        double r11367 = r11365 - r11366;
        double r11368 = r11361 * r11367;
        return r11368;
}


double f_of(float re, float im) {
        float r11369 = im;
        float r11370 = r11369 * r11369;
        float r11371 = 0.3333333333333333f;
        float r11372 = 2.0f;
        float r11373 = fma(r11370, r11371, r11372);
        float r11374 = -r11369;
        float r11375 = 0.016666666666666666f;
        float r11376 = -r11375;
        float r11377 = 5.0f;
        float r11378 = pow(r11369, r11377);
        float r11379 = r11376 * r11378;
        float r11380 = fma(r11373, r11374, r11379);
        float r11381 = 0.5f;
        float r11382 = re;
        float r11383 = cos(r11382);
        float r11384 = r11381 * r11383;
        float r11385 = r11380 * r11384;
        return r11385;
}

double f_od(double re, double im) {
        double r11386 = im;
        double r11387 = r11386 * r11386;
        double r11388 = 0.3333333333333333;
        double r11389 = 2.0;
        double r11390 = fma(r11387, r11388, r11389);
        double r11391 = -r11386;
        double r11392 = 0.016666666666666666;
        double r11393 = -r11392;
        double r11394 = 5.0;
        double r11395 = pow(r11386, r11394);
        double r11396 = r11393 * r11395;
        double r11397 = fma(r11390, r11391, r11396);
        double r11398 = 0.5;
        double r11399 = re;
        double r11400 = cos(r11399);
        double r11401 = r11398 * r11400;
        double r11402 = r11397 * r11401;
        return r11402;
}

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 r11403, r11404, r11405, r11406, r11407, r11408, r11409, r11410, r11411, r11412, r11413;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r11403, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11404);
        mpfr_init(r11405);
        mpfr_init(r11406);
        mpfr_init_set_str(r11407, "0", 10, MPFR_RNDN);
        mpfr_init(r11408);
        mpfr_init(r11409);
        mpfr_init(r11410);
        mpfr_init(r11411);
        mpfr_init(r11412);
        mpfr_init(r11413);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r11404, re, MPFR_RNDN);
        mpfr_cos(r11405, r11404, MPFR_RNDN);
        mpfr_mul(r11406, r11403, r11405, MPFR_RNDN);
        ;
        mpfr_set_d(r11408, im, MPFR_RNDN);
        mpfr_sub(r11409, r11407, r11408, MPFR_RNDN);
        mpfr_exp(r11410, r11409, MPFR_RNDN);
        mpfr_exp(r11411, r11408, MPFR_RNDN);
        mpfr_sub(r11412, r11410, r11411, MPFR_RNDN);
        mpfr_mul(r11413, r11406, r11412, MPFR_RNDN);
        return mpfr_get_d(r11413, MPFR_RNDN);
}

static mpfr_t r11414, r11415, r11416, r11417, r11418, r11419, r11420, r11421, r11422, r11423, r11424, r11425, r11426, r11427, r11428, r11429, r11430;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11414);
        mpfr_init(r11415);
        mpfr_init_set_str(r11416, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r11417, "2", 10, MPFR_RNDN);
        mpfr_init(r11418);
        mpfr_init(r11419);
        mpfr_init_set_str(r11420, "1/60", 10, MPFR_RNDN);
        mpfr_init(r11421);
        mpfr_init_set_str(r11422, "5", 10, MPFR_RNDN);
        mpfr_init(r11423);
        mpfr_init(r11424);
        mpfr_init(r11425);
        mpfr_init_set_str(r11426, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11427);
        mpfr_init(r11428);
        mpfr_init(r11429);
        mpfr_init(r11430);
}

double f_fm(double re, double im) {
        mpfr_set_d(r11414, im, MPFR_RNDN);
        mpfr_mul(r11415, r11414, r11414, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r11418, r11415, r11416, r11417, MPFR_RNDN);
        mpfr_neg(r11419, r11414, MPFR_RNDN);
        ;
        mpfr_neg(r11421, r11420, MPFR_RNDN);
        ;
        mpfr_pow(r11423, r11414, r11422, MPFR_RNDN);
        mpfr_mul(r11424, r11421, r11423, MPFR_RNDN);
        mpfr_fma(r11425, r11418, r11419, r11424, MPFR_RNDN);
        ;
        mpfr_set_d(r11427, re, MPFR_RNDN);
        mpfr_cos(r11428, r11427, MPFR_RNDN);
        mpfr_mul(r11429, r11426, r11428, MPFR_RNDN);
        mpfr_mul(r11430, r11425, r11429, MPFR_RNDN);
        return mpfr_get_d(r11430, MPFR_RNDN);
}

static mpfr_t r11431, r11432, r11433, r11434, r11435, r11436, r11437, r11438, r11439, r11440, r11441, r11442, r11443, r11444, r11445, r11446, r11447;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11431);
        mpfr_init(r11432);
        mpfr_init_set_str(r11433, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r11434, "2", 10, MPFR_RNDN);
        mpfr_init(r11435);
        mpfr_init(r11436);
        mpfr_init_set_str(r11437, "1/60", 10, MPFR_RNDN);
        mpfr_init(r11438);
        mpfr_init_set_str(r11439, "5", 10, MPFR_RNDN);
        mpfr_init(r11440);
        mpfr_init(r11441);
        mpfr_init(r11442);
        mpfr_init_set_str(r11443, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11444);
        mpfr_init(r11445);
        mpfr_init(r11446);
        mpfr_init(r11447);
}

double f_dm(double re, double im) {
        mpfr_set_d(r11431, im, MPFR_RNDN);
        mpfr_mul(r11432, r11431, r11431, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r11435, r11432, r11433, r11434, MPFR_RNDN);
        mpfr_neg(r11436, r11431, MPFR_RNDN);
        ;
        mpfr_neg(r11438, r11437, MPFR_RNDN);
        ;
        mpfr_pow(r11440, r11431, r11439, MPFR_RNDN);
        mpfr_mul(r11441, r11438, r11440, MPFR_RNDN);
        mpfr_fma(r11442, r11435, r11436, r11441, MPFR_RNDN);
        ;
        mpfr_set_d(r11444, re, MPFR_RNDN);
        mpfr_cos(r11445, r11444, MPFR_RNDN);
        mpfr_mul(r11446, r11443, r11445, MPFR_RNDN);
        mpfr_mul(r11447, r11442, r11446, MPFR_RNDN);
        return mpfr_get_d(r11447, MPFR_RNDN);
}

