#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 r38310 = 0.5;
        float r38311 = re;
        float r38312 = cos(r38311);
        float r38313 = r38310 * r38312;
        float r38314 = 0;
        float r38315 = im;
        float r38316 = r38314 - r38315;
        float r38317 = exp(r38316);
        float r38318 = exp(r38315);
        float r38319 = r38317 - r38318;
        float r38320 = r38313 * r38319;
        return r38320;
}

double f_id(double re, double im) {
        double r38321 = 0.5;
        double r38322 = re;
        double r38323 = cos(r38322);
        double r38324 = r38321 * r38323;
        double r38325 = 0;
        double r38326 = im;
        double r38327 = r38325 - r38326;
        double r38328 = exp(r38327);
        double r38329 = exp(r38326);
        double r38330 = r38328 - r38329;
        double r38331 = r38324 * r38330;
        return r38331;
}


double f_of(float re, float im) {
        float r38332 = 1/60;
        float r38333 = im;
        float r38334 = 5;
        float r38335 = pow(r38333, r38334);
        float r38336 = r38332 * r38335;
        float r38337 = 2;
        float r38338 = r38337 * r38333;
        float r38339 = 1/3;
        float r38340 = 3;
        float r38341 = pow(r38333, r38340);
        float r38342 = r38339 * r38341;
        float r38343 = r38338 + r38342;
        float r38344 = r38336 + r38343;
        float r38345 = -r38344;
        float r38346 = 0.5;
        float r38347 = re;
        float r38348 = cos(r38347);
        float r38349 = r38346 * r38348;
        float r38350 = r38345 * r38349;
        return r38350;
}

double f_od(double re, double im) {
        double r38351 = 1/60;
        double r38352 = im;
        double r38353 = 5;
        double r38354 = pow(r38352, r38353);
        double r38355 = r38351 * r38354;
        double r38356 = 2;
        double r38357 = r38356 * r38352;
        double r38358 = 1/3;
        double r38359 = 3;
        double r38360 = pow(r38352, r38359);
        double r38361 = r38358 * r38360;
        double r38362 = r38357 + r38361;
        double r38363 = r38355 + r38362;
        double r38364 = -r38363;
        double r38365 = 0.5;
        double r38366 = re;
        double r38367 = cos(r38366);
        double r38368 = r38365 * r38367;
        double r38369 = r38364 * r38368;
        return r38369;
}

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 r38370, r38371, r38372, r38373, r38374, r38375, r38376, r38377, r38378, r38379, r38380;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r38370, "0.5", 10, MPFR_RNDN);
        mpfr_init(r38371);
        mpfr_init(r38372);
        mpfr_init(r38373);
        mpfr_init_set_str(r38374, "0", 10, MPFR_RNDN);
        mpfr_init(r38375);
        mpfr_init(r38376);
        mpfr_init(r38377);
        mpfr_init(r38378);
        mpfr_init(r38379);
        mpfr_init(r38380);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r38371, re, MPFR_RNDN);
        mpfr_cos(r38372, r38371, MPFR_RNDN);
        mpfr_mul(r38373, r38370, r38372, MPFR_RNDN);
        ;
        mpfr_set_d(r38375, im, MPFR_RNDN);
        mpfr_sub(r38376, r38374, r38375, MPFR_RNDN);
        mpfr_exp(r38377, r38376, MPFR_RNDN);
        mpfr_exp(r38378, r38375, MPFR_RNDN);
        mpfr_sub(r38379, r38377, r38378, MPFR_RNDN);
        mpfr_mul(r38380, r38373, r38379, MPFR_RNDN);
        return mpfr_get_d(r38380, MPFR_RNDN);
}

