#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 r11981 = 0.5;
        float r11982 = re;
        float r11983 = cos(r11982);
        float r11984 = r11981 * r11983;
        float r11985 = 0;
        float r11986 = im;
        float r11987 = r11985 - r11986;
        float r11988 = exp(r11987);
        float r11989 = exp(r11986);
        float r11990 = r11988 - r11989;
        float r11991 = r11984 * r11990;
        return r11991;
}

double f_id(double re, double im) {
        double r11992 = 0.5;
        double r11993 = re;
        double r11994 = cos(r11993);
        double r11995 = r11992 * r11994;
        double r11996 = 0;
        double r11997 = im;
        double r11998 = r11996 - r11997;
        double r11999 = exp(r11998);
        double r12000 = exp(r11997);
        double r12001 = r11999 - r12000;
        double r12002 = r11995 * r12001;
        return r12002;
}


double f_of(float re, float im) {
        float r12003 = im;
        float r12004 = 1/3;
        float r12005 = r12003 * r12004;
        float r12006 = 2;
        float r12007 = fma(r12005, r12003, r12006);
        float r12008 = sqrt(r12007);
        float r12009 = r12008 * r12003;
        float r12010 = r12003 * r12003;
        float r12011 = sqrt(r12006);
        float r12012 = r12010 / r12011;
        float r12013 = 1/6;
        float r12014 = fma(r12012, r12013, r12011);
        float r12015 = 1/72;
        float r12016 = r12015 / r12006;
        float r12017 = 4;
        float r12018 = pow(r12003, r12017);
        float r12019 = r12016 * r12018;
        float r12020 = r12019 / r12011;
        float r12021 = r12014 - r12020;
        float r12022 = 5;
        float r12023 = pow(r12003, r12022);
        float r12024 = 1/60;
        float r12025 = r12023 * r12024;
        float r12026 = fma(r12009, r12021, r12025);
        float r12027 = re;
        float r12028 = cos(r12027);
        float r12029 = 0.5;
        float r12030 = -r12029;
        float r12031 = r12028 * r12030;
        float r12032 = r12026 * r12031;
        float r12033 = 0.13796459554497495;
        bool r12034 = r12032 <= r12033;
        float r12035 = fma(r12003, r12005, r12006);
        float r12036 = fma(r12003, r12035, r12025);
        float r12037 = r12036 * r12031;
        float r12038 = exp(r12003);
        float r12039 = r12028 / r12038;
        float r12040 = r12028 * r12038;
        float r12041 = r12039 - r12040;
        float r12042 = r12041 * r12029;
        float r12043 = r12034 ? r12037 : r12042;
        return r12043;
}

