#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "math.exp on complex, imaginary part";

double f_if(float re, float im) {
        float r8798 = re;
        float r8799 = exp(r8798);
        float r8800 = im;
        float r8801 = sin(r8800);
        float r8802 = r8799 * r8801;
        return r8802;
}

double f_id(double re, double im) {
        double r8803 = re;
        double r8804 = exp(r8803);
        double r8805 = im;
        double r8806 = sin(r8805);
        double r8807 = r8804 * r8806;
        return r8807;
}


double f_of(float re, float im) {
        float r8808 = re;
        float r8809 = exp(r8808);
        float r8810 = im;
        float r8811 = sin(r8810);
        float r8812 = r8809 * r8811;
        return r8812;
}

double f_od(double re, double im) {
        double r8813 = re;
        double r8814 = exp(r8813);
        double r8815 = im;
        double r8816 = sin(r8815);
        double r8817 = r8814 * r8816;
        return r8817;
}

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 r8818, r8819, r8820, r8821, r8822;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8818);
        mpfr_init(r8819);
        mpfr_init(r8820);
        mpfr_init(r8821);
        mpfr_init(r8822);
}

double f_im(double re, double im) {
        mpfr_set_d(r8818, re, MPFR_RNDN);
        mpfr_exp(r8819, r8818, MPFR_RNDN);
        mpfr_set_d(r8820, im, MPFR_RNDN);
        mpfr_sin(r8821, r8820, MPFR_RNDN);
        mpfr_mul(r8822, r8819, r8821, MPFR_RNDN);
        return mpfr_get_d(r8822, MPFR_RNDN);
}

static mpfr_t r8823, r8824, r8825, r8826, r8827;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8823);
        mpfr_init(r8824);
        mpfr_init(r8825);
        mpfr_init(r8826);
        mpfr_init(r8827);
}

double f_fm(double re, double im) {
        mpfr_set_d(r8823, re, MPFR_RNDN);
        mpfr_exp(r8824, r8823, MPFR_RNDN);
        mpfr_set_d(r8825, im, MPFR_RNDN);
        mpfr_sin(r8826, r8825, MPFR_RNDN);
        mpfr_mul(r8827, r8824, r8826, MPFR_RNDN);
        return mpfr_get_d(r8827, MPFR_RNDN);
}

static mpfr_t r8828, r8829, r8830, r8831, r8832;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8828);
        mpfr_init(r8829);
        mpfr_init(r8830);
        mpfr_init(r8831);
        mpfr_init(r8832);
}

double f_dm(double re, double im) {
        mpfr_set_d(r8828, re, MPFR_RNDN);
        mpfr_exp(r8829, r8828, MPFR_RNDN);
        mpfr_set_d(r8830, im, MPFR_RNDN);
        mpfr_sin(r8831, r8830, MPFR_RNDN);
        mpfr_mul(r8832, r8829, r8831, MPFR_RNDN);
        return mpfr_get_d(r8832, MPFR_RNDN);
}

