#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 r27983 = 0.5;
        float r27984 = re;
        float r27985 = cos(r27984);
        float r27986 = r27983 * r27985;
        float r27987 = 0;
        float r27988 = im;
        float r27989 = r27987 - r27988;
        float r27990 = exp(r27989);
        float r27991 = exp(r27988);
        float r27992 = r27990 - r27991;
        float r27993 = r27986 * r27992;
        return r27993;
}

double f_id(double re, double im) {
        double r27994 = 0.5;
        double r27995 = re;
        double r27996 = cos(r27995);
        double r27997 = r27994 * r27996;
        double r27998 = 0;
        double r27999 = im;
        double r28000 = r27998 - r27999;
        double r28001 = exp(r28000);
        double r28002 = exp(r27999);
        double r28003 = r28001 - r28002;
        double r28004 = r27997 * r28003;
        return r28004;
}


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

double f_od(double re, double im) {
        double r28021 = im;
        double r28022 = 1/3;
        double r28023 = r28022 * r28021;
        double r28024 = 2;
        double r28025 = fma(r28023, r28021, r28024);
        double r28026 = 5;
        double r28027 = pow(r28021, r28026);
        double r28028 = 1/60;
        double r28029 = r28027 * r28028;
        double r28030 = fma(r28021, r28025, r28029);
        double r28031 = re;
        double r28032 = cos(r28031);
        double r28033 = 0.5;
        double r28034 = -r28033;
        double r28035 = r28032 * r28034;
        double r28036 = r28030 * r28035;
        return r28036;
}

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 r28037, r28038, r28039, r28040, r28041, r28042, r28043, r28044, r28045, r28046, r28047;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r28037, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28038);
        mpfr_init(r28039);
        mpfr_init(r28040);
        mpfr_init_set_str(r28041, "0", 10, MPFR_RNDN);
        mpfr_init(r28042);
        mpfr_init(r28043);
        mpfr_init(r28044);
        mpfr_init(r28045);
        mpfr_init(r28046);
        mpfr_init(r28047);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r28038, re, MPFR_RNDN);
        mpfr_cos(r28039, r28038, MPFR_RNDN);
        mpfr_mul(r28040, r28037, r28039, MPFR_RNDN);
        ;
        mpfr_set_d(r28042, im, MPFR_RNDN);
        mpfr_sub(r28043, r28041, r28042, MPFR_RNDN);
        mpfr_exp(r28044, r28043, MPFR_RNDN);
        mpfr_exp(r28045, r28042, MPFR_RNDN);
        mpfr_sub(r28046, r28044, r28045, MPFR_RNDN);
        mpfr_mul(r28047, r28040, r28046, MPFR_RNDN);
        return mpfr_get_d(r28047, MPFR_RNDN);
}

static mpfr_t r28048, r28049, r28050, r28051, r28052, r28053, r28054, r28055, r28056, r28057, r28058, r28059, r28060, r28061, r28062, r28063;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28048);
        mpfr_init_set_str(r28049, "1/3", 10, MPFR_RNDN);
        mpfr_init(r28050);
        mpfr_init_set_str(r28051, "2", 10, MPFR_RNDN);
        mpfr_init(r28052);
        mpfr_init_set_str(r28053, "5", 10, MPFR_RNDN);
        mpfr_init(r28054);
        mpfr_init_set_str(r28055, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28056);
        mpfr_init(r28057);
        mpfr_init(r28058);
        mpfr_init(r28059);
        mpfr_init_set_str(r28060, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28061);
        mpfr_init(r28062);
        mpfr_init(r28063);
}

double f_fm(double re, double im) {
        mpfr_set_d(r28048, im, MPFR_RNDN);
        ;
        mpfr_mul(r28050, r28049, r28048, MPFR_RNDN);
        ;
        mpfr_fma(r28052, r28050, r28048, r28051, MPFR_RNDN);
        ;
        mpfr_pow(r28054, r28048, r28053, MPFR_RNDN);
        ;
        mpfr_mul(r28056, r28054, r28055, MPFR_RNDN);
        mpfr_fma(r28057, r28048, r28052, r28056, MPFR_RNDN);
        mpfr_set_d(r28058, re, MPFR_RNDN);
        mpfr_cos(r28059, r28058, MPFR_RNDN);
        ;
        mpfr_neg(r28061, r28060, MPFR_RNDN);
        mpfr_mul(r28062, r28059, r28061, MPFR_RNDN);
        mpfr_mul(r28063, r28057, r28062, MPFR_RNDN);
        return mpfr_get_d(r28063, MPFR_RNDN);
}

static mpfr_t r28064, r28065, r28066, r28067, r28068, r28069, r28070, r28071, r28072, r28073, r28074, r28075, r28076, r28077, r28078, r28079;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28064);
        mpfr_init_set_str(r28065, "1/3", 10, MPFR_RNDN);
        mpfr_init(r28066);
        mpfr_init_set_str(r28067, "2", 10, MPFR_RNDN);
        mpfr_init(r28068);
        mpfr_init_set_str(r28069, "5", 10, MPFR_RNDN);
        mpfr_init(r28070);
        mpfr_init_set_str(r28071, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28072);
        mpfr_init(r28073);
        mpfr_init(r28074);
        mpfr_init(r28075);
        mpfr_init_set_str(r28076, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28077);
        mpfr_init(r28078);
        mpfr_init(r28079);
}

double f_dm(double re, double im) {
        mpfr_set_d(r28064, im, MPFR_RNDN);
        ;
        mpfr_mul(r28066, r28065, r28064, MPFR_RNDN);
        ;
        mpfr_fma(r28068, r28066, r28064, r28067, MPFR_RNDN);
        ;
        mpfr_pow(r28070, r28064, r28069, MPFR_RNDN);
        ;
        mpfr_mul(r28072, r28070, r28071, MPFR_RNDN);
        mpfr_fma(r28073, r28064, r28068, r28072, MPFR_RNDN);
        mpfr_set_d(r28074, re, MPFR_RNDN);
        mpfr_cos(r28075, r28074, MPFR_RNDN);
        ;
        mpfr_neg(r28077, r28076, MPFR_RNDN);
        mpfr_mul(r28078, r28075, r28077, MPFR_RNDN);
        mpfr_mul(r28079, r28073, r28078, MPFR_RNDN);
        return mpfr_get_d(r28079, MPFR_RNDN);
}

