#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 r27828 = 0.5;
        float r27829 = re;
        float r27830 = cos(r27829);
        float r27831 = r27828 * r27830;
        float r27832 = 0;
        float r27833 = im;
        float r27834 = r27832 - r27833;
        float r27835 = exp(r27834);
        float r27836 = exp(r27833);
        float r27837 = r27835 - r27836;
        float r27838 = r27831 * r27837;
        return r27838;
}

double f_id(double re, double im) {
        double r27839 = 0.5;
        double r27840 = re;
        double r27841 = cos(r27840);
        double r27842 = r27839 * r27841;
        double r27843 = 0;
        double r27844 = im;
        double r27845 = r27843 - r27844;
        double r27846 = exp(r27845);
        double r27847 = exp(r27844);
        double r27848 = r27846 - r27847;
        double r27849 = r27842 * r27848;
        return r27849;
}


double f_of(float re, float im) {
        float r27850 = im;
        float r27851 = 1/3;
        float r27852 = r27851 * r27850;
        float r27853 = 2;
        float r27854 = fma(r27852, r27850, r27853);
        float r27855 = 5;
        float r27856 = pow(r27850, r27855);
        float r27857 = 1/60;
        float r27858 = r27856 * r27857;
        float r27859 = fma(r27850, r27854, r27858);
        float r27860 = re;
        float r27861 = cos(r27860);
        float r27862 = 0.5;
        float r27863 = -r27862;
        float r27864 = r27861 * r27863;
        float r27865 = r27859 * r27864;
        return r27865;
}

double f_od(double re, double im) {
        double r27866 = im;
        double r27867 = 1/3;
        double r27868 = r27867 * r27866;
        double r27869 = 2;
        double r27870 = fma(r27868, r27866, r27869);
        double r27871 = 5;
        double r27872 = pow(r27866, r27871);
        double r27873 = 1/60;
        double r27874 = r27872 * r27873;
        double r27875 = fma(r27866, r27870, r27874);
        double r27876 = re;
        double r27877 = cos(r27876);
        double r27878 = 0.5;
        double r27879 = -r27878;
        double r27880 = r27877 * r27879;
        double r27881 = r27875 * r27880;
        return r27881;
}

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 r27882, r27883, r27884, r27885, r27886, r27887, r27888, r27889, r27890, r27891, r27892;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r27882, "0.5", 10, MPFR_RNDN);
        mpfr_init(r27883);
        mpfr_init(r27884);
        mpfr_init(r27885);
        mpfr_init_set_str(r27886, "0", 10, MPFR_RNDN);
        mpfr_init(r27887);
        mpfr_init(r27888);
        mpfr_init(r27889);
        mpfr_init(r27890);
        mpfr_init(r27891);
        mpfr_init(r27892);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r27883, re, MPFR_RNDN);
        mpfr_cos(r27884, r27883, MPFR_RNDN);
        mpfr_mul(r27885, r27882, r27884, MPFR_RNDN);
        ;
        mpfr_set_d(r27887, im, MPFR_RNDN);
        mpfr_sub(r27888, r27886, r27887, MPFR_RNDN);
        mpfr_exp(r27889, r27888, MPFR_RNDN);
        mpfr_exp(r27890, r27887, MPFR_RNDN);
        mpfr_sub(r27891, r27889, r27890, MPFR_RNDN);
        mpfr_mul(r27892, r27885, r27891, MPFR_RNDN);
        return mpfr_get_d(r27892, MPFR_RNDN);
}

static mpfr_t r27893, r27894, r27895, r27896, r27897, r27898, r27899, r27900, r27901, r27902, r27903, r27904, r27905, r27906, r27907, r27908;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27893);
        mpfr_init_set_str(r27894, "1/3", 10, MPFR_RNDN);
        mpfr_init(r27895);
        mpfr_init_set_str(r27896, "2", 10, MPFR_RNDN);
        mpfr_init(r27897);
        mpfr_init_set_str(r27898, "5", 10, MPFR_RNDN);
        mpfr_init(r27899);
        mpfr_init_set_str(r27900, "1/60", 10, MPFR_RNDN);
        mpfr_init(r27901);
        mpfr_init(r27902);
        mpfr_init(r27903);
        mpfr_init(r27904);
        mpfr_init_set_str(r27905, "0.5", 10, MPFR_RNDN);
        mpfr_init(r27906);
        mpfr_init(r27907);
        mpfr_init(r27908);
}

double f_fm(double re, double im) {
        mpfr_set_d(r27893, im, MPFR_RNDN);
        ;
        mpfr_mul(r27895, r27894, r27893, MPFR_RNDN);
        ;
        mpfr_fma(r27897, r27895, r27893, r27896, MPFR_RNDN);
        ;
        mpfr_pow(r27899, r27893, r27898, MPFR_RNDN);
        ;
        mpfr_mul(r27901, r27899, r27900, MPFR_RNDN);
        mpfr_fma(r27902, r27893, r27897, r27901, MPFR_RNDN);
        mpfr_set_d(r27903, re, MPFR_RNDN);
        mpfr_cos(r27904, r27903, MPFR_RNDN);
        ;
        mpfr_neg(r27906, r27905, MPFR_RNDN);
        mpfr_mul(r27907, r27904, r27906, MPFR_RNDN);
        mpfr_mul(r27908, r27902, r27907, MPFR_RNDN);
        return mpfr_get_d(r27908, MPFR_RNDN);
}

static mpfr_t r27909, r27910, r27911, r27912, r27913, r27914, r27915, r27916, r27917, r27918, r27919, r27920, r27921, r27922, r27923, r27924;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27909);
        mpfr_init_set_str(r27910, "1/3", 10, MPFR_RNDN);
        mpfr_init(r27911);
        mpfr_init_set_str(r27912, "2", 10, MPFR_RNDN);
        mpfr_init(r27913);
        mpfr_init_set_str(r27914, "5", 10, MPFR_RNDN);
        mpfr_init(r27915);
        mpfr_init_set_str(r27916, "1/60", 10, MPFR_RNDN);
        mpfr_init(r27917);
        mpfr_init(r27918);
        mpfr_init(r27919);
        mpfr_init(r27920);
        mpfr_init_set_str(r27921, "0.5", 10, MPFR_RNDN);
        mpfr_init(r27922);
        mpfr_init(r27923);
        mpfr_init(r27924);
}

double f_dm(double re, double im) {
        mpfr_set_d(r27909, im, MPFR_RNDN);
        ;
        mpfr_mul(r27911, r27910, r27909, MPFR_RNDN);
        ;
        mpfr_fma(r27913, r27911, r27909, r27912, MPFR_RNDN);
        ;
        mpfr_pow(r27915, r27909, r27914, MPFR_RNDN);
        ;
        mpfr_mul(r27917, r27915, r27916, MPFR_RNDN);
        mpfr_fma(r27918, r27909, r27913, r27917, MPFR_RNDN);
        mpfr_set_d(r27919, re, MPFR_RNDN);
        mpfr_cos(r27920, r27919, MPFR_RNDN);
        ;
        mpfr_neg(r27922, r27921, MPFR_RNDN);
        mpfr_mul(r27923, r27920, r27922, MPFR_RNDN);
        mpfr_mul(r27924, r27918, r27923, MPFR_RNDN);
        return mpfr_get_d(r27924, MPFR_RNDN);
}