double f_od(double re, double im) {
        double r12044 = im;
        double r12045 = 1/3;
        double r12046 = r12044 * r12045;
        double r12047 = 2;
        double r12048 = fma(r12046, r12044, r12047);
        double r12049 = sqrt(r12048);
        double r12050 = r12049 * r12044;
        double r12051 = r12044 * r12044;
        double r12052 = sqrt(r12047);
        double r12053 = r12051 / r12052;
        double r12054 = 1/6;
        double r12055 = fma(r12053, r12054, r12052);
        double r12056 = 1/72;
        double r12057 = r12056 / r12047;
        double r12058 = 4;
        double r12059 = pow(r12044, r12058);
        double r12060 = r12057 * r12059;
        double r12061 = r12060 / r12052;
        double r12062 = r12055 - r12061;
        double r12063 = 5;
        double r12064 = pow(r12044, r12063);
        double r12065 = 1/60;
        double r12066 = r12064 * r12065;
        double r12067 = fma(r12050, r12062, r12066);
        double r12068 = re;
        double r12069 = cos(r12068);
        double r12070 = 0.5;
        double r12071 = -r12070;
        double r12072 = r12069 * r12071;
        double r12073 = r12067 * r12072;
        double r12074 = 0.13796459554497495;
        bool r12075 = r12073 <= r12074;
        double r12076 = fma(r12044, r12046, r12047);
        double r12077 = fma(r12044, r12076, r12066);
        double r12078 = r12077 * r12072;
        double r12079 = exp(r12044);
        double r12080 = r12069 / r12079;
        double r12081 = r12069 * r12079;
        double r12082 = r12080 - r12081;
        double r12083 = r12082 * r12070;
        double r12084 = r12075 ? r12078 : r12083;
        return r12084;
}

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 r12085, r12086, r12087, r12088, r12089, r12090, r12091, r12092, r12093, r12094, r12095;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r12085, "0.5", 10, MPFR_RNDN);
        mpfr_init(r12086);
        mpfr_init(r12087);
        mpfr_init(r12088);
        mpfr_init_set_str(r12089, "0", 10, MPFR_RNDN);
        mpfr_init(r12090);
        mpfr_init(r12091);
        mpfr_init(r12092);
        mpfr_init(r12093);
        mpfr_init(r12094);
        mpfr_init(r12095);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r12086, re, MPFR_RNDN);
        mpfr_cos(r12087, r12086, MPFR_RNDN);
        mpfr_mul(r12088, r12085, r12087, MPFR_RNDN);
        ;
        mpfr_set_d(r12090, im, MPFR_RNDN);
        mpfr_sub(r12091, r12089, r12090, MPFR_RNDN);
        mpfr_exp(r12092, r12091, MPFR_RNDN);
        mpfr_exp(r12093, r12090, MPFR_RNDN);
        mpfr_sub(r12094, r12092, r12093, MPFR_RNDN);
        mpfr_mul(r12095, r12088, r12094, MPFR_RNDN);
        return mpfr_get_d(r12095, MPFR_RNDN);
}

static mpfr_t r12096, r12097, r12098, r12099, r12100, r12101, r12102, r12103, r12104, r12105, r12106, r12107, r12108, r12109, r12110, r12111, r12112, r12113, r12114, r12115, r12116, r12117, r12118, r12119, r12120, r12121, r12122, r12123, r12124, r12125, r12126, r12127, r12128, r12129, r12130, r12131, r12132, r12133, r12134, r12135, r12136;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12096);
        mpfr_init_set_str(r12097, "1/3", 10, MPFR_RNDN);
        mpfr_init(r12098);
        mpfr_init_set_str(r12099, "2", 10, MPFR_RNDN);
        mpfr_init(r12100);
        mpfr_init(r12101);
        mpfr_init(r12102);
        mpfr_init(r12103);
        mpfr_init(r12104);
        mpfr_init(r12105);
        mpfr_init_set_str(r12106, "1/6", 10, MPFR_RNDN);
        mpfr_init(r12107);
        mpfr_init_set_str(r12108, "1/72", 10, MPFR_RNDN);
        mpfr_init(r12109);
        mpfr_init_set_str(r12110, "4", 10, MPFR_RNDN);
        mpfr_init(r12111);
        mpfr_init(r12112);
        mpfr_init(r12113);
        mpfr_init(r12114);
        mpfr_init_set_str(r12115, "5", 10, MPFR_RNDN);
        mpfr_init(r12116);
        mpfr_init_set_str(r12117, "1/60", 10, MPFR_RNDN);
        mpfr_init(r12118);
        mpfr_init(r12119);
        mpfr_init(r12120);
        mpfr_init(r12121);
        mpfr_init_set_str(r12122, "0.5", 10, MPFR_RNDN);
        mpfr_init(r12123);
        mpfr_init(r12124);
        mpfr_init(r12125);
        mpfr_init_set_str(r12126, "0.13796459554497495", 10, MPFR_RNDN);
        mpfr_init(r12127);
        mpfr_init(r12128);
        mpfr_init(r12129);
        mpfr_init(r12130);
        mpfr_init(r12131);
        mpfr_init(r12132);
        mpfr_init(r12133);
        mpfr_init(r12134);
        mpfr_init(r12135);
        mpfr_init(r12136);
}

