#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "math.cos on complex, imaginary part";

double f_if(float re, float im) {
        float r25396 = 0.5;
        float r25397 = re;
        float r25398 = sin(r25397);
        float r25399 = r25396 * r25398;
        float r25400 = im;
        float r25401 = -r25400;
        float r25402 = exp(r25401);
        float r25403 = exp(r25400);
        float r25404 = r25402 - r25403;
        float r25405 = r25399 * r25404;
        return r25405;
}

double f_id(double re, double im) {
        double r25406 = 0.5;
        double r25407 = re;
        double r25408 = sin(r25407);
        double r25409 = r25406 * r25408;
        double r25410 = im;
        double r25411 = -r25410;
        double r25412 = exp(r25411);
        double r25413 = exp(r25410);
        double r25414 = r25412 - r25413;
        double r25415 = r25409 * r25414;
        return r25415;
}


double f_of(float re, float im) {
        float r25416 = im;
        float r25417 = 1/3;
        float r25418 = r25417 * r25416;
        float r25419 = 2;
        float r25420 = fma(r25418, r25416, r25419);
        float r25421 = 5;
        float r25422 = pow(r25416, r25421);
        float r25423 = 1/60;
        float r25424 = r25422 * r25423;
        float r25425 = fma(r25416, r25420, r25424);
        float r25426 = re;
        float r25427 = sin(r25426);
        float r25428 = 0.5;
        float r25429 = -r25428;
        float r25430 = r25427 * r25429;
        float r25431 = r25425 * r25430;
        return r25431;
}

double f_od(double re, double im) {
        double r25432 = im;
        double r25433 = 1/3;
        double r25434 = r25433 * r25432;
        double r25435 = 2;
        double r25436 = fma(r25434, r25432, r25435);
        double r25437 = 5;
        double r25438 = pow(r25432, r25437);
        double r25439 = 1/60;
        double r25440 = r25438 * r25439;
        double r25441 = fma(r25432, r25436, r25440);
        double r25442 = re;
        double r25443 = sin(r25442);
        double r25444 = 0.5;
        double r25445 = -r25444;
        double r25446 = r25443 * r25445;
        double r25447 = r25441 * r25446;
        return r25447;
}

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 r25448, r25449, r25450, r25451, r25452, r25453, r25454, r25455, r25456, r25457;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r25448, "0.5", 10, MPFR_RNDN);
        mpfr_init(r25449);
        mpfr_init(r25450);
        mpfr_init(r25451);
        mpfr_init(r25452);
        mpfr_init(r25453);
        mpfr_init(r25454);
        mpfr_init(r25455);
        mpfr_init(r25456);
        mpfr_init(r25457);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r25449, re, MPFR_RNDN);
        mpfr_sin(r25450, r25449, MPFR_RNDN);
        mpfr_mul(r25451, r25448, r25450, MPFR_RNDN);
        mpfr_set_d(r25452, im, MPFR_RNDN);
        mpfr_neg(r25453, r25452, MPFR_RNDN);
        mpfr_exp(r25454, r25453, MPFR_RNDN);
        mpfr_exp(r25455, r25452, MPFR_RNDN);
        mpfr_sub(r25456, r25454, r25455, MPFR_RNDN);
        mpfr_mul(r25457, r25451, r25456, MPFR_RNDN);
        return mpfr_get_d(r25457, MPFR_RNDN);
}

static mpfr_t r25458, r25459, r25460, r25461, r25462, r25463, r25464, r25465, r25466, r25467, r25468, r25469, r25470, r25471, r25472, r25473;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r25458);
        mpfr_init_set_str(r25459, "1/3", 10, MPFR_RNDN);
        mpfr_init(r25460);
        mpfr_init_set_str(r25461, "2", 10, MPFR_RNDN);
        mpfr_init(r25462);
        mpfr_init_set_str(r25463, "5", 10, MPFR_RNDN);
        mpfr_init(r25464);
        mpfr_init_set_str(r25465, "1/60", 10, MPFR_RNDN);
        mpfr_init(r25466);
        mpfr_init(r25467);
        mpfr_init(r25468);
        mpfr_init(r25469);
        mpfr_init_set_str(r25470, "0.5", 10, MPFR_RNDN);
        mpfr_init(r25471);
        mpfr_init(r25472);
        mpfr_init(r25473);
}

double f_fm(double re, double im) {
        mpfr_set_d(r25458, im, MPFR_RNDN);
        ;
        mpfr_mul(r25460, r25459, r25458, MPFR_RNDN);
        ;
        mpfr_fma(r25462, r25460, r25458, r25461, MPFR_RNDN);
        ;
        mpfr_pow(r25464, r25458, r25463, MPFR_RNDN);
        ;
        mpfr_mul(r25466, r25464, r25465, MPFR_RNDN);
        mpfr_fma(r25467, r25458, r25462, r25466, MPFR_RNDN);
        mpfr_set_d(r25468, re, MPFR_RNDN);
        mpfr_sin(r25469, r25468, MPFR_RNDN);
        ;
        mpfr_neg(r25471, r25470, MPFR_RNDN);
        mpfr_mul(r25472, r25469, r25471, MPFR_RNDN);
        mpfr_mul(r25473, r25467, r25472, MPFR_RNDN);
        return mpfr_get_d(r25473, MPFR_RNDN);
}

static mpfr_t r25474, r25475, r25476, r25477, r25478, r25479, r25480, r25481, r25482, r25483, r25484, r25485, r25486, r25487, r25488, r25489;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r25474);
        mpfr_init_set_str(r25475, "1/3", 10, MPFR_RNDN);
        mpfr_init(r25476);
        mpfr_init_set_str(r25477, "2", 10, MPFR_RNDN);
        mpfr_init(r25478);
        mpfr_init_set_str(r25479, "5", 10, MPFR_RNDN);
        mpfr_init(r25480);
        mpfr_init_set_str(r25481, "1/60", 10, MPFR_RNDN);
        mpfr_init(r25482);
        mpfr_init(r25483);
        mpfr_init(r25484);
        mpfr_init(r25485);
        mpfr_init_set_str(r25486, "0.5", 10, MPFR_RNDN);
        mpfr_init(r25487);
        mpfr_init(r25488);
        mpfr_init(r25489);
}

double f_dm(double re, double im) {
        mpfr_set_d(r25474, im, MPFR_RNDN);
        ;
        mpfr_mul(r25476, r25475, r25474, MPFR_RNDN);
        ;
        mpfr_fma(r25478, r25476, r25474, r25477, MPFR_RNDN);
        ;
        mpfr_pow(r25480, r25474, r25479, MPFR_RNDN);
        ;
        mpfr_mul(r25482, r25480, r25481, MPFR_RNDN);
        mpfr_fma(r25483, r25474, r25478, r25482, MPFR_RNDN);
        mpfr_set_d(r25484, re, MPFR_RNDN);
        mpfr_sin(r25485, r25484, MPFR_RNDN);
        ;
        mpfr_neg(r25487, r25486, MPFR_RNDN);
        mpfr_mul(r25488, r25485, r25487, MPFR_RNDN);
        mpfr_mul(r25489, r25483, r25488, MPFR_RNDN);
        return mpfr_get_d(r25489, MPFR_RNDN);
}

