#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 r12005 = 0.5f;
        float r12006 = re;
        float r12007 = cos(r12006);
        float r12008 = r12005 * r12007;
        float r12009 = 0.0f;
        float r12010 = im;
        float r12011 = r12009 - r12010;
        float r12012 = exp(r12011);
        float r12013 = exp(r12010);
        float r12014 = r12012 - r12013;
        float r12015 = r12008 * r12014;
        return r12015;
}

double f_id(double re, double im) {
        double r12016 = 0.5;
        double r12017 = re;
        double r12018 = cos(r12017);
        double r12019 = r12016 * r12018;
        double r12020 = 0.0;
        double r12021 = im;
        double r12022 = r12020 - r12021;
        double r12023 = exp(r12022);
        double r12024 = exp(r12021);
        double r12025 = r12023 - r12024;
        double r12026 = r12019 * r12025;
        return r12026;
}


double f_of(float re, float im) {
        float r12027 = im;
        float r12028 = 2.0f;
        float r12029 = r12027 * r12028;
        float r12030 = 5.0f;
        float r12031 = pow(r12027, r12030);
        float r12032 = 0.016666666666666666f;
        float r12033 = r12031 * r12032;
        float r12034 = r12029 + r12033;
        float r12035 = 3.0f;
        float r12036 = pow(r12027, r12035);
        float r12037 = 0.3333333333333333f;
        float r12038 = r12036 * r12037;
        float r12039 = r12034 + r12038;
        float r12040 = re;
        float r12041 = cos(r12040);
        float r12042 = 0.5f;
        float r12043 = -r12042;
        float r12044 = r12041 * r12043;
        float r12045 = r12039 * r12044;
        return r12045;
}

double f_od(double re, double im) {
        double r12046 = im;
        double r12047 = 2.0;
        double r12048 = r12046 * r12047;
        double r12049 = 5.0;
        double r12050 = pow(r12046, r12049);
        double r12051 = 0.016666666666666666;
        double r12052 = r12050 * r12051;
        double r12053 = r12048 + r12052;
        double r12054 = 3.0;
        double r12055 = pow(r12046, r12054);
        double r12056 = 0.3333333333333333;
        double r12057 = r12055 * r12056;
        double r12058 = r12053 + r12057;
        double r12059 = re;
        double r12060 = cos(r12059);
        double r12061 = 0.5;
        double r12062 = -r12061;
        double r12063 = r12060 * r12062;
        double r12064 = r12058 * r12063;
        return r12064;
}

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 r12065, r12066, r12067, r12068, r12069, r12070, r12071, r12072, r12073, r12074, r12075;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r12065, "0.5", 10, MPFR_RNDN);
        mpfr_init(r12066);
        mpfr_init(r12067);
        mpfr_init(r12068);
        mpfr_init_set_str(r12069, "0", 10, MPFR_RNDN);
        mpfr_init(r12070);
        mpfr_init(r12071);
        mpfr_init(r12072);
        mpfr_init(r12073);
        mpfr_init(r12074);
        mpfr_init(r12075);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r12066, re, MPFR_RNDN);
        mpfr_cos(r12067, r12066, MPFR_RNDN);
        mpfr_mul(r12068, r12065, r12067, MPFR_RNDN);
        ;
        mpfr_set_d(r12070, im, MPFR_RNDN);
        mpfr_sub(r12071, r12069, r12070, MPFR_RNDN);
        mpfr_exp(r12072, r12071, MPFR_RNDN);
        mpfr_exp(r12073, r12070, MPFR_RNDN);
        mpfr_sub(r12074, r12072, r12073, MPFR_RNDN);
        mpfr_mul(r12075, r12068, r12074, MPFR_RNDN);
        return mpfr_get_d(r12075, MPFR_RNDN);
}

