#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 r27459 = 0.5;
        float r27460 = re;
        float r27461 = cos(r27460);
        float r27462 = r27459 * r27461;
        float r27463 = 0;
        float r27464 = im;
        float r27465 = r27463 - r27464;
        float r27466 = exp(r27465);
        float r27467 = exp(r27464);
        float r27468 = r27466 - r27467;
        float r27469 = r27462 * r27468;
        return r27469;
}

double f_id(double re, double im) {
        double r27470 = 0.5;
        double r27471 = re;
        double r27472 = cos(r27471);
        double r27473 = r27470 * r27472;
        double r27474 = 0;
        double r27475 = im;
        double r27476 = r27474 - r27475;
        double r27477 = exp(r27476);
        double r27478 = exp(r27475);
        double r27479 = r27477 - r27478;
        double r27480 = r27473 * r27479;
        return r27480;
}


double f_of(float re, float im) {
        float r27481 = im;
        float r27482 = 1/3;
        float r27483 = r27482 * r27481;
        float r27484 = 2;
        float r27485 = fma(r27483, r27481, r27484);
        float r27486 = 5;
        float r27487 = pow(r27481, r27486);
        float r27488 = 1/60;
        float r27489 = r27487 * r27488;
        float r27490 = fma(r27481, r27485, r27489);
        float r27491 = re;
        float r27492 = cos(r27491);
        float r27493 = 0.5;
        float r27494 = -r27493;
        float r27495 = r27492 * r27494;
        float r27496 = r27490 * r27495;
        return r27496;
}

double f_od(double re, double im) {
        double r27497 = im;
        double r27498 = 1/3;
        double r27499 = r27498 * r27497;
        double r27500 = 2;
        double r27501 = fma(r27499, r27497, r27500);
        double r27502 = 5;
        double r27503 = pow(r27497, r27502);
        double r27504 = 1/60;
        double r27505 = r27503 * r27504;
        double r27506 = fma(r27497, r27501, r27505);
        double r27507 = re;
        double r27508 = cos(r27507);
        double r27509 = 0.5;
        double r27510 = -r27509;
        double r27511 = r27508 * r27510;
        double r27512 = r27506 * r27511;
        return r27512;
}

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 r27513, r27514, r27515, r27516, r27517, r27518, r27519, r27520, r27521, r27522, r27523;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r27513, "0.5", 10, MPFR_RNDN);
        mpfr_init(r27514);
        mpfr_init(r27515);
        mpfr_init(r27516);
        mpfr_init_set_str(r27517, "0", 10, MPFR_RNDN);
        mpfr_init(r27518);
        mpfr_init(r27519);
        mpfr_init(r27520);
        mpfr_init(r27521);
        mpfr_init(r27522);
        mpfr_init(r27523);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r27514, re, MPFR_RNDN);
        mpfr_cos(r27515, r27514, MPFR_RNDN);
        mpfr_mul(r27516, r27513, r27515, MPFR_RNDN);
        ;
        mpfr_set_d(r27518, im, MPFR_RNDN);
        mpfr_sub(r27519, r27517, r27518, MPFR_RNDN);
        mpfr_exp(r27520, r27519, MPFR_RNDN);
        mpfr_exp(r27521, r27518, MPFR_RNDN);
        mpfr_sub(r27522, r27520, r27521, MPFR_RNDN);
        mpfr_mul(r27523, r27516, r27522, MPFR_RNDN);
        return mpfr_get_d(r27523, MPFR_RNDN);
}

static mpfr_t r27524, r27525, r27526, r27527, r27528, r27529, r27530, r27531, r27532, r27533, r27534, r27535, r27536, r27537, r27538, r27539;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27524);
        mpfr_init_set_str(r27525, "1/3", 10, MPFR_RNDN);
        mpfr_init(r27526);
        mpfr_init_set_str(r27527, "2", 10, MPFR_RNDN);
        mpfr_init(r27528);
        mpfr_init_set_str(r27529, "5", 10, MPFR_RNDN);
        mpfr_init(r27530);
        mpfr_init_set_str(r27531, "1/60", 10, MPFR_RNDN);
        mpfr_init(r27532);
        mpfr_init(r27533);
        mpfr_init(r27534);
        mpfr_init(r27535);
        mpfr_init_set_str(r27536, "0.5", 10, MPFR_RNDN);
        mpfr_init(r27537);
        mpfr_init(r27538);
        mpfr_init(r27539);
}

double f_fm(double re, double im) {
        mpfr_set_d(r27524, im, MPFR_RNDN);
        ;
        mpfr_mul(r27526, r27525, r27524, MPFR_RNDN);
        ;
        mpfr_fma(r27528, r27526, r27524, r27527, MPFR_RNDN);
        ;
        mpfr_pow(r27530, r27524, r27529, MPFR_RNDN);
        ;
        mpfr_mul(r27532, r27530, r27531, MPFR_RNDN);
        mpfr_fma(r27533, r27524, r27528, r27532, MPFR_RNDN);
        mpfr_set_d(r27534, re, MPFR_RNDN);
        mpfr_cos(r27535, r27534, MPFR_RNDN);
        ;
        mpfr_neg(r27537, r27536, MPFR_RNDN);
        mpfr_mul(r27538, r27535, r27537, MPFR_RNDN);
        mpfr_mul(r27539, r27533, r27538, MPFR_RNDN);
        return mpfr_get_d(r27539, MPFR_RNDN);
}

static mpfr_t r27540, r27541, r27542, r27543, r27544, r27545, r27546, r27547, r27548, r27549, r27550, r27551, r27552, r27553, r27554, r27555;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27540);
        mpfr_init_set_str(r27541, "1/3", 10, MPFR_RNDN);
        mpfr_init(r27542);
        mpfr_init_set_str(r27543, "2", 10, MPFR_RNDN);
        mpfr_init(r27544);
        mpfr_init_set_str(r27545, "5", 10, MPFR_RNDN);
        mpfr_init(r27546);
        mpfr_init_set_str(r27547, "1/60", 10, MPFR_RNDN);
        mpfr_init(r27548);
        mpfr_init(r27549);
        mpfr_init(r27550);
        mpfr_init(r27551);
        mpfr_init_set_str(r27552, "0.5", 10, MPFR_RNDN);
        mpfr_init(r27553);
        mpfr_init(r27554);
        mpfr_init(r27555);
}

double f_dm(double re, double im) {
        mpfr_set_d(r27540, im, MPFR_RNDN);
        ;
        mpfr_mul(r27542, r27541, r27540, MPFR_RNDN);
        ;
        mpfr_fma(r27544, r27542, r27540, r27543, MPFR_RNDN);
        ;
        mpfr_pow(r27546, r27540, r27545, MPFR_RNDN);
        ;
        mpfr_mul(r27548, r27546, r27547, MPFR_RNDN);
        mpfr_fma(r27549, r27540, r27544, r27548, MPFR_RNDN);
        mpfr_set_d(r27550, re, MPFR_RNDN);
        mpfr_cos(r27551, r27550, MPFR_RNDN);
        ;
        mpfr_neg(r27553, r27552, MPFR_RNDN);
        mpfr_mul(r27554, r27551, r27553, MPFR_RNDN);
        mpfr_mul(r27555, r27549, r27554, MPFR_RNDN);
        return mpfr_get_d(r27555, MPFR_RNDN);
}

