#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 r18447 = 0.5f;
        float r18448 = re;
        float r18449 = cos(r18448);
        float r18450 = r18447 * r18449;
        float r18451 = 0.0f;
        float r18452 = im;
        float r18453 = r18451 - r18452;
        float r18454 = exp(r18453);
        float r18455 = exp(r18452);
        float r18456 = r18454 - r18455;
        float r18457 = r18450 * r18456;
        return r18457;
}

double f_id(double re, double im) {
        double r18458 = 0.5;
        double r18459 = re;
        double r18460 = cos(r18459);
        double r18461 = r18458 * r18460;
        double r18462 = 0.0;
        double r18463 = im;
        double r18464 = r18462 - r18463;
        double r18465 = exp(r18464);
        double r18466 = exp(r18463);
        double r18467 = r18465 - r18466;
        double r18468 = r18461 * r18467;
        return r18468;
}


double f_of(float re, float im) {
        float r18469 = 0.01666666753590107f;
        float r18470 = im;
        float r18471 = 5.0f;
        float r18472 = pow(r18470, r18471);
        float r18473 = r18469 * r18472;
        float r18474 = 2.0f;
        float r18475 = r18474 * r18470;
        float r18476 = 0.3333333432674408f;
        float r18477 = 3.0f;
        float r18478 = pow(r18470, r18477);
        float r18479 = r18476 * r18478;
        float r18480 = r18475 + r18479;
        float r18481 = r18473 + r18480;
        float r18482 = -r18481;
        float r18483 = re;
        float r18484 = cos(r18483);
        float r18485 = 0.5f;
        float r18486 = r18484 * r18485;
        float r18487 = r18482 * r18486;
        return r18487;
}

double f_od(double re, double im) {
        double r18488 = 0.01666666753590107;
        double r18489 = im;
        double r18490 = 5.0;
        double r18491 = pow(r18489, r18490);
        double r18492 = r18488 * r18491;
        double r18493 = 2.0;
        double r18494 = r18493 * r18489;
        double r18495 = 0.3333333432674408;
        double r18496 = 3.0;
        double r18497 = pow(r18489, r18496);
        double r18498 = r18495 * r18497;
        double r18499 = r18494 + r18498;
        double r18500 = r18492 + r18499;
        double r18501 = -r18500;
        double r18502 = re;
        double r18503 = cos(r18502);
        double r18504 = 0.5;
        double r18505 = r18503 * r18504;
        double r18506 = r18501 * r18505;
        return r18506;
}

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 r18507, r18508, r18509, r18510, r18511, r18512, r18513, r18514, r18515, r18516, r18517;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18507, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18508);
        mpfr_init(r18509);
        mpfr_init(r18510);
        mpfr_init_set_str(r18511, "0", 10, MPFR_RNDN);
        mpfr_init(r18512);
        mpfr_init(r18513);
        mpfr_init(r18514);
        mpfr_init(r18515);
        mpfr_init(r18516);
        mpfr_init(r18517);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r18508, re, MPFR_RNDN);
        mpfr_cos(r18509, r18508, MPFR_RNDN);
        mpfr_mul(r18510, r18507, r18509, MPFR_RNDN);
        ;
        mpfr_set_d(r18512, im, MPFR_RNDN);
        mpfr_sub(r18513, r18511, r18512, MPFR_RNDN);
        mpfr_exp(r18514, r18513, MPFR_RNDN);
        mpfr_exp(r18515, r18512, MPFR_RNDN);
        mpfr_sub(r18516, r18514, r18515, MPFR_RNDN);
        mpfr_mul(r18517, r18510, r18516, MPFR_RNDN);
        return mpfr_get_d(r18517, MPFR_RNDN);
}