static mpfr_t r12076, r12077, r12078, r12079, r12080, r12081, r12082, r12083, r12084, r12085, r12086, r12087, r12088, r12089, r12090, r12091, r12092, r12093, r12094;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12076);
        mpfr_init_set_str(r12077, "2", 10, MPFR_RNDN);
        mpfr_init(r12078);
        mpfr_init_set_str(r12079, "5", 10, MPFR_RNDN);
        mpfr_init(r12080);
        mpfr_init_set_str(r12081, "1/60", 10, MPFR_RNDN);
        mpfr_init(r12082);
        mpfr_init(r12083);
        mpfr_init_set_str(r12084, "3", 10, MPFR_RNDN);
        mpfr_init(r12085);
        mpfr_init_set_str(r12086, "1/3", 10, MPFR_RNDN);
        mpfr_init(r12087);
        mpfr_init(r12088);
        mpfr_init(r12089);
        mpfr_init(r12090);
        mpfr_init_set_str(r12091, "0.5", 10, MPFR_RNDN);
        mpfr_init(r12092);
        mpfr_init(r12093);
        mpfr_init(r12094);
}

double f_fm(double re, double im) {
        mpfr_set_d(r12076, im, MPFR_RNDN);
        ;
        mpfr_mul(r12078, r12076, r12077, MPFR_RNDN);
        ;
        mpfr_pow(r12080, r12076, r12079, MPFR_RNDN);
        ;
        mpfr_mul(r12082, r12080, r12081, MPFR_RNDN);
        mpfr_add(r12083, r12078, r12082, MPFR_RNDN);
        ;
        mpfr_pow(r12085, r12076, r12084, MPFR_RNDN);
        ;
        mpfr_mul(r12087, r12085, r12086, MPFR_RNDN);
        mpfr_add(r12088, r12083, r12087, MPFR_RNDN);
        mpfr_set_d(r12089, re, MPFR_RNDN);
        mpfr_cos(r12090, r12089, MPFR_RNDN);
        ;
        mpfr_neg(r12092, r12091, MPFR_RNDN);
        mpfr_mul(r12093, r12090, r12092, MPFR_RNDN);
        mpfr_mul(r12094, r12088, r12093, MPFR_RNDN);
        return mpfr_get_d(r12094, MPFR_RNDN);
}

static mpfr_t r12095, r12096, r12097, r12098, r12099, r12100, r12101, r12102, r12103, r12104, r12105, r12106, r12107, r12108, r12109, r12110, r12111, r12112, r12113;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12095);
        mpfr_init_set_str(r12096, "2", 10, MPFR_RNDN);
        mpfr_init(r12097);
        mpfr_init_set_str(r12098, "5", 10, MPFR_RNDN);
        mpfr_init(r12099);
        mpfr_init_set_str(r12100, "1/60", 10, MPFR_RNDN);
        mpfr_init(r12101);
        mpfr_init(r12102);
        mpfr_init_set_str(r12103, "3", 10, MPFR_RNDN);
        mpfr_init(r12104);
        mpfr_init_set_str(r12105, "1/3", 10, MPFR_RNDN);
        mpfr_init(r12106);
        mpfr_init(r12107);
        mpfr_init(r12108);
        mpfr_init(r12109);
        mpfr_init_set_str(r12110, "0.5", 10, MPFR_RNDN);
        mpfr_init(r12111);
        mpfr_init(r12112);
        mpfr_init(r12113);
}

double f_dm(double re, double im) {
        mpfr_set_d(r12095, im, MPFR_RNDN);
        ;
        mpfr_mul(r12097, r12095, r12096, MPFR_RNDN);
        ;
        mpfr_pow(r12099, r12095, r12098, MPFR_RNDN);
        ;
        mpfr_mul(r12101, r12099, r12100, MPFR_RNDN);
        mpfr_add(r12102, r12097, r12101, MPFR_RNDN);
        ;
        mpfr_pow(r12104, r12095, r12103, MPFR_RNDN);
        ;
        mpfr_mul(r12106, r12104, r12105, MPFR_RNDN);
        mpfr_add(r12107, r12102, r12106, MPFR_RNDN);
        mpfr_set_d(r12108, re, MPFR_RNDN);
        mpfr_cos(r12109, r12108, MPFR_RNDN);
        ;
        mpfr_neg(r12111, r12110, MPFR_RNDN);
        mpfr_mul(r12112, r12109, r12111, MPFR_RNDN);
        mpfr_mul(r12113, r12107, r12112, MPFR_RNDN);
        return mpfr_get_d(r12113, MPFR_RNDN);
}

