#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 r11860 = 0.5;
        float r11861 = re;
        float r11862 = cos(r11861);
        float r11863 = r11860 * r11862;
        float r11864 = 0;
        float r11865 = im;
        float r11866 = r11864 - r11865;
        float r11867 = exp(r11866);
        float r11868 = exp(r11865);
        float r11869 = r11867 - r11868;
        float r11870 = r11863 * r11869;
        return r11870;
}

double f_id(double re, double im) {
        double r11871 = 0.5;
        double r11872 = re;
        double r11873 = cos(r11872);
        double r11874 = r11871 * r11873;
        double r11875 = 0;
        double r11876 = im;
        double r11877 = r11875 - r11876;
        double r11878 = exp(r11877);
        double r11879 = exp(r11876);
        double r11880 = r11878 - r11879;
        double r11881 = r11874 * r11880;
        return r11881;
}


double f_of(float re, float im) {
        float r11882 = im;
        float r11883 = 1/3;
        float r11884 = r11882 * r11882;
        float r11885 = 2;
        float r11886 = fma(r11883, r11884, r11885);
        float r11887 = 5;
        float r11888 = pow(r11882, r11887);
        float r11889 = 1/60;
        float r11890 = r11888 * r11889;
        float r11891 = fma(r11882, r11886, r11890);
        float r11892 = re;
        float r11893 = cos(r11892);
        float r11894 = 0.5;
        float r11895 = -r11894;
        float r11896 = r11893 * r11895;
        float r11897 = r11891 * r11896;
        return r11897;
}

double f_od(double re, double im) {
        double r11898 = im;
        double r11899 = 1/3;
        double r11900 = r11898 * r11898;
        double r11901 = 2;
        double r11902 = fma(r11899, r11900, r11901);
        double r11903 = 5;
        double r11904 = pow(r11898, r11903);
        double r11905 = 1/60;
        double r11906 = r11904 * r11905;
        double r11907 = fma(r11898, r11902, r11906);
        double r11908 = re;
        double r11909 = cos(r11908);
        double r11910 = 0.5;
        double r11911 = -r11910;
        double r11912 = r11909 * r11911;
        double r11913 = r11907 * r11912;
        return r11913;
}

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 r11914, r11915, r11916, r11917, r11918, r11919, r11920, r11921, r11922, r11923, r11924;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r11914, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11915);
        mpfr_init(r11916);
        mpfr_init(r11917);
        mpfr_init_set_str(r11918, "0", 10, MPFR_RNDN);
        mpfr_init(r11919);
        mpfr_init(r11920);
        mpfr_init(r11921);
        mpfr_init(r11922);
        mpfr_init(r11923);
        mpfr_init(r11924);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r11915, re, MPFR_RNDN);
        mpfr_cos(r11916, r11915, MPFR_RNDN);
        mpfr_mul(r11917, r11914, r11916, MPFR_RNDN);
        ;
        mpfr_set_d(r11919, im, MPFR_RNDN);
        mpfr_sub(r11920, r11918, r11919, MPFR_RNDN);
        mpfr_exp(r11921, r11920, MPFR_RNDN);
        mpfr_exp(r11922, r11919, MPFR_RNDN);
        mpfr_sub(r11923, r11921, r11922, MPFR_RNDN);
        mpfr_mul(r11924, r11917, r11923, MPFR_RNDN);
        return mpfr_get_d(r11924, MPFR_RNDN);
}

static mpfr_t r11925, r11926, r11927, r11928, r11929, r11930, r11931, r11932, r11933, r11934, r11935, r11936, r11937, r11938, r11939, r11940;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11925);
        mpfr_init_set_str(r11926, "1/3", 10, MPFR_RNDN);
        mpfr_init(r11927);
        mpfr_init_set_str(r11928, "2", 10, MPFR_RNDN);
        mpfr_init(r11929);
        mpfr_init_set_str(r11930, "5", 10, MPFR_RNDN);
        mpfr_init(r11931);
        mpfr_init_set_str(r11932, "1/60", 10, MPFR_RNDN);
        mpfr_init(r11933);
        mpfr_init(r11934);
        mpfr_init(r11935);
        mpfr_init(r11936);
        mpfr_init_set_str(r11937, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11938);
        mpfr_init(r11939);
        mpfr_init(r11940);
}

double f_fm(double re, double im) {
        mpfr_set_d(r11925, im, MPFR_RNDN);
        ;
        mpfr_mul(r11927, r11925, r11925, MPFR_RNDN);
        ;
        mpfr_fma(r11929, r11926, r11927, r11928, MPFR_RNDN);
        ;
        mpfr_pow(r11931, r11925, r11930, MPFR_RNDN);
        ;
        mpfr_mul(r11933, r11931, r11932, MPFR_RNDN);
        mpfr_fma(r11934, r11925, r11929, r11933, MPFR_RNDN);
        mpfr_set_d(r11935, re, MPFR_RNDN);
        mpfr_cos(r11936, r11935, MPFR_RNDN);
        ;
        mpfr_neg(r11938, r11937, MPFR_RNDN);
        mpfr_mul(r11939, r11936, r11938, MPFR_RNDN);
        mpfr_mul(r11940, r11934, r11939, MPFR_RNDN);
        return mpfr_get_d(r11940, MPFR_RNDN);
}

static mpfr_t r11941, r11942, r11943, r11944, r11945, r11946, r11947, r11948, r11949, r11950, r11951, r11952, r11953, r11954, r11955, r11956;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11941);
        mpfr_init_set_str(r11942, "1/3", 10, MPFR_RNDN);
        mpfr_init(r11943);
        mpfr_init_set_str(r11944, "2", 10, MPFR_RNDN);
        mpfr_init(r11945);
        mpfr_init_set_str(r11946, "5", 10, MPFR_RNDN);
        mpfr_init(r11947);
        mpfr_init_set_str(r11948, "1/60", 10, MPFR_RNDN);
        mpfr_init(r11949);
        mpfr_init(r11950);
        mpfr_init(r11951);
        mpfr_init(r11952);
        mpfr_init_set_str(r11953, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11954);
        mpfr_init(r11955);
        mpfr_init(r11956);
}

double f_dm(double re, double im) {
        mpfr_set_d(r11941, im, MPFR_RNDN);
        ;
        mpfr_mul(r11943, r11941, r11941, MPFR_RNDN);
        ;
        mpfr_fma(r11945, r11942, r11943, r11944, MPFR_RNDN);
        ;
        mpfr_pow(r11947, r11941, r11946, MPFR_RNDN);
        ;
        mpfr_mul(r11949, r11947, r11948, MPFR_RNDN);
        mpfr_fma(r11950, r11941, r11945, r11949, MPFR_RNDN);
        mpfr_set_d(r11951, re, MPFR_RNDN);
        mpfr_cos(r11952, r11951, MPFR_RNDN);
        ;
        mpfr_neg(r11954, r11953, MPFR_RNDN);
        mpfr_mul(r11955, r11952, r11954, MPFR_RNDN);
        mpfr_mul(r11956, r11950, r11955, MPFR_RNDN);
        return mpfr_get_d(r11956, MPFR_RNDN);
}