static mpfr_t r18518, r18519, r18520, r18521, r18522, r18523, r18524, r18525, r18526, r18527, r18528, r18529, r18530, r18531, r18532, r18533, r18534, r18535, r18536;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18518, "1/60", 10, MPFR_RNDN);
        mpfr_init(r18519);
        mpfr_init_set_str(r18520, "5", 10, MPFR_RNDN);
        mpfr_init(r18521);
        mpfr_init(r18522);
        mpfr_init_set_str(r18523, "2", 10, MPFR_RNDN);
        mpfr_init(r18524);
        mpfr_init_set_str(r18525, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r18526, "3", 10, MPFR_RNDN);
        mpfr_init(r18527);
        mpfr_init(r18528);
        mpfr_init(r18529);
        mpfr_init(r18530);
        mpfr_init(r18531);
        mpfr_init(r18532);
        mpfr_init(r18533);
        mpfr_init_set_str(r18534, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18535);
        mpfr_init(r18536);
}

double f_fm(double re, double im) {
        ;
        mpfr_set_d(r18519, im, MPFR_RNDN);
        ;
        mpfr_pow(r18521, r18519, r18520, MPFR_RNDN);
        mpfr_mul(r18522, r18518, r18521, MPFR_RNDN);
        ;
        mpfr_mul(r18524, r18523, r18519, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r18527, r18519, r18526, MPFR_RNDN);
        mpfr_mul(r18528, r18525, r18527, MPFR_RNDN);
        mpfr_add(r18529, r18524, r18528, MPFR_RNDN);
        mpfr_add(r18530, r18522, r18529, MPFR_RNDN);
        mpfr_neg(r18531, r18530, MPFR_RNDN);
        mpfr_set_d(r18532, re, MPFR_RNDN);
        mpfr_cos(r18533, r18532, MPFR_RNDN);
        ;
        mpfr_mul(r18535, r18533, r18534, MPFR_RNDN);
        mpfr_mul(r18536, r18531, r18535, MPFR_RNDN);
        return mpfr_get_d(r18536, MPFR_RNDN);
}

static mpfr_t r18537, r18538, r18539, r18540, r18541, r18542, r18543, r18544, r18545, r18546, r18547, r18548, r18549, r18550, r18551, r18552, r18553, r18554, r18555;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18537, "1/60", 10, MPFR_RNDN);
        mpfr_init(r18538);
        mpfr_init_set_str(r18539, "5", 10, MPFR_RNDN);
        mpfr_init(r18540);
        mpfr_init(r18541);
        mpfr_init_set_str(r18542, "2", 10, MPFR_RNDN);
        mpfr_init(r18543);
        mpfr_init_set_str(r18544, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r18545, "3", 10, MPFR_RNDN);
        mpfr_init(r18546);
        mpfr_init(r18547);
        mpfr_init(r18548);
        mpfr_init(r18549);
        mpfr_init(r18550);
        mpfr_init(r18551);
        mpfr_init(r18552);
        mpfr_init_set_str(r18553, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18554);
        mpfr_init(r18555);
}

double f_dm(double re, double im) {
        ;
        mpfr_set_d(r18538, im, MPFR_RNDN);
        ;
        mpfr_pow(r18540, r18538, r18539, MPFR_RNDN);
        mpfr_mul(r18541, r18537, r18540, MPFR_RNDN);
        ;
        mpfr_mul(r18543, r18542, r18538, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r18546, r18538, r18545, MPFR_RNDN);
        mpfr_mul(r18547, r18544, r18546, MPFR_RNDN);
        mpfr_add(r18548, r18543, r18547, MPFR_RNDN);
        mpfr_add(r18549, r18541, r18548, MPFR_RNDN);
        mpfr_neg(r18550, r18549, MPFR_RNDN);
        mpfr_set_d(r18551, re, MPFR_RNDN);
        mpfr_cos(r18552, r18551, MPFR_RNDN);
        ;
        mpfr_mul(r18554, r18552, r18553, MPFR_RNDN);
        mpfr_mul(r18555, r18550, r18554, MPFR_RNDN);
        return mpfr_get_d(r18555, MPFR_RNDN);
}

