#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 r11978 = 0.5;
        float r11979 = re;
        float r11980 = sin(r11979);
        float r11981 = r11978 * r11980;
        float r11982 = im;
        float r11983 = -r11982;
        float r11984 = exp(r11983);
        float r11985 = exp(r11982);
        float r11986 = r11984 - r11985;
        float r11987 = r11981 * r11986;
        return r11987;
}

double f_id(double re, double im) {
        double r11988 = 0.5;
        double r11989 = re;
        double r11990 = sin(r11989);
        double r11991 = r11988 * r11990;
        double r11992 = im;
        double r11993 = -r11992;
        double r11994 = exp(r11993);
        double r11995 = exp(r11992);
        double r11996 = r11994 - r11995;
        double r11997 = r11991 * r11996;
        return r11997;
}


double f_of(float re, float im) {
        float r11998 = im;
        float r11999 = 1/3;
        float r12000 = r11998 * r11998;
        float r12001 = 2;
        float r12002 = fma(r11999, r12000, r12001);
        float r12003 = 5;
        float r12004 = pow(r11998, r12003);
        float r12005 = 1/60;
        float r12006 = r12004 * r12005;
        float r12007 = fma(r11998, r12002, r12006);
        float r12008 = re;
        float r12009 = sin(r12008);
        float r12010 = 0.5;
        float r12011 = -r12010;
        float r12012 = r12009 * r12011;
        float r12013 = r12007 * r12012;
        return r12013;
}

double f_od(double re, double im) {
        double r12014 = im;
        double r12015 = 1/3;
        double r12016 = r12014 * r12014;
        double r12017 = 2;
        double r12018 = fma(r12015, r12016, r12017);
        double r12019 = 5;
        double r12020 = pow(r12014, r12019);
        double r12021 = 1/60;
        double r12022 = r12020 * r12021;
        double r12023 = fma(r12014, r12018, r12022);
        double r12024 = re;
        double r12025 = sin(r12024);
        double r12026 = 0.5;
        double r12027 = -r12026;
        double r12028 = r12025 * r12027;
        double r12029 = r12023 * r12028;
        return r12029;
}

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 r12030, r12031, r12032, r12033, r12034, r12035, r12036, r12037, r12038, r12039;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r12030, "0.5", 10, MPFR_RNDN);
        mpfr_init(r12031);
        mpfr_init(r12032);
        mpfr_init(r12033);
        mpfr_init(r12034);
        mpfr_init(r12035);
        mpfr_init(r12036);
        mpfr_init(r12037);
        mpfr_init(r12038);
        mpfr_init(r12039);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r12031, re, MPFR_RNDN);
        mpfr_sin(r12032, r12031, MPFR_RNDN);
        mpfr_mul(r12033, r12030, r12032, MPFR_RNDN);
        mpfr_set_d(r12034, im, MPFR_RNDN);
        mpfr_neg(r12035, r12034, MPFR_RNDN);
        mpfr_exp(r12036, r12035, MPFR_RNDN);
        mpfr_exp(r12037, r12034, MPFR_RNDN);
        mpfr_sub(r12038, r12036, r12037, MPFR_RNDN);
        mpfr_mul(r12039, r12033, r12038, MPFR_RNDN);
        return mpfr_get_d(r12039, MPFR_RNDN);
}

static mpfr_t r12040, r12041, r12042, r12043, r12044, r12045, r12046, r12047, r12048, r12049, r12050, r12051, r12052, r12053, r12054, r12055;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12040);
        mpfr_init_set_str(r12041, "1/3", 10, MPFR_RNDN);
        mpfr_init(r12042);
        mpfr_init_set_str(r12043, "2", 10, MPFR_RNDN);
        mpfr_init(r12044);
        mpfr_init_set_str(r12045, "5", 10, MPFR_RNDN);
        mpfr_init(r12046);
        mpfr_init_set_str(r12047, "1/60", 10, MPFR_RNDN);
        mpfr_init(r12048);
        mpfr_init(r12049);
        mpfr_init(r12050);
        mpfr_init(r12051);
        mpfr_init_set_str(r12052, "0.5", 10, MPFR_RNDN);
        mpfr_init(r12053);
        mpfr_init(r12054);
        mpfr_init(r12055);
}

double f_fm(double re, double im) {
        mpfr_set_d(r12040, im, MPFR_RNDN);
        ;
        mpfr_mul(r12042, r12040, r12040, MPFR_RNDN);
        ;
        mpfr_fma(r12044, r12041, r12042, r12043, MPFR_RNDN);
        ;
        mpfr_pow(r12046, r12040, r12045, MPFR_RNDN);
        ;
        mpfr_mul(r12048, r12046, r12047, MPFR_RNDN);
        mpfr_fma(r12049, r12040, r12044, r12048, MPFR_RNDN);
        mpfr_set_d(r12050, re, MPFR_RNDN);
        mpfr_sin(r12051, r12050, MPFR_RNDN);
        ;
        mpfr_neg(r12053, r12052, MPFR_RNDN);
        mpfr_mul(r12054, r12051, r12053, MPFR_RNDN);
        mpfr_mul(r12055, r12049, r12054, MPFR_RNDN);
        return mpfr_get_d(r12055, MPFR_RNDN);
}

static mpfr_t r12056, r12057, r12058, r12059, r12060, r12061, r12062, r12063, r12064, r12065, r12066, r12067, r12068, r12069, r12070, r12071;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12056);
        mpfr_init_set_str(r12057, "1/3", 10, MPFR_RNDN);
        mpfr_init(r12058);
        mpfr_init_set_str(r12059, "2", 10, MPFR_RNDN);
        mpfr_init(r12060);
        mpfr_init_set_str(r12061, "5", 10, MPFR_RNDN);
        mpfr_init(r12062);
        mpfr_init_set_str(r12063, "1/60", 10, MPFR_RNDN);
        mpfr_init(r12064);
        mpfr_init(r12065);
        mpfr_init(r12066);
        mpfr_init(r12067);
        mpfr_init_set_str(r12068, "0.5", 10, MPFR_RNDN);
        mpfr_init(r12069);
        mpfr_init(r12070);
        mpfr_init(r12071);
}

double f_dm(double re, double im) {
        mpfr_set_d(r12056, im, MPFR_RNDN);
        ;
        mpfr_mul(r12058, r12056, r12056, MPFR_RNDN);
        ;
        mpfr_fma(r12060, r12057, r12058, r12059, MPFR_RNDN);
        ;
        mpfr_pow(r12062, r12056, r12061, MPFR_RNDN);
        ;
        mpfr_mul(r12064, r12062, r12063, MPFR_RNDN);
        mpfr_fma(r12065, r12056, r12060, r12064, MPFR_RNDN);
        mpfr_set_d(r12066, re, MPFR_RNDN);
        mpfr_sin(r12067, r12066, MPFR_RNDN);
        ;
        mpfr_neg(r12069, r12068, MPFR_RNDN);
        mpfr_mul(r12070, r12067, r12069, MPFR_RNDN);
        mpfr_mul(r12071, r12065, r12070, MPFR_RNDN);
        return mpfr_get_d(r12071, MPFR_RNDN);
}

