#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 r28101 = 0.5;
        float r28102 = re;
        float r28103 = sin(r28102);
        float r28104 = r28101 * r28103;
        float r28105 = im;
        float r28106 = -r28105;
        float r28107 = exp(r28106);
        float r28108 = exp(r28105);
        float r28109 = r28107 - r28108;
        float r28110 = r28104 * r28109;
        return r28110;
}

double f_id(double re, double im) {
        double r28111 = 0.5;
        double r28112 = re;
        double r28113 = sin(r28112);
        double r28114 = r28111 * r28113;
        double r28115 = im;
        double r28116 = -r28115;
        double r28117 = exp(r28116);
        double r28118 = exp(r28115);
        double r28119 = r28117 - r28118;
        double r28120 = r28114 * r28119;
        return r28120;
}


double f_of(float re, float im) {
        float r28121 = im;
        float r28122 = 1/3;
        float r28123 = r28122 * r28121;
        float r28124 = 2;
        float r28125 = fma(r28123, r28121, r28124);
        float r28126 = 5;
        float r28127 = pow(r28121, r28126);
        float r28128 = 1/60;
        float r28129 = r28127 * r28128;
        float r28130 = fma(r28121, r28125, r28129);
        float r28131 = re;
        float r28132 = sin(r28131);
        float r28133 = 0.5;
        float r28134 = -r28133;
        float r28135 = r28132 * r28134;
        float r28136 = r28130 * r28135;
        return r28136;
}

double f_od(double re, double im) {
        double r28137 = im;
        double r28138 = 1/3;
        double r28139 = r28138 * r28137;
        double r28140 = 2;
        double r28141 = fma(r28139, r28137, r28140);
        double r28142 = 5;
        double r28143 = pow(r28137, r28142);
        double r28144 = 1/60;
        double r28145 = r28143 * r28144;
        double r28146 = fma(r28137, r28141, r28145);
        double r28147 = re;
        double r28148 = sin(r28147);
        double r28149 = 0.5;
        double r28150 = -r28149;
        double r28151 = r28148 * r28150;
        double r28152 = r28146 * r28151;
        return r28152;
}

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 r28153, r28154, r28155, r28156, r28157, r28158, r28159, r28160, r28161, r28162;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28153, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28154);
        mpfr_init(r28155);
        mpfr_init(r28156);
        mpfr_init(r28157);
        mpfr_init(r28158);
        mpfr_init(r28159);
        mpfr_init(r28160);
        mpfr_init(r28161);
        mpfr_init(r28162);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r28154, re, MPFR_RNDN);
        mpfr_sin(r28155, r28154, MPFR_RNDN);
        mpfr_mul(r28156, r28153, r28155, MPFR_RNDN);
        mpfr_set_d(r28157, im, MPFR_RNDN);
        mpfr_neg(r28158, r28157, MPFR_RNDN);
        mpfr_exp(r28159, r28158, MPFR_RNDN);
        mpfr_exp(r28160, r28157, MPFR_RNDN);
        mpfr_sub(r28161, r28159, r28160, MPFR_RNDN);
        mpfr_mul(r28162, r28156, r28161, MPFR_RNDN);
        return mpfr_get_d(r28162, MPFR_RNDN);
}

static mpfr_t r28163, r28164, r28165, r28166, r28167, r28168, r28169, r28170, r28171, r28172, r28173, r28174, r28175, r28176, r28177, r28178;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28163);
        mpfr_init_set_str(r28164, "1/3", 10, MPFR_RNDN);
        mpfr_init(r28165);
        mpfr_init_set_str(r28166, "2", 10, MPFR_RNDN);
        mpfr_init(r28167);
        mpfr_init_set_str(r28168, "5", 10, MPFR_RNDN);
        mpfr_init(r28169);
        mpfr_init_set_str(r28170, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28171);
        mpfr_init(r28172);
        mpfr_init(r28173);
        mpfr_init(r28174);
        mpfr_init_set_str(r28175, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28176);
        mpfr_init(r28177);
        mpfr_init(r28178);
}

double f_fm(double re, double im) {
        mpfr_set_d(r28163, im, MPFR_RNDN);
        ;
        mpfr_mul(r28165, r28164, r28163, MPFR_RNDN);
        ;
        mpfr_fma(r28167, r28165, r28163, r28166, MPFR_RNDN);
        ;
        mpfr_pow(r28169, r28163, r28168, MPFR_RNDN);
        ;
        mpfr_mul(r28171, r28169, r28170, MPFR_RNDN);
        mpfr_fma(r28172, r28163, r28167, r28171, MPFR_RNDN);
        mpfr_set_d(r28173, re, MPFR_RNDN);
        mpfr_sin(r28174, r28173, MPFR_RNDN);
        ;
        mpfr_neg(r28176, r28175, MPFR_RNDN);
        mpfr_mul(r28177, r28174, r28176, MPFR_RNDN);
        mpfr_mul(r28178, r28172, r28177, MPFR_RNDN);
        return mpfr_get_d(r28178, MPFR_RNDN);
}

static mpfr_t r28179, r28180, r28181, r28182, r28183, r28184, r28185, r28186, r28187, r28188, r28189, r28190, r28191, r28192, r28193, r28194;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28179);
        mpfr_init_set_str(r28180, "1/3", 10, MPFR_RNDN);
        mpfr_init(r28181);
        mpfr_init_set_str(r28182, "2", 10, MPFR_RNDN);
        mpfr_init(r28183);
        mpfr_init_set_str(r28184, "5", 10, MPFR_RNDN);
        mpfr_init(r28185);
        mpfr_init_set_str(r28186, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28187);
        mpfr_init(r28188);
        mpfr_init(r28189);
        mpfr_init(r28190);
        mpfr_init_set_str(r28191, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28192);
        mpfr_init(r28193);
        mpfr_init(r28194);
}

double f_dm(double re, double im) {
        mpfr_set_d(r28179, im, MPFR_RNDN);
        ;
        mpfr_mul(r28181, r28180, r28179, MPFR_RNDN);
        ;
        mpfr_fma(r28183, r28181, r28179, r28182, MPFR_RNDN);
        ;
        mpfr_pow(r28185, r28179, r28184, MPFR_RNDN);
        ;
        mpfr_mul(r28187, r28185, r28186, MPFR_RNDN);
        mpfr_fma(r28188, r28179, r28183, r28187, MPFR_RNDN);
        mpfr_set_d(r28189, re, MPFR_RNDN);
        mpfr_sin(r28190, r28189, MPFR_RNDN);
        ;
        mpfr_neg(r28192, r28191, MPFR_RNDN);
        mpfr_mul(r28193, r28190, r28192, MPFR_RNDN);
        mpfr_mul(r28194, r28188, r28193, MPFR_RNDN);
        return mpfr_get_d(r28194, MPFR_RNDN);
}

