#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 r27962 = 0.5;
        float r27963 = re;
        float r27964 = cos(r27963);
        float r27965 = r27962 * r27964;
        float r27966 = 0;
        float r27967 = im;
        float r27968 = r27966 - r27967;
        float r27969 = exp(r27968);
        float r27970 = exp(r27967);
        float r27971 = r27969 - r27970;
        float r27972 = r27965 * r27971;
        return r27972;
}

double f_id(double re, double im) {
        double r27973 = 0.5;
        double r27974 = re;
        double r27975 = cos(r27974);
        double r27976 = r27973 * r27975;
        double r27977 = 0;
        double r27978 = im;
        double r27979 = r27977 - r27978;
        double r27980 = exp(r27979);
        double r27981 = exp(r27978);
        double r27982 = r27980 - r27981;
        double r27983 = r27976 * r27982;
        return r27983;
}


double f_of(float re, float im) {
        float r27984 = 0.5;
        float r27985 = re;
        float r27986 = cos(r27985);
        float r27987 = r27984 * r27986;
        float r27988 = 1/60;
        float r27989 = im;
        float r27990 = 5;
        float r27991 = pow(r27989, r27990);
        float r27992 = r27988 * r27991;
        float r27993 = 2;
        float r27994 = r27993 * r27989;
        float r27995 = 1/3;
        float r27996 = 3;
        float r27997 = pow(r27989, r27996);
        float r27998 = r27995 * r27997;
        float r27999 = r27994 + r27998;
        float r28000 = r27992 + r27999;
        float r28001 = -r28000;
        float r28002 = r27987 * r28001;
        return r28002;
}

double f_od(double re, double im) {
        double r28003 = 0.5;
        double r28004 = re;
        double r28005 = cos(r28004);
        double r28006 = r28003 * r28005;
        double r28007 = 1/60;
        double r28008 = im;
        double r28009 = 5;
        double r28010 = pow(r28008, r28009);
        double r28011 = r28007 * r28010;
        double r28012 = 2;
        double r28013 = r28012 * r28008;
        double r28014 = 1/3;
        double r28015 = 3;
        double r28016 = pow(r28008, r28015);
        double r28017 = r28014 * r28016;
        double r28018 = r28013 + r28017;
        double r28019 = r28011 + r28018;
        double r28020 = -r28019;
        double r28021 = r28006 * r28020;
        return r28021;
}

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 r28022, r28023, r28024, r28025, r28026, r28027, r28028, r28029, r28030, r28031, r28032;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28022, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28023);
        mpfr_init(r28024);
        mpfr_init(r28025);
        mpfr_init_set_str(r28026, "0", 10, MPFR_RNDN);
        mpfr_init(r28027);
        mpfr_init(r28028);
        mpfr_init(r28029);
        mpfr_init(r28030);
        mpfr_init(r28031);
        mpfr_init(r28032);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r28023, re, MPFR_RNDN);
        mpfr_cos(r28024, r28023, MPFR_RNDN);
        mpfr_mul(r28025, r28022, r28024, MPFR_RNDN);
        ;
        mpfr_set_d(r28027, im, MPFR_RNDN);
        mpfr_sub(r28028, r28026, r28027, MPFR_RNDN);
        mpfr_exp(r28029, r28028, MPFR_RNDN);
        mpfr_exp(r28030, r28027, MPFR_RNDN);
        mpfr_sub(r28031, r28029, r28030, MPFR_RNDN);
        mpfr_mul(r28032, r28025, r28031, MPFR_RNDN);
        return mpfr_get_d(r28032, MPFR_RNDN);
}

static mpfr_t r28033, r28034, r28035, r28036, r28037, r28038, r28039, r28040, r28041, r28042, r28043, r28044, r28045, r28046, r28047, r28048, r28049, r28050, r28051;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28033, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28034);
        mpfr_init(r28035);
        mpfr_init(r28036);
        mpfr_init_set_str(r28037, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28038);
        mpfr_init_set_str(r28039, "5", 10, MPFR_RNDN);
        mpfr_init(r28040);
        mpfr_init(r28041);
        mpfr_init_set_str(r28042, "2", 10, MPFR_RNDN);
        mpfr_init(r28043);
        mpfr_init_set_str(r28044, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r28045, "3", 10, MPFR_RNDN);
        mpfr_init(r28046);
        mpfr_init(r28047);
        mpfr_init(r28048);
        mpfr_init(r28049);
        mpfr_init(r28050);
        mpfr_init(r28051);
}

double f_fm(double re, double im) {
        ;
        mpfr_set_d(r28034, re, MPFR_RNDN);
        mpfr_cos(r28035, r28034, MPFR_RNDN);
        mpfr_mul(r28036, r28033, r28035, MPFR_RNDN);
        ;
        mpfr_set_d(r28038, im, MPFR_RNDN);
        ;
        mpfr_pow(r28040, r28038, r28039, MPFR_RNDN);
        mpfr_mul(r28041, r28037, r28040, MPFR_RNDN);
        ;
        mpfr_mul(r28043, r28042, r28038, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28046, r28038, r28045, MPFR_RNDN);
        mpfr_mul(r28047, r28044, r28046, MPFR_RNDN);
        mpfr_add(r28048, r28043, r28047, MPFR_RNDN);
        mpfr_add(r28049, r28041, r28048, MPFR_RNDN);
        mpfr_neg(r28050, r28049, MPFR_RNDN);
        mpfr_mul(r28051, r28036, r28050, MPFR_RNDN);
        return mpfr_get_d(r28051, MPFR_RNDN);
}

static mpfr_t r28052, r28053, r28054, r28055, r28056, r28057, r28058, r28059, r28060, r28061, r28062, r28063, r28064, r28065, r28066, r28067, r28068, r28069, r28070;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28052, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28053);
        mpfr_init(r28054);
        mpfr_init(r28055);
        mpfr_init_set_str(r28056, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28057);
        mpfr_init_set_str(r28058, "5", 10, MPFR_RNDN);
        mpfr_init(r28059);
        mpfr_init(r28060);
        mpfr_init_set_str(r28061, "2", 10, MPFR_RNDN);
        mpfr_init(r28062);
        mpfr_init_set_str(r28063, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r28064, "3", 10, MPFR_RNDN);
        mpfr_init(r28065);
        mpfr_init(r28066);
        mpfr_init(r28067);
        mpfr_init(r28068);
        mpfr_init(r28069);
        mpfr_init(r28070);
}

double f_dm(double re, double im) {
        ;
        mpfr_set_d(r28053, re, MPFR_RNDN);
        mpfr_cos(r28054, r28053, MPFR_RNDN);
        mpfr_mul(r28055, r28052, r28054, MPFR_RNDN);
        ;
        mpfr_set_d(r28057, im, MPFR_RNDN);
        ;
        mpfr_pow(r28059, r28057, r28058, MPFR_RNDN);
        mpfr_mul(r28060, r28056, r28059, MPFR_RNDN);
        ;
        mpfr_mul(r28062, r28061, r28057, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28065, r28057, r28064, MPFR_RNDN);
        mpfr_mul(r28066, r28063, r28065, MPFR_RNDN);
        mpfr_add(r28067, r28062, r28066, MPFR_RNDN);
        mpfr_add(r28068, r28060, r28067, MPFR_RNDN);
        mpfr_neg(r28069, r28068, MPFR_RNDN);
        mpfr_mul(r28070, r28055, r28069, MPFR_RNDN);
        return mpfr_get_d(r28070, MPFR_RNDN);
}