static mpfr_t r38381, r38382, r38383, r38384, r38385, r38386, r38387, r38388, r38389, r38390, r38391, r38392, r38393, r38394, r38395, r38396, r38397, r38398, r38399;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r38381, "1/60", 10, MPFR_RNDN);
        mpfr_init(r38382);
        mpfr_init_set_str(r38383, "5", 10, MPFR_RNDN);
        mpfr_init(r38384);
        mpfr_init(r38385);
        mpfr_init_set_str(r38386, "2", 10, MPFR_RNDN);
        mpfr_init(r38387);
        mpfr_init_set_str(r38388, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r38389, "3", 10, MPFR_RNDN);
        mpfr_init(r38390);
        mpfr_init(r38391);
        mpfr_init(r38392);
        mpfr_init(r38393);
        mpfr_init(r38394);
        mpfr_init_set_str(r38395, "0.5", 10, MPFR_RNDN);
        mpfr_init(r38396);
        mpfr_init(r38397);
        mpfr_init(r38398);
        mpfr_init(r38399);
}

double f_fm(double re, double im) {
        ;
        mpfr_set_d(r38382, im, MPFR_RNDN);
        ;
        mpfr_pow(r38384, r38382, r38383, MPFR_RNDN);
        mpfr_mul(r38385, r38381, r38384, MPFR_RNDN);
        ;
        mpfr_mul(r38387, r38386, r38382, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r38390, r38382, r38389, MPFR_RNDN);
        mpfr_mul(r38391, r38388, r38390, MPFR_RNDN);
        mpfr_add(r38392, r38387, r38391, MPFR_RNDN);
        mpfr_add(r38393, r38385, r38392, MPFR_RNDN);
        mpfr_neg(r38394, r38393, MPFR_RNDN);
        ;
        mpfr_set_d(r38396, re, MPFR_RNDN);
        mpfr_cos(r38397, r38396, MPFR_RNDN);
        mpfr_mul(r38398, r38395, r38397, MPFR_RNDN);
        mpfr_mul(r38399, r38394, r38398, MPFR_RNDN);
        return mpfr_get_d(r38399, MPFR_RNDN);
}

static mpfr_t r38400, r38401, r38402, r38403, r38404, r38405, r38406, r38407, r38408, r38409, r38410, r38411, r38412, r38413, r38414, r38415, r38416, r38417, r38418;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r38400, "1/60", 10, MPFR_RNDN);
        mpfr_init(r38401);
        mpfr_init_set_str(r38402, "5", 10, MPFR_RNDN);
        mpfr_init(r38403);
        mpfr_init(r38404);
        mpfr_init_set_str(r38405, "2", 10, MPFR_RNDN);
        mpfr_init(r38406);
        mpfr_init_set_str(r38407, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r38408, "3", 10, MPFR_RNDN);
        mpfr_init(r38409);
        mpfr_init(r38410);
        mpfr_init(r38411);
        mpfr_init(r38412);
        mpfr_init(r38413);
        mpfr_init_set_str(r38414, "0.5", 10, MPFR_RNDN);
        mpfr_init(r38415);
        mpfr_init(r38416);
        mpfr_init(r38417);
        mpfr_init(r38418);
}

double f_dm(double re, double im) {
        ;
        mpfr_set_d(r38401, im, MPFR_RNDN);
        ;
        mpfr_pow(r38403, r38401, r38402, MPFR_RNDN);
        mpfr_mul(r38404, r38400, r38403, MPFR_RNDN);
        ;
        mpfr_mul(r38406, r38405, r38401, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r38409, r38401, r38408, MPFR_RNDN);
        mpfr_mul(r38410, r38407, r38409, MPFR_RNDN);
        mpfr_add(r38411, r38406, r38410, MPFR_RNDN);
        mpfr_add(r38412, r38404, r38411, MPFR_RNDN);
        mpfr_neg(r38413, r38412, MPFR_RNDN);
        ;
        mpfr_set_d(r38415, re, MPFR_RNDN);
        mpfr_cos(r38416, r38415, MPFR_RNDN);
        mpfr_mul(r38417, r38414, r38416, MPFR_RNDN);
        mpfr_mul(r38418, r38413, r38417, MPFR_RNDN);
        return mpfr_get_d(r38418, MPFR_RNDN);
}

