#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 r18407 = 0.5f;
        float r18408 = re;
        float r18409 = cos(r18408);
        float r18410 = r18407 * r18409;
        float r18411 = 0.0f;
        float r18412 = im;
        float r18413 = r18411 - r18412;
        float r18414 = exp(r18413);
        float r18415 = exp(r18412);
        float r18416 = r18414 - r18415;
        float r18417 = r18410 * r18416;
        return r18417;
}

double f_id(double re, double im) {
        double r18418 = 0.5;
        double r18419 = re;
        double r18420 = cos(r18419);
        double r18421 = r18418 * r18420;
        double r18422 = 0.0;
        double r18423 = im;
        double r18424 = r18422 - r18423;
        double r18425 = exp(r18424);
        double r18426 = exp(r18423);
        double r18427 = r18425 - r18426;
        double r18428 = r18421 * r18427;
        return r18428;
}


double f_of(float re, float im) {
        float r18429 = 0.01666666753590107f;
        float r18430 = im;
        float r18431 = 5.0f;
        float r18432 = pow(r18430, r18431);
        float r18433 = r18429 * r18432;
        float r18434 = 2.0f;
        float r18435 = r18434 * r18430;
        float r18436 = 0.3333333432674408f;
        float r18437 = exp(r18436);
        float r18438 = r18430 * (r18430 * r18430);
        float r18439 = pow(r18437, r18438);
        float r18440 = log(r18439);
        float r18441 = r18435 + r18440;
        float r18442 = r18433 + r18441;
        float r18443 = -r18442;
        float r18444 = re;
        float r18445 = cos(r18444);
        float r18446 = 0.5f;
        float r18447 = r18445 * r18446;
        float r18448 = r18443 * r18447;
        return r18448;
}

double f_od(double re, double im) {
        double r18449 = 0.01666666753590107;
        double r18450 = im;
        double r18451 = 5.0;
        double r18452 = pow(r18450, r18451);
        double r18453 = r18449 * r18452;
        double r18454 = 2.0;
        double r18455 = r18454 * r18450;
        double r18456 = 0.3333333432674408;
        double r18457 = exp(r18456);
        double r18458 = r18450 * (r18450 * r18450);
        double r18459 = pow(r18457, r18458);
        double r18460 = log(r18459);
        double r18461 = r18455 + r18460;
        double r18462 = r18453 + r18461;
        double r18463 = -r18462;
        double r18464 = re;
        double r18465 = cos(r18464);
        double r18466 = 0.5;
        double r18467 = r18465 * r18466;
        double r18468 = r18463 * r18467;
        return r18468;
}

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 r18469, r18470, r18471, r18472, r18473, r18474, r18475, r18476, r18477, r18478, r18479;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18469, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18470);
        mpfr_init(r18471);
        mpfr_init(r18472);
        mpfr_init_set_str(r18473, "0", 10, MPFR_RNDN);
        mpfr_init(r18474);
        mpfr_init(r18475);
        mpfr_init(r18476);
        mpfr_init(r18477);
        mpfr_init(r18478);
        mpfr_init(r18479);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r18470, re, MPFR_RNDN);
        mpfr_cos(r18471, r18470, MPFR_RNDN);
        mpfr_mul(r18472, r18469, r18471, MPFR_RNDN);
        ;
        mpfr_set_d(r18474, im, MPFR_RNDN);
        mpfr_sub(r18475, r18473, r18474, MPFR_RNDN);
        mpfr_exp(r18476, r18475, MPFR_RNDN);
        mpfr_exp(r18477, r18474, MPFR_RNDN);
        mpfr_sub(r18478, r18476, r18477, MPFR_RNDN);
        mpfr_mul(r18479, r18472, r18478, MPFR_RNDN);
        return mpfr_get_d(r18479, MPFR_RNDN);
}

