#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 r28396 = 0.5;
        float r28397 = re;
        float r28398 = cos(r28397);
        float r28399 = r28396 * r28398;
        float r28400 = 0;
        float r28401 = im;
        float r28402 = r28400 - r28401;
        float r28403 = exp(r28402);
        float r28404 = exp(r28401);
        float r28405 = r28403 - r28404;
        float r28406 = r28399 * r28405;
        return r28406;
}

double f_id(double re, double im) {
        double r28407 = 0.5;
        double r28408 = re;
        double r28409 = cos(r28408);
        double r28410 = r28407 * r28409;
        double r28411 = 0;
        double r28412 = im;
        double r28413 = r28411 - r28412;
        double r28414 = exp(r28413);
        double r28415 = exp(r28412);
        double r28416 = r28414 - r28415;
        double r28417 = r28410 * r28416;
        return r28417;
}


double f_of(float re, float im) {
        float r28418 = 0.5;
        float r28419 = re;
        float r28420 = cos(r28419);
        float r28421 = r28418 * r28420;
        float r28422 = 1/60;
        float r28423 = im;
        float r28424 = 5;
        float r28425 = pow(r28423, r28424);
        float r28426 = r28422 * r28425;
        float r28427 = 2;
        float r28428 = r28427 * r28423;
        float r28429 = 1/3;
        float r28430 = 3;
        float r28431 = pow(r28423, r28430);
        float r28432 = r28429 * r28431;
        float r28433 = r28428 + r28432;
        float r28434 = r28426 + r28433;
        float r28435 = -r28434;
        float r28436 = r28421 * r28435;
        return r28436;
}

double f_od(double re, double im) {
        double r28437 = 0.5;
        double r28438 = re;
        double r28439 = cos(r28438);
        double r28440 = r28437 * r28439;
        double r28441 = 1/60;
        double r28442 = im;
        double r28443 = 5;
        double r28444 = pow(r28442, r28443);
        double r28445 = r28441 * r28444;
        double r28446 = 2;
        double r28447 = r28446 * r28442;
        double r28448 = 1/3;
        double r28449 = 3;
        double r28450 = pow(r28442, r28449);
        double r28451 = r28448 * r28450;
        double r28452 = r28447 + r28451;
        double r28453 = r28445 + r28452;
        double r28454 = -r28453;
        double r28455 = r28440 * r28454;
        return r28455;
}

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 r28456, r28457, r28458, r28459, r28460, r28461, r28462, r28463, r28464, r28465, r28466;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28456, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28457);
        mpfr_init(r28458);
        mpfr_init(r28459);
        mpfr_init_set_str(r28460, "0", 10, MPFR_RNDN);
        mpfr_init(r28461);
        mpfr_init(r28462);
        mpfr_init(r28463);
        mpfr_init(r28464);
        mpfr_init(r28465);
        mpfr_init(r28466);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r28457, re, MPFR_RNDN);
        mpfr_cos(r28458, r28457, MPFR_RNDN);
        mpfr_mul(r28459, r28456, r28458, MPFR_RNDN);
        ;
        mpfr_set_d(r28461, im, MPFR_RNDN);
        mpfr_sub(r28462, r28460, r28461, MPFR_RNDN);
        mpfr_exp(r28463, r28462, MPFR_RNDN);
        mpfr_exp(r28464, r28461, MPFR_RNDN);
        mpfr_sub(r28465, r28463, r28464, MPFR_RNDN);
        mpfr_mul(r28466, r28459, r28465, MPFR_RNDN);
        return mpfr_get_d(r28466, MPFR_RNDN);
}

static mpfr_t r28467, r28468, r28469, r28470, r28471, r28472, r28473, r28474, r28475, r28476, r28477, r28478, r28479, r28480, r28481, r28482, r28483, r28484, r28485;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28467, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28468);
        mpfr_init(r28469);
        mpfr_init(r28470);
        mpfr_init_set_str(r28471, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28472);
        mpfr_init_set_str(r28473, "5", 10, MPFR_RNDN);
        mpfr_init(r28474);
        mpfr_init(r28475);
        mpfr_init_set_str(r28476, "2", 10, MPFR_RNDN);
        mpfr_init(r28477);
        mpfr_init_set_str(r28478, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r28479, "3", 10, MPFR_RNDN);
        mpfr_init(r28480);
        mpfr_init(r28481);
        mpfr_init(r28482);
        mpfr_init(r28483);
        mpfr_init(r28484);
        mpfr_init(r28485);
}

double f_fm(double re, double im) {
        ;
        mpfr_set_d(r28468, re, MPFR_RNDN);
        mpfr_cos(r28469, r28468, MPFR_RNDN);
        mpfr_mul(r28470, r28467, r28469, MPFR_RNDN);
        ;
        mpfr_set_d(r28472, im, MPFR_RNDN);
        ;
        mpfr_pow(r28474, r28472, r28473, MPFR_RNDN);
        mpfr_mul(r28475, r28471, r28474, MPFR_RNDN);
        ;
        mpfr_mul(r28477, r28476, r28472, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28480, r28472, r28479, MPFR_RNDN);
        mpfr_mul(r28481, r28478, r28480, MPFR_RNDN);
        mpfr_add(r28482, r28477, r28481, MPFR_RNDN);
        mpfr_add(r28483, r28475, r28482, MPFR_RNDN);
        mpfr_neg(r28484, r28483, MPFR_RNDN);
        mpfr_mul(r28485, r28470, r28484, MPFR_RNDN);
        return mpfr_get_d(r28485, MPFR_RNDN);
}

static mpfr_t r28486, r28487, r28488, r28489, r28490, r28491, r28492, r28493, r28494, r28495, r28496, r28497, r28498, r28499, r28500, r28501, r28502, r28503, r28504;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28486, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28487);
        mpfr_init(r28488);
        mpfr_init(r28489);
        mpfr_init_set_str(r28490, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28491);
        mpfr_init_set_str(r28492, "5", 10, MPFR_RNDN);
        mpfr_init(r28493);
        mpfr_init(r28494);
        mpfr_init_set_str(r28495, "2", 10, MPFR_RNDN);
        mpfr_init(r28496);
        mpfr_init_set_str(r28497, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r28498, "3", 10, MPFR_RNDN);
        mpfr_init(r28499);
        mpfr_init(r28500);
        mpfr_init(r28501);
        mpfr_init(r28502);
        mpfr_init(r28503);
        mpfr_init(r28504);
}

double f_dm(double re, double im) {
        ;
        mpfr_set_d(r28487, re, MPFR_RNDN);
        mpfr_cos(r28488, r28487, MPFR_RNDN);
        mpfr_mul(r28489, r28486, r28488, MPFR_RNDN);
        ;
        mpfr_set_d(r28491, im, MPFR_RNDN);
        ;
        mpfr_pow(r28493, r28491, r28492, MPFR_RNDN);
        mpfr_mul(r28494, r28490, r28493, MPFR_RNDN);
        ;
        mpfr_mul(r28496, r28495, r28491, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28499, r28491, r28498, MPFR_RNDN);
        mpfr_mul(r28500, r28497, r28499, MPFR_RNDN);
        mpfr_add(r28501, r28496, r28500, MPFR_RNDN);
        mpfr_add(r28502, r28494, r28501, MPFR_RNDN);
        mpfr_neg(r28503, r28502, MPFR_RNDN);
        mpfr_mul(r28504, r28489, r28503, MPFR_RNDN);
        return mpfr_get_d(r28504, MPFR_RNDN);
}