double f_fm(double re, double im) {
        mpfr_set_d(r12096, im, MPFR_RNDN);
        ;
        mpfr_mul(r12098, r12096, r12097, MPFR_RNDN);
        ;
        mpfr_fma(r12100, r12098, r12096, r12099, MPFR_RNDN);
        mpfr_sqrt(r12101, r12100, MPFR_RNDN);
        mpfr_mul(r12102, r12101, r12096, MPFR_RNDN);
        mpfr_mul(r12103, r12096, r12096, MPFR_RNDN);
        mpfr_sqrt(r12104, r12099, MPFR_RNDN);
        mpfr_div(r12105, r12103, r12104, MPFR_RNDN);
        ;
        mpfr_fma(r12107, r12105, r12106, r12104, MPFR_RNDN);
        ;
        mpfr_div(r12109, r12108, r12099, MPFR_RNDN);
        ;
        mpfr_pow(r12111, r12096, r12110, MPFR_RNDN);
        mpfr_mul(r12112, r12109, r12111, MPFR_RNDN);
        mpfr_div(r12113, r12112, r12104, MPFR_RNDN);
        mpfr_sub(r12114, r12107, r12113, MPFR_RNDN);
        ;
        mpfr_pow(r12116, r12096, r12115, MPFR_RNDN);
        ;
        mpfr_mul(r12118, r12116, r12117, MPFR_RNDN);
        mpfr_fma(r12119, r12102, r12114, r12118, MPFR_RNDN);
        mpfr_set_d(r12120, re, MPFR_RNDN);
        mpfr_cos(r12121, r12120, MPFR_RNDN);
        ;
        mpfr_neg(r12123, r12122, MPFR_RNDN);
        mpfr_mul(r12124, r12121, r12123, MPFR_RNDN);
        mpfr_mul(r12125, r12119, r12124, MPFR_RNDN);
        ;
        mpfr_set_si(r12127, mpfr_cmp(r12125, r12126) <= 0, MPFR_RNDN);
        mpfr_fma(r12128, r12096, r12098, r12099, MPFR_RNDN);
        mpfr_fma(r12129, r12096, r12128, r12118, MPFR_RNDN);
        mpfr_mul(r12130, r12129, r12124, MPFR_RNDN);
        mpfr_exp(r12131, r12096, MPFR_RNDN);
        mpfr_div(r12132, r12121, r12131, MPFR_RNDN);
        mpfr_mul(r12133, r12121, r12131, MPFR_RNDN);
        mpfr_sub(r12134, r12132, r12133, MPFR_RNDN);
        mpfr_mul(r12135, r12134, r12122, MPFR_RNDN);
        if (mpfr_get_si(r12127, MPFR_RNDN)) { mpfr_set(r12136, r12130, MPFR_RNDN); } else { mpfr_set(r12136, r12135, MPFR_RNDN); };
        return mpfr_get_d(r12136, MPFR_RNDN);
}

static mpfr_t r12137, r12138, r12139, r12140, r12141, r12142, r12143, r12144, r12145, r12146, r12147, r12148, r12149, r12150, r12151, r12152, r12153, r12154, r12155, r12156, r12157, r12158, r12159, r12160, r12161, r12162, r12163, r12164, r12165, r12166, r12167, r12168, r12169, r12170, r12171, r12172, r12173, r12174, r12175, r12176, r12177;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r12137);
        mpfr_init_set_str(r12138, "1/3", 10, MPFR_RNDN);
        mpfr_init(r12139);
        mpfr_init_set_str(r12140, "2", 10, MPFR_RNDN);
        mpfr_init(r12141);
        mpfr_init(r12142);
        mpfr_init(r12143);
        mpfr_init(r12144);
        mpfr_init(r12145);
        mpfr_init(r12146);
        mpfr_init_set_str(r12147, "1/6", 10, MPFR_RNDN);
        mpfr_init(r12148);
        mpfr_init_set_str(r12149, "1/72", 10, MPFR_RNDN);
        mpfr_init(r12150);
        mpfr_init_set_str(r12151, "4", 10, MPFR_RNDN);
        mpfr_init(r12152);
        mpfr_init(r12153);
        mpfr_init(r12154);
        mpfr_init(r12155);
        mpfr_init_set_str(r12156, "5", 10, MPFR_RNDN);
        mpfr_init(r12157);
        mpfr_init_set_str(r12158, "1/60", 10, MPFR_RNDN);
        mpfr_init(r12159);
        mpfr_init(r12160);
        mpfr_init(r12161);
        mpfr_init(r12162);
        mpfr_init_set_str(r12163, "0.5", 10, MPFR_RNDN);
        mpfr_init(r12164);
        mpfr_init(r12165);
        mpfr_init(r12166);
        mpfr_init_set_str(r12167, "0.13796459554497495", 10, MPFR_RNDN);
        mpfr_init(r12168);
        mpfr_init(r12169);
        mpfr_init(r12170);
        mpfr_init(r12171);
        mpfr_init(r12172);
        mpfr_init(r12173);
        mpfr_init(r12174);
        mpfr_init(r12175);
        mpfr_init(r12176);
        mpfr_init(r12177);
}

