#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 r27946 = 0.5;
        float r27947 = re;
        float r27948 = sin(r27947);
        float r27949 = r27946 * r27948;
        float r27950 = im;
        float r27951 = -r27950;
        float r27952 = exp(r27951);
        float r27953 = exp(r27950);
        float r27954 = r27952 - r27953;
        float r27955 = r27949 * r27954;
        return r27955;
}

double f_id(double re, double im) {
        double r27956 = 0.5;
        double r27957 = re;
        double r27958 = sin(r27957);
        double r27959 = r27956 * r27958;
        double r27960 = im;
        double r27961 = -r27960;
        double r27962 = exp(r27961);
        double r27963 = exp(r27960);
        double r27964 = r27962 - r27963;
        double r27965 = r27959 * r27964;
        return r27965;
}


double f_of(float re, float im) {
        float r27966 = re;
        float r27967 = sin(r27966);
        float r27968 = -r27967;
        float r27969 = im;
        float r27970 = r27969 * r27969;
        float r27971 = 0.16666666666666666;
        float r27972 = r27969 * r27971;
        float r27973 = r27970 * r27972;
        float r27974 = 0.008333333333333333;
        float r27975 = 5;
        float r27976 = pow(r27969, r27975);
        float r27977 = 1.0;
        float r27978 = r27969 * r27977;
        float r27979 = fma(r27974, r27976, r27978);
        float r27980 = r27968 * r27979;
        float r27981 = fma(r27968, r27973, r27980);
        return r27981;
}

double f_od(double re, double im) {
        double r27982 = re;
        double r27983 = sin(r27982);
        double r27984 = -r27983;
        double r27985 = im;
        double r27986 = r27985 * r27985;
        double r27987 = 0.16666666666666666;
        double r27988 = r27985 * r27987;
        double r27989 = r27986 * r27988;
        double r27990 = 0.008333333333333333;
        double r27991 = 5;
        double r27992 = pow(r27985, r27991);
        double r27993 = 1.0;
        double r27994 = r27985 * r27993;
        double r27995 = fma(r27990, r27992, r27994);
        double r27996 = r27984 * r27995;
        double r27997 = fma(r27984, r27989, r27996);
        return r27997;
}

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 r27998, r27999, r28000, r28001, r28002, r28003, r28004, r28005, r28006, r28007;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r27998, "0.5", 10, MPFR_RNDN);
        mpfr_init(r27999);
        mpfr_init(r28000);
        mpfr_init(r28001);
        mpfr_init(r28002);
        mpfr_init(r28003);
        mpfr_init(r28004);
        mpfr_init(r28005);
        mpfr_init(r28006);
        mpfr_init(r28007);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r27999, re, MPFR_RNDN);
        mpfr_sin(r28000, r27999, MPFR_RNDN);
        mpfr_mul(r28001, r27998, r28000, MPFR_RNDN);
        mpfr_set_d(r28002, im, MPFR_RNDN);
        mpfr_neg(r28003, r28002, MPFR_RNDN);
        mpfr_exp(r28004, r28003, MPFR_RNDN);
        mpfr_exp(r28005, r28002, MPFR_RNDN);
        mpfr_sub(r28006, r28004, r28005, MPFR_RNDN);
        mpfr_mul(r28007, r28001, r28006, MPFR_RNDN);
        return mpfr_get_d(r28007, MPFR_RNDN);
}

static mpfr_t r28008, r28009, r28010, r28011, r28012, r28013, r28014, r28015, r28016, r28017, r28018, r28019, r28020, r28021, r28022, r28023;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28008);
        mpfr_init(r28009);
        mpfr_init(r28010);
        mpfr_init(r28011);
        mpfr_init(r28012);
        mpfr_init_set_str(r28013, "0.16666666666666666", 10, MPFR_RNDN);
        mpfr_init(r28014);
        mpfr_init(r28015);
        mpfr_init_set_str(r28016, "0.008333333333333333", 10, MPFR_RNDN);
        mpfr_init_set_str(r28017, "5", 10, MPFR_RNDN);
        mpfr_init(r28018);
        mpfr_init_set_str(r28019, "1.0", 10, MPFR_RNDN);
        mpfr_init(r28020);
        mpfr_init(r28021);
        mpfr_init(r28022);
        mpfr_init(r28023);
}

double f_fm(double re, double im) {
        mpfr_set_d(r28008, re, MPFR_RNDN);
        mpfr_sin(r28009, r28008, MPFR_RNDN);
        mpfr_neg(r28010, r28009, MPFR_RNDN);
        mpfr_set_d(r28011, im, MPFR_RNDN);
        mpfr_mul(r28012, r28011, r28011, MPFR_RNDN);
        ;
        mpfr_mul(r28014, r28011, r28013, MPFR_RNDN);
        mpfr_mul(r28015, r28012, r28014, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28018, r28011, r28017, MPFR_RNDN);
        ;
        mpfr_mul(r28020, r28011, r28019, MPFR_RNDN);
        mpfr_fma(r28021, r28016, r28018, r28020, MPFR_RNDN);
        mpfr_mul(r28022, r28010, r28021, MPFR_RNDN);
        mpfr_fma(r28023, r28010, r28015, r28022, MPFR_RNDN);
        return mpfr_get_d(r28023, MPFR_RNDN);
}

static mpfr_t r28024, r28025, r28026, r28027, r28028, r28029, r28030, r28031, r28032, r28033, r28034, r28035, r28036, r28037, r28038, r28039;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r28024);
        mpfr_init(r28025);
        mpfr_init(r28026);
        mpfr_init(r28027);
        mpfr_init(r28028);
        mpfr_init_set_str(r28029, "0.16666666666666666", 10, MPFR_RNDN);
        mpfr_init(r28030);
        mpfr_init(r28031);
        mpfr_init_set_str(r28032, "0.008333333333333333", 10, MPFR_RNDN);
        mpfr_init_set_str(r28033, "5", 10, MPFR_RNDN);
        mpfr_init(r28034);
        mpfr_init_set_str(r28035, "1.0", 10, MPFR_RNDN);
        mpfr_init(r28036);
        mpfr_init(r28037);
        mpfr_init(r28038);
        mpfr_init(r28039);
}

double f_dm(double re, double im) {
        mpfr_set_d(r28024, re, MPFR_RNDN);
        mpfr_sin(r28025, r28024, MPFR_RNDN);
        mpfr_neg(r28026, r28025, MPFR_RNDN);
        mpfr_set_d(r28027, im, MPFR_RNDN);
        mpfr_mul(r28028, r28027, r28027, MPFR_RNDN);
        ;
        mpfr_mul(r28030, r28027, r28029, MPFR_RNDN);
        mpfr_mul(r28031, r28028, r28030, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28034, r28027, r28033, MPFR_RNDN);
        ;
        mpfr_mul(r28036, r28027, r28035, MPFR_RNDN);
        mpfr_fma(r28037, r28032, r28034, r28036, MPFR_RNDN);
        mpfr_mul(r28038, r28026, r28037, MPFR_RNDN);
        mpfr_fma(r28039, r28026, r28031, r28038, MPFR_RNDN);
        return mpfr_get_d(r28039, MPFR_RNDN);
}