static mpfr_t r18480, r18481, r18482, r18483, r18484, r18485, r18486, r18487, r18488, r18489, r18490, r18491, r18492, r18493, r18494, r18495, r18496, r18497, r18498, r18499;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18480, "1/60", 10, MPFR_RNDN);
        mpfr_init(r18481);
        mpfr_init_set_str(r18482, "5", 10, MPFR_RNDN);
        mpfr_init(r18483);
        mpfr_init(r18484);
        mpfr_init_set_str(r18485, "2", 10, MPFR_RNDN);
        mpfr_init(r18486);
        mpfr_init_set_str(r18487, "1/3", 10, MPFR_RNDN);
        mpfr_init(r18488);
        mpfr_init(r18489);
        mpfr_init(r18490);
        mpfr_init(r18491);
        mpfr_init(r18492);
        mpfr_init(r18493);
        mpfr_init(r18494);
        mpfr_init(r18495);
        mpfr_init(r18496);
        mpfr_init_set_str(r18497, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18498);
        mpfr_init(r18499);
}

double f_fm(double re, double im) {
        ;
        mpfr_set_d(r18481, im, MPFR_RNDN);
        ;
        mpfr_pow(r18483, r18481, r18482, MPFR_RNDN);
        mpfr_mul(r18484, r18480, r18483, MPFR_RNDN);
        ;
        mpfr_mul(r18486, r18485, r18481, MPFR_RNDN);
        ;
        mpfr_exp(r18488, r18487, MPFR_RNDN);
        mpfr_mul(r18489, r18481, r18481, MPFR_RNDN); mpfr_mul(r18489, r18489, r18481, MPFR_RNDN);
        mpfr_pow(r18490, r18488, r18489, MPFR_RNDN);
        mpfr_log(r18491, r18490, MPFR_RNDN);
        mpfr_add(r18492, r18486, r18491, MPFR_RNDN);
        mpfr_add(r18493, r18484, r18492, MPFR_RNDN);
        mpfr_neg(r18494, r18493, MPFR_RNDN);
        mpfr_set_d(r18495, re, MPFR_RNDN);
        mpfr_cos(r18496, r18495, MPFR_RNDN);
        ;
        mpfr_mul(r18498, r18496, r18497, MPFR_RNDN);
        mpfr_mul(r18499, r18494, r18498, MPFR_RNDN);
        return mpfr_get_d(r18499, MPFR_RNDN);
}

static mpfr_t r18500, r18501, r18502, r18503, r18504, r18505, r18506, r18507, r18508, r18509, r18510, r18511, r18512, r18513, r18514, r18515, r18516, r18517, r18518, r18519;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18500, "1/60", 10, MPFR_RNDN);
        mpfr_init(r18501);
        mpfr_init_set_str(r18502, "5", 10, MPFR_RNDN);
        mpfr_init(r18503);
        mpfr_init(r18504);
        mpfr_init_set_str(r18505, "2", 10, MPFR_RNDN);
        mpfr_init(r18506);
        mpfr_init_set_str(r18507, "1/3", 10, MPFR_RNDN);
        mpfr_init(r18508);
        mpfr_init(r18509);
        mpfr_init(r18510);
        mpfr_init(r18511);
        mpfr_init(r18512);
        mpfr_init(r18513);
        mpfr_init(r18514);
        mpfr_init(r18515);
        mpfr_init(r18516);
        mpfr_init_set_str(r18517, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18518);
        mpfr_init(r18519);
}

double f_dm(double re, double im) {
        ;
        mpfr_set_d(r18501, im, MPFR_RNDN);
        ;
        mpfr_pow(r18503, r18501, r18502, MPFR_RNDN);
        mpfr_mul(r18504, r18500, r18503, MPFR_RNDN);
        ;
        mpfr_mul(r18506, r18505, r18501, MPFR_RNDN);
        ;
        mpfr_exp(r18508, r18507, MPFR_RNDN);
        mpfr_mul(r18509, r18501, r18501, MPFR_RNDN); mpfr_mul(r18509, r18509, r18501, MPFR_RNDN);
        mpfr_pow(r18510, r18508, r18509, MPFR_RNDN);
        mpfr_log(r18511, r18510, MPFR_RNDN);
        mpfr_add(r18512, r18506, r18511, MPFR_RNDN);
        mpfr_add(r18513, r18504, r18512, MPFR_RNDN);
        mpfr_neg(r18514, r18513, MPFR_RNDN);
        mpfr_set_d(r18515, re, MPFR_RNDN);
        mpfr_cos(r18516, r18515, MPFR_RNDN);
        ;
        mpfr_mul(r18518, r18516, r18517, MPFR_RNDN);
        mpfr_mul(r18519, r18514, r18518, MPFR_RNDN);
        return mpfr_get_d(r18519, MPFR_RNDN);
}

