#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 r18387 = 0.5f;
        float r18388 = re;
        float r18389 = cos(r18388);
        float r18390 = r18387 * r18389;
        float r18391 = 0.0f;
        float r18392 = im;
        float r18393 = r18391 - r18392;
        float r18394 = exp(r18393);
        float r18395 = exp(r18392);
        float r18396 = r18394 - r18395;
        float r18397 = r18390 * r18396;
        return r18397;
}

double f_id(double re, double im) {
        double r18398 = 0.5;
        double r18399 = re;
        double r18400 = cos(r18399);
        double r18401 = r18398 * r18400;
        double r18402 = 0.0;
        double r18403 = im;
        double r18404 = r18402 - r18403;
        double r18405 = exp(r18404);
        double r18406 = exp(r18403);
        double r18407 = r18405 - r18406;
        double r18408 = r18401 * r18407;
        return r18408;
}


double f_of(float re, float im) {
        float r18409 = 0.01666666753590107f;
        float r18410 = im;
        float r18411 = 5.0f;
        float r18412 = pow(r18410, r18411);
        float r18413 = r18409 * r18412;
        float r18414 = 2.0f;
        float r18415 = r18414 * r18410;
        float r18416 = 0.3333333432674408f;
        float r18417 = 3.0f;
        float r18418 = pow(r18410, r18417);
        float r18419 = r18416 * r18418;
        float r18420 = r18415 + r18419;
        float r18421 = r18413 + r18420;
        float r18422 = -r18421;
        float r18423 = re;
        float r18424 = cos(r18423);
        float r18425 = 0.5f;
        float r18426 = r18424 * r18425;
        float r18427 = r18422 * r18426;
        return r18427;
}

double f_od(double re, double im) {
        double r18428 = 0.01666666753590107;
        double r18429 = im;
        double r18430 = 5.0;
        double r18431 = pow(r18429, r18430);
        double r18432 = r18428 * r18431;
        double r18433 = 2.0;
        double r18434 = r18433 * r18429;
        double r18435 = 0.3333333432674408;
        double r18436 = 3.0;
        double r18437 = pow(r18429, r18436);
        double r18438 = r18435 * r18437;
        double r18439 = r18434 + r18438;
        double r18440 = r18432 + r18439;
        double r18441 = -r18440;
        double r18442 = re;
        double r18443 = cos(r18442);
        double r18444 = 0.5;
        double r18445 = r18443 * r18444;
        double r18446 = r18441 * r18445;
        return r18446;
}

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 r18447, r18448, r18449, r18450, r18451, r18452, r18453, r18454, r18455, r18456, r18457;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18447, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18448);
        mpfr_init(r18449);
        mpfr_init(r18450);
        mpfr_init_set_str(r18451, "0", 10, MPFR_RNDN);
        mpfr_init(r18452);
        mpfr_init(r18453);
        mpfr_init(r18454);
        mpfr_init(r18455);
        mpfr_init(r18456);
        mpfr_init(r18457);
}

double f_im(double re, double im) {
        ;
        mpfr_set_d(r18448, re, MPFR_RNDN);
        mpfr_cos(r18449, r18448, MPFR_RNDN);
        mpfr_mul(r18450, r18447, r18449, MPFR_RNDN);
        ;
        mpfr_set_d(r18452, im, MPFR_RNDN);
        mpfr_sub(r18453, r18451, r18452, MPFR_RNDN);
        mpfr_exp(r18454, r18453, MPFR_RNDN);
        mpfr_exp(r18455, r18452, MPFR_RNDN);
        mpfr_sub(r18456, r18454, r18455, MPFR_RNDN);
        mpfr_mul(r18457, r18450, r18456, MPFR_RNDN);
        return mpfr_get_d(r18457, MPFR_RNDN);
}

static mpfr_t r18458, r18459, r18460, r18461, r18462, r18463, r18464, r18465, r18466, r18467, r18468, r18469, r18470, r18471, r18472, r18473, r18474, r18475, r18476;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18458, "1/60", 10, MPFR_RNDN);
        mpfr_init(r18459);
        mpfr_init_set_str(r18460, "5", 10, MPFR_RNDN);
        mpfr_init(r18461);
        mpfr_init(r18462);
        mpfr_init_set_str(r18463, "2", 10, MPFR_RNDN);
        mpfr_init(r18464);
        mpfr_init_set_str(r18465, "1/3", 10, MPFR_RNDN);
        mpfr_init_set_str(r18466, "3", 10, MPFR_RNDN);
        mpfr_init(r18467);
        mpfr_init(r18468);
        mpfr_init(r18469);
        mpfr_init(r18470);
        mpfr_init(r18471);
        mpfr_init(r18472);
        mpfr_init(r18473);
        mpfr_init_set_str(r18474, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18475);
        mpfr_init(r18476);
}

double f_fm(double re, double im) {
        ;
        mpfr_set_d(r18459, im, MPFR_RNDN);
        ;
        mpfr_pow(r18461, r18459, r18460, MPFR_RNDN);
        mpfr_mul(r18462, r18458, r18461, MPFR_RNDN);
        ;
        mpfr_mul(r18464, r18463, r18459, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r18467, r18459, r18466, MPFR_RNDN);
        mpfr_mul(r18468, r18465, r18467, MPFR_RNDN);
        mpfr_add(r18469, r18464, r18468, MPFR_RNDN);
        mpfr_add(r18470, r18462, r18469, MPFR_RNDN);
        mpfr_neg(r18471, r18470, MPFR_RNDN);
        mpfr_set_d(r18472, re, MPFR_RNDN);
        mpfr_cos(r18473, r18472, MPFR_RNDN);
        ;
        mpfr_mul(r18475, r18473, r18474, MPFR_RNDN);
        mpfr_mul(r18476, r18471, r18475, MPFR_RNDN);
        return mpfr_get_d(r18476, MPFR_RNDN);
}

static mpfr_t r18477, r18478, r18479, r18480, r18481, r18482, r18483, r18484, r18485, r18486, r18487, r18488, r18489, r18490, r18491, r18492, r18493, r18494, r18495;

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

double f_dm(double re, double im) {
        ;
        mpfr_set_d(r18478, im, MPFR_RNDN);
        ;
        mpfr_pow(r18480, r18478, r18479, MPFR_RNDN);
        mpfr_mul(r18481, r18477, r18480, MPFR_RNDN);
        ;
        mpfr_mul(r18483, r18482, r18478, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r18486, r18478, r18485, MPFR_RNDN);
        mpfr_mul(r18487, r18484, r18486, MPFR_RNDN);
        mpfr_add(r18488, r18483, r18487, MPFR_RNDN);
        mpfr_add(r18489, r18481, r18488, MPFR_RNDN);
        mpfr_neg(r18490, r18489, MPFR_RNDN);
        mpfr_set_d(r18491, re, MPFR_RNDN);
        mpfr_cos(r18492, r18491, MPFR_RNDN);
        ;
        mpfr_mul(r18494, r18492, r18493, MPFR_RNDN);
        mpfr_mul(r18495, r18490, r18494, MPFR_RNDN);
        return mpfr_get_d(r18495, MPFR_RNDN);
}

