#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 r11177 = 0.5f;
        float r11178 = re;
        float r11179 = cos(r11178);
        float r11180 = r11177 * r11179;
        float r11181 = 0.0f;
        float r11182 = im;
        float r11183 = r11181 - r11182;
        float r11184 = exp(r11183);
        float r11185 = exp(r11182);
        float r11186 = r11184 - r11185;
        float r11187 = r11180 * r11186;
        return r11187;
}

double f_id(double re, double im) {
        double r11188 = 0.5;
        double r11189 = re;
        double r11190 = cos(r11189);
        double r11191 = r11188 * r11190;
        double r11192 = 0.0;
        double r11193 = im;
        double r11194 = r11192 - r11193;
        double r11195 = exp(r11194);
        double r11196 = exp(r11193);
        double r11197 = r11195 - r11196;
        double r11198 = r11191 * r11197;
        return r11198;
}


double f_of(float re, float im) {
        float r11199 = im;
        float r11200 = r11199 * r11199;
        float r11201 = 0.3333333333333333f;
        float r11202 = 2.0f;
        float r11203 = fma(r11200, r11201, r11202);
        float r11204 = -r11199;
        float r11205 = 0.016666666666666666f;
        float r11206 = -r11205;
        float r11207 = 5.0f;
        float r11208 = pow(r11199, r11207);
        float r11209 = r11206 * r11208;
        float r11210 = fma(r11203, r11204, r11209);
        float r11211 = 0.5f;
        float r11212 = re;
        float r11213 = cos(r11212);
        float r11214 = r11211 * r11213;
        float r11215 = r11210 * r11214;
        return r11215;
}

double f_od(double re, double im) {
        double r11216 = im;
        double r11217 = r11216 * r11216;
        double r11218 = 0.3333333333333333;
        double r11219 = 2.0;
        double r11220 = fma(r11217, r11218, r11219);
        double r11221 = -r11216;
        double r11222 = 0.016666666666666666;
        double r11223 = -r11222;
        double r11224 = 5.0;
        double r11225 = pow(r11216, r11224);
        double r11226 = r11223 * r11225;
        double r11227 = fma(r11220, r11221, r11226);
        double r11228 = 0.5;
        double r11229 = re;
        double r11230 = cos(r11229);
        double r11231 = r11228 * r11230;
        double r11232 = r11227 * r11231;
        return r11232;
}

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 r11233, r11234, r11235, r11236, r11237, r11238, r11239, r11240, r11241, r11242, r11243;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r11233, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11234);
        mpfr_init(r11235);
        mpfr_init(r11236);
        mpfr_init_set_str(r11237, "0", 10, MPFR_RNDN);
        mpfr_init(r11238);
        mpfr_init(r11239);
        mpfr_init(r11240);
        mpfr_init(r11241);
        mpfr_init(r11242);
        mpfr_init(r11243);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r11234, re, MPFR_RNDN);
        mpfr_cos(r11235, r11234, MPFR_RNDN);
        mpfr_mul(r11236, r11233, r11235, MPFR_RNDN);
        ;
        mpfr_set_d(r11238, im, MPFR_RNDN);
        mpfr_sub(r11239, r11237, r11238, MPFR_RNDN);
        mpfr_exp(r11240, r11239, MPFR_RNDN);
        mpfr_exp(r11241, r11238, MPFR_RNDN);
        mpfr_sub(r11242, r11240, r11241, MPFR_RNDN);
        mpfr_mul(r11243, r11236, r11242, MPFR_RNDN);
        return mpfr_get_d(r11243, MPFR_RNDN);
}

static mpfr_t r11244, r11245, r11246, r11247, r11248, r11249, r11250, r11251, r11252, r11253, r11254, r11255, r11256, r11257, r11258, r11259, r11260;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11244);
        mpfr_init(r11245);
        mpfr_init_set_str(r11246, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r11247, "2", 10, MPFR_RNDN);
        mpfr_init(r11248);
        mpfr_init(r11249);
        mpfr_init_set_str(r11250, "1/60", 10, MPFR_RNDN);
        mpfr_init(r11251);
        mpfr_init_set_str(r11252, "5", 10, MPFR_RNDN);
        mpfr_init(r11253);
        mpfr_init(r11254);
        mpfr_init(r11255);
        mpfr_init_set_str(r11256, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11257);
        mpfr_init(r11258);
        mpfr_init(r11259);
        mpfr_init(r11260);
}

double f_fm(double re, double im) {
        mpfr_set_d(r11244, im, MPFR_RNDN);
        mpfr_mul(r11245, r11244, r11244, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r11248, r11245, r11246, r11247, MPFR_RNDN);
        mpfr_neg(r11249, r11244, MPFR_RNDN);
        ;
        mpfr_neg(r11251, r11250, MPFR_RNDN);
        ;
        mpfr_pow(r11253, r11244, r11252, MPFR_RNDN);
        mpfr_mul(r11254, r11251, r11253, MPFR_RNDN);
        mpfr_fma(r11255, r11248, r11249, r11254, MPFR_RNDN);
        ;
        mpfr_set_d(r11257, re, MPFR_RNDN);
        mpfr_cos(r11258, r11257, MPFR_RNDN);
        mpfr_mul(r11259, r11256, r11258, MPFR_RNDN);
        mpfr_mul(r11260, r11255, r11259, MPFR_RNDN);
        return mpfr_get_d(r11260, MPFR_RNDN);
}

static mpfr_t r11261, r11262, r11263, r11264, r11265, r11266, r11267, r11268, r11269, r11270, r11271, r11272, r11273, r11274, r11275, r11276, r11277;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11261);
        mpfr_init(r11262);
        mpfr_init_set_str(r11263, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r11264, "2", 10, MPFR_RNDN);
        mpfr_init(r11265);
        mpfr_init(r11266);
        mpfr_init_set_str(r11267, "1/60", 10, MPFR_RNDN);
        mpfr_init(r11268);
        mpfr_init_set_str(r11269, "5", 10, MPFR_RNDN);
        mpfr_init(r11270);
        mpfr_init(r11271);
        mpfr_init(r11272);
        mpfr_init_set_str(r11273, "0.5", 10, MPFR_RNDN);
        mpfr_init(r11274);
        mpfr_init(r11275);
        mpfr_init(r11276);
        mpfr_init(r11277);
}

double f_dm(double re, double im) {
        mpfr_set_d(r11261, im, MPFR_RNDN);
        mpfr_mul(r11262, r11261, r11261, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r11265, r11262, r11263, r11264, MPFR_RNDN);
        mpfr_neg(r11266, r11261, MPFR_RNDN);
        ;
        mpfr_neg(r11268, r11267, MPFR_RNDN);
        ;
        mpfr_pow(r11270, r11261, r11269, MPFR_RNDN);
        mpfr_mul(r11271, r11268, r11270, MPFR_RNDN);
        mpfr_fma(r11272, r11265, r11266, r11271, MPFR_RNDN);
        ;
        mpfr_set_d(r11274, re, MPFR_RNDN);
        mpfr_cos(r11275, r11274, MPFR_RNDN);
        mpfr_mul(r11276, r11273, r11275, MPFR_RNDN);
        mpfr_mul(r11277, r11272, r11276, MPFR_RNDN);
        return mpfr_get_d(r11277, MPFR_RNDN);
}