double f_dm(double re, double im) {
        mpfr_set_d(r12137, im, MPFR_RNDN);
        ;
        mpfr_mul(r12139, r12137, r12138, MPFR_RNDN);
        ;
        mpfr_fma(r12141, r12139, r12137, r12140, MPFR_RNDN);
        mpfr_sqrt(r12142, r12141, MPFR_RNDN);
        mpfr_mul(r12143, r12142, r12137, MPFR_RNDN);
        mpfr_mul(r12144, r12137, r12137, MPFR_RNDN);
        mpfr_sqrt(r12145, r12140, MPFR_RNDN);
        mpfr_div(r12146, r12144, r12145, MPFR_RNDN);
        ;
        mpfr_fma(r12148, r12146, r12147, r12145, MPFR_RNDN);
        ;
        mpfr_div(r12150, r12149, r12140, MPFR_RNDN);
        ;
        mpfr_pow(r12152, r12137, r12151, MPFR_RNDN);
        mpfr_mul(r12153, r12150, r12152, MPFR_RNDN);
        mpfr_div(r12154, r12153, r12145, MPFR_RNDN);
        mpfr_sub(r12155, r12148, r12154, MPFR_RNDN);
        ;
        mpfr_pow(r12157, r12137, r12156, MPFR_RNDN);
        ;
        mpfr_mul(r12159, r12157, r12158, MPFR_RNDN);
        mpfr_fma(r12160, r12143, r12155, r12159, MPFR_RNDN);
        mpfr_set_d(r12161, re, MPFR_RNDN);
        mpfr_cos(r12162, r12161, MPFR_RNDN);
        ;
        mpfr_neg(r12164, r12163, MPFR_RNDN);
        mpfr_mul(r12165, r12162, r12164, MPFR_RNDN);
        mpfr_mul(r12166, r12160, r12165, MPFR_RNDN);
        ;
        mpfr_set_si(r12168, mpfr_cmp(r12166, r12167) <= 0, MPFR_RNDN);
        mpfr_fma(r12169, r12137, r12139, r12140, MPFR_RNDN);
        mpfr_fma(r12170, r12137, r12169, r12159, MPFR_RNDN);
        mpfr_mul(r12171, r12170, r12165, MPFR_RNDN);
        mpfr_exp(r12172, r12137, MPFR_RNDN);
        mpfr_div(r12173, r12162, r12172, MPFR_RNDN);
        mpfr_mul(r12174, r12162, r12172, MPFR_RNDN);
        mpfr_sub(r12175, r12173, r12174, MPFR_RNDN);
        mpfr_mul(r12176, r12175, r12163, MPFR_RNDN);
        if (mpfr_get_si(r12168, MPFR_RNDN)) { mpfr_set(r12177, r12171, MPFR_RNDN); } else { mpfr_set(r12177, r12176, MPFR_RNDN); };
        return mpfr_get_d(r12177, MPFR_RNDN);
}

