#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 r27913 = 0.5;
        float r27914 = re;
        float r27915 = cos(r27914);
        float r27916 = r27913 * r27915;
        float r27917 = 0;
        float r27918 = im;
        float r27919 = r27917 - r27918;
        float r27920 = exp(r27919);
        float r27921 = exp(r27918);
        float r27922 = r27920 - r27921;
        float r27923 = r27916 * r27922;
        return r27923;
}

double f_id(double re, double im) {
        double r27924 = 0.5;
        double r27925 = re;
        double r27926 = cos(r27925);
        double r27927 = r27924 * r27926;
        double r27928 = 0;
        double r27929 = im;
        double r27930 = r27928 - r27929;
        double r27931 = exp(r27930);
        double r27932 = exp(r27929);
        double r27933 = r27931 - r27932;
        double r27934 = r27927 * r27933;
        return r27934;
}


double f_of(float re, float im) {
        float r27935 = im;
        float r27936 = 1/3;
        float r27937 = r27936 * r27935;
        float r27938 = 2;
        float r27939 = fma(r27937, r27935, r27938);
        float r27940 = 5;
        float r27941 = pow(r27935, r27940);
        float r27942 = 1/60;
        float r27943 = r27941 * r27942;
        float r27944 = fma(r27935, r27939, r27943);
        float r27945 = re;
        float r27946 = cos(r27945);
        float r27947 = 0.5;
        float r27948 = -r27947;
        float r27949 = r27946 * r27948;
        float r27950 = r27944 * r27949;
        return r27950;
}

double f_od(double re, double im) {
        double r27951 = im;
        double r27952 = 1/3;
        double r27953 = r27952 * r27951;
        double r27954 = 2;
        double r27955 = fma(r27953, r27951, r27954);
        double r27956 = 5;
        double r27957 = pow(r27951, r27956);
        double r27958 = 1/60;
        double r27959 = r27957 * r27958;
        double r27960 = fma(r27951, r27955, r27959);
        double r27961 = re;
        double r27962 = cos(r27961);
        double r27963 = 0.5;
        double r27964 = -r27963;
        double r27965 = r27962 * r27964;
        double r27966 = r27960 * r27965;
        return r27966;
}

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 r27967, r27968, r27969, r27970, r27971, r27972, r27973, r27974, r27975, r27976, r27977;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r27967, "0.5", 10, MPFR_RNDN);
        mpfr_init(r27968);
        mpfr_init(r27969);
        mpfr_init(r27970);
        mpfr_init_set_str(r27971, "0", 10, MPFR_RNDN);
        mpfr_init(r27972);
        mpfr_init(r27973);
        mpfr_init(r27974);
        mpfr_init(r27975);
        mpfr_init(r27976);
        mpfr_init(r27977);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r27968, re, MPFR_RNDN);
        mpfr_cos(r27969, r27968, MPFR_RNDN);
        mpfr_mul(r27970, r27967, r27969, MPFR_RNDN);
        ;
        mpfr_set_d(r27972, im, MPFR_RNDN);
        mpfr_sub(r27973, r27971, r27972, MPFR_RNDN);
        mpfr_exp(r27974, r27973, MPFR_RNDN);
        mpfr_exp(r27975, r27972, MPFR_RNDN);
        mpfr_sub(r27976, r27974, r27975, MPFR_RNDN);
        mpfr_mul(r27977, r27970, r27976, MPFR_RNDN);
        return mpfr_get_d(r27977, MPFR_RNDN);
}

static mpfr_t r27978, r27979, r27980, r27981, r27982, r27983, r27984, r27985, r27986, r27987, r27988, r27989, r27990, r27991, r27992, r27993;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27978);
        mpfr_init_set_str(r27979, "1/3", 10, MPFR_RNDN);
        mpfr_init(r27980);
        mpfr_init_set_str(r27981, "2", 10, MPFR_RNDN);
        mpfr_init(r27982);
        mpfr_init_set_str(r27983, "5", 10, MPFR_RNDN);
        mpfr_init(r27984);
        mpfr_init_set_str(r27985, "1/60", 10, MPFR_RNDN);
        mpfr_init(r27986);
        mpfr_init(r27987);
        mpfr_init(r27988);
        mpfr_init(r27989);
        mpfr_init_set_str(r27990, "0.5", 10, MPFR_RNDN);
        mpfr_init(r27991);
        mpfr_init(r27992);
        mpfr_init(r27993);
}

double f_fm(double re, double im) {
        mpfr_set_d(r27978, im, MPFR_RNDN);
        ;
        mpfr_mul(r27980, r27979, r27978, MPFR_RNDN);
        ;
        mpfr_fma(r27982, r27980, r27978, r27981, MPFR_RNDN);
        ;
        mpfr_pow(r27984, r27978, r27983, MPFR_RNDN);
        ;
        mpfr_mul(r27986, r27984, r27985, MPFR_RNDN);
        mpfr_fma(r27987, r27978, r27982, r27986, MPFR_RNDN);
        mpfr_set_d(r27988, re, MPFR_RNDN);
        mpfr_cos(r27989, r27988, MPFR_RNDN);
        ;
        mpfr_neg(r27991, r27990, MPFR_RNDN);
        mpfr_mul(r27992, r27989, r27991, MPFR_RNDN);
        mpfr_mul(r27993, r27987, r27992, MPFR_RNDN);
        return mpfr_get_d(r27993, MPFR_RNDN);
}

static mpfr_t r27994, r27995, r27996, r27997, r27998, r27999, r28000, r28001, r28002, r28003, r28004, r28005, r28006, r28007, r28008, r28009;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27994);
        mpfr_init_set_str(r27995, "1/3", 10, MPFR_RNDN);
        mpfr_init(r27996);
        mpfr_init_set_str(r27997, "2", 10, MPFR_RNDN);
        mpfr_init(r27998);
        mpfr_init_set_str(r27999, "5", 10, MPFR_RNDN);
        mpfr_init(r28000);
        mpfr_init_set_str(r28001, "1/60", 10, MPFR_RNDN);
        mpfr_init(r28002);
        mpfr_init(r28003);
        mpfr_init(r28004);
        mpfr_init(r28005);
        mpfr_init_set_str(r28006, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28007);
        mpfr_init(r28008);
        mpfr_init(r28009);
}

double f_dm(double re, double im) {
        mpfr_set_d(r27994, im, MPFR_RNDN);
        ;
        mpfr_mul(r27996, r27995, r27994, MPFR_RNDN);
        ;
        mpfr_fma(r27998, r27996, r27994, r27997, MPFR_RNDN);
        ;
        mpfr_pow(r28000, r27994, r27999, MPFR_RNDN);
        ;
        mpfr_mul(r28002, r28000, r28001, MPFR_RNDN);
        mpfr_fma(r28003, r27994, r27998, r28002, MPFR_RNDN);
        mpfr_set_d(r28004, re, MPFR_RNDN);
        mpfr_cos(r28005, r28004, MPFR_RNDN);
        ;
        mpfr_neg(r28007, r28006, MPFR_RNDN);
        mpfr_mul(r28008, r28005, r28007, MPFR_RNDN);
        mpfr_mul(r28009, r28003, r28008, MPFR_RNDN);
        return mpfr_get_d(r28009, MPFR_RNDN);
}

