#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 r8303 = 0.5f;
        float r8304 = re;
        float r8305 = sin(r8304);
        float r8306 = r8303 * r8305;
        float r8307 = 0.0f;
        float r8308 = im;
        float r8309 = r8307 - r8308;
        float r8310 = exp(r8309);
        float r8311 = exp(r8308);
        float r8312 = r8310 + r8311;
        float r8313 = r8306 * r8312;
        return r8313;
}

double f_id(double re, double im) {
        double r8314 = 0.5;
        double r8315 = re;
        double r8316 = sin(r8315);
        double r8317 = r8314 * r8316;
        double r8318 = 0.0;
        double r8319 = im;
        double r8320 = r8318 - r8319;
        double r8321 = exp(r8320);
        double r8322 = exp(r8319);
        double r8323 = r8321 + r8322;
        double r8324 = r8317 * r8323;
        return r8324;
}


double f_of(float re, float im) {
        float r8325 = 0.5f;
        float r8326 = im;
        float r8327 = exp(r8326);
        float r8328 = r8325 / r8327;
        float r8329 = r8327 * r8325;
        float r8330 = r8328 + r8329;
        float r8331 = sqrt(r8330);
        float r8332 = re;
        float r8333 = sin(r8332);
        float r8334 = r8331 * r8333;
        float r8335 = r8334 * r8331;
        return r8335;
}

double f_od(double re, double im) {
        double r8336 = 0.5;
        double r8337 = im;
        double r8338 = exp(r8337);
        double r8339 = r8336 / r8338;
        double r8340 = r8338 * r8336;
        double r8341 = r8339 + r8340;
        double r8342 = sqrt(r8341);
        double r8343 = re;
        double r8344 = sin(r8343);
        double r8345 = r8342 * r8344;
        double r8346 = r8345 * r8342;
        return r8346;
}

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 r8347, r8348, r8349, r8350, r8351, r8352, r8353, r8354, r8355, r8356, r8357;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8347, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8348);
        mpfr_init(r8349);
        mpfr_init(r8350);
        mpfr_init_set_str(r8351, "0", 10, MPFR_RNDN);
        mpfr_init(r8352);
        mpfr_init(r8353);
        mpfr_init(r8354);
        mpfr_init(r8355);
        mpfr_init(r8356);
        mpfr_init(r8357);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r8348, re, MPFR_RNDN);
        mpfr_sin(r8349, r8348, MPFR_RNDN);
        mpfr_mul(r8350, r8347, r8349, MPFR_RNDN);
        ;
        mpfr_set_d(r8352, im, MPFR_RNDN);
        mpfr_sub(r8353, r8351, r8352, MPFR_RNDN);
        mpfr_exp(r8354, r8353, MPFR_RNDN);
        mpfr_exp(r8355, r8352, MPFR_RNDN);
        mpfr_add(r8356, r8354, r8355, MPFR_RNDN);
        mpfr_mul(r8357, r8350, r8356, MPFR_RNDN);
        return mpfr_get_d(r8357, MPFR_RNDN);
}

static mpfr_t r8358, r8359, r8360, r8361, r8362, r8363, r8364, r8365, r8366, r8367, r8368;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8358, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8359);
        mpfr_init(r8360);
        mpfr_init(r8361);
        mpfr_init(r8362);
        mpfr_init(r8363);
        mpfr_init(r8364);
        mpfr_init(r8365);
        mpfr_init(r8366);
        mpfr_init(r8367);
        mpfr_init(r8368);
}

double f_fm(double re, double im) {
        ;
        mpfr_set_d(r8359, im, MPFR_RNDN);
        mpfr_exp(r8360, r8359, MPFR_RNDN);
        mpfr_div(r8361, r8358, r8360, MPFR_RNDN);
        mpfr_mul(r8362, r8360, r8358, MPFR_RNDN);
        mpfr_add(r8363, r8361, r8362, MPFR_RNDN);
        mpfr_sqrt(r8364, r8363, MPFR_RNDN);
        mpfr_set_d(r8365, re, MPFR_RNDN);
        mpfr_sin(r8366, r8365, MPFR_RNDN);
        mpfr_mul(r8367, r8364, r8366, MPFR_RNDN);
        mpfr_mul(r8368, r8367, r8364, MPFR_RNDN);
        return mpfr_get_d(r8368, MPFR_RNDN);
}

static mpfr_t r8369, r8370, r8371, r8372, r8373, r8374, r8375, r8376, r8377, r8378, r8379;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8369, "0.5", 10, MPFR_RNDN);
        mpfr_init(r8370);
        mpfr_init(r8371);
        mpfr_init(r8372);
        mpfr_init(r8373);
        mpfr_init(r8374);
        mpfr_init(r8375);
        mpfr_init(r8376);
        mpfr_init(r8377);
        mpfr_init(r8378);
        mpfr_init(r8379);
}

double f_dm(double re, double im) {
        ;
        mpfr_set_d(r8370, im, MPFR_RNDN);
        mpfr_exp(r8371, r8370, MPFR_RNDN);
        mpfr_div(r8372, r8369, r8371, MPFR_RNDN);
        mpfr_mul(r8373, r8371, r8369, MPFR_RNDN);
        mpfr_add(r8374, r8372, r8373, MPFR_RNDN);
        mpfr_sqrt(r8375, r8374, MPFR_RNDN);
        mpfr_set_d(r8376, re, MPFR_RNDN);
        mpfr_sin(r8377, r8376, MPFR_RNDN);
        mpfr_mul(r8378, r8375, r8377, MPFR_RNDN);
        mpfr_mul(r8379, r8378, r8375, MPFR_RNDN);
        return mpfr_get_d(r8379, MPFR_RNDN);
}

