#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "math.sin on complex, real part";

double f_if(float re, float im) {
        float r8856 = 0.5;
        float r8857 = re;
        float r8858 = sin(r8857);
        float r8859 = r8856 * r8858;
        float r8860 = 0;
        float r8861 = im;
        float r8862 = r8860 - r8861;
        float r8863 = exp(r8862);
        float r8864 = exp(r8861);
        float r8865 = r8863 + r8864;
        float r8866 = r8859 * r8865;
        return r8866;
}

double f_id(double re, double im) {
        double r8867 = 0.5;
        double r8868 = re;
        double r8869 = sin(r8868);
        double r8870 = r8867 * r8869;
        double r8871 = 0;
        double r8872 = im;
        double r8873 = r8871 - r8872;
        double r8874 = exp(r8873);
        double r8875 = exp(r8872);
        double r8876 = r8874 + r8875;
        double r8877 = r8870 * r8876;
        return r8877;
}


double f_of(float re, float im) {
        float r8878 = im;
        float r8879 = exp(r8878);
        float r8880 = -r8878;
        float r8881 = exp(r8880);
        float r8882 = r8879 + r8881;
        float r8883 = 0.5;
        float r8884 = re;
        float r8885 = sin(r8884);
        float r8886 = r8883 * r8885;
        float r8887 = r8882 * r8886;
        return r8887;
}

double f_od(double re, double im) {
        double r8888 = im;
        double r8889 = exp(r8888);
        double r8890 = -r8888;
        double r8891 = exp(r8890);
        double r8892 = r8889 + r8891;
        double r8893 = 0.5;
        double r8894 = re;
        double r8895 = sin(r8894);
        double r8896 = r8893 * r8895;
        double r8897 = r8892 * r8896;
        return r8897;
}

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 r8898, r8899, r8900, r8901, r8902, r8903, r8904, r8905, r8906, r8907, r8908;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8898, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8899);
        mpfr_init(r8900);
        mpfr_init(r8901);
        mpfr_init_set_str(r8902, "0", 10, MPFR_RNDN);
        mpfr_init(r8903);
        mpfr_init(r8904);
        mpfr_init(r8905);
        mpfr_init(r8906);
        mpfr_init(r8907);
        mpfr_init(r8908);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r8899, re, MPFR_RNDN);
        mpfr_sin(r8900, r8899, MPFR_RNDN);
        mpfr_mul(r8901, r8898, r8900, MPFR_RNDN);
        ;
        mpfr_set_d(r8903, im, MPFR_RNDN);
        mpfr_sub(r8904, r8902, r8903, MPFR_RNDN);
        mpfr_exp(r8905, r8904, MPFR_RNDN);
        mpfr_exp(r8906, r8903, MPFR_RNDN);
        mpfr_add(r8907, r8905, r8906, MPFR_RNDN);
        mpfr_mul(r8908, r8901, r8907, MPFR_RNDN);
        return mpfr_get_d(r8908, MPFR_RNDN);
}

static mpfr_t r8909, r8910, r8911, r8912, r8913, r8914, r8915, r8916, r8917, r8918;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r8909);
        mpfr_init(r8910);
        mpfr_init(r8911);
        mpfr_init(r8912);
        mpfr_init(r8913);
        mpfr_init_set_str(r8914, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8915);
        mpfr_init(r8916);
        mpfr_init(r8917);
        mpfr_init(r8918);
}

double f_fm(double re, double im) {
        mpfr_set_d(r8909, im, MPFR_RNDN);
        mpfr_exp(r8910, r8909, MPFR_RNDN);
        mpfr_neg(r8911, r8909, MPFR_RNDN);
        mpfr_exp(r8912, r8911, MPFR_RNDN);
        mpfr_add(r8913, r8910, r8912, MPFR_RNDN);
        ;
        mpfr_set_d(r8915, re, MPFR_RNDN);
        mpfr_sin(r8916, r8915, MPFR_RNDN);
        mpfr_mul(r8917, r8914, r8916, MPFR_RNDN);
        mpfr_mul(r8918, r8913, r8917, MPFR_RNDN);
        return mpfr_get_d(r8918, MPFR_RNDN);
}

static mpfr_t r8919, r8920, r8921, r8922, r8923, r8924, r8925, r8926, r8927, r8928;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r8919);
        mpfr_init(r8920);
        mpfr_init(r8921);
        mpfr_init(r8922);
        mpfr_init(r8923);
        mpfr_init_set_str(r8924, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8925);
        mpfr_init(r8926);
        mpfr_init(r8927);
        mpfr_init(r8928);
}

double f_dm(double re, double im) {
        mpfr_set_d(r8919, im, MPFR_RNDN);
        mpfr_exp(r8920, r8919, MPFR_RNDN);
        mpfr_neg(r8921, r8919, MPFR_RNDN);
        mpfr_exp(r8922, r8921, MPFR_RNDN);
        mpfr_add(r8923, r8920, r8922, MPFR_RNDN);
        ;
        mpfr_set_d(r8925, re, MPFR_RNDN);
        mpfr_sin(r8926, r8925, MPFR_RNDN);
        mpfr_mul(r8927, r8924, r8926, MPFR_RNDN);
        mpfr_mul(r8928, r8923, r8927, MPFR_RNDN);
        return mpfr_get_d(r8928, MPFR_RNDN);
}

