#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 r19849 = re;
        float r19850 = exp(r19849);
        float r19851 = im;
        float r19852 = sin(r19851);
        float r19853 = r19850 * r19852;
        return r19853;
}

double f_id(double re, double im) {
        double r19854 = re;
        double r19855 = exp(r19854);
        double r19856 = im;
        double r19857 = sin(r19856);
        double r19858 = r19855 * r19857;
        return r19858;
}


double f_of(float re, float im) {
        float r19859 = re;
        float r19860 = exp(r19859);
        float r19861 = im;
        float r19862 = sin(r19861);
        float r19863 = r19860 * r19862;
        return r19863;
}

double f_od(double re, double im) {
        double r19864 = re;
        double r19865 = exp(r19864);
        double r19866 = im;
        double r19867 = sin(r19866);
        double r19868 = r19865 * r19867;
        return r19868;
}

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 r19869, r19870, r19871, r19872, r19873;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r19869);
        mpfr_init(r19870);
        mpfr_init(r19871);
        mpfr_init(r19872);
        mpfr_init(r19873);
}

double f_im(double re, double im) {
        mpfr_set_d(r19869, re, MPFR_RNDN);
        mpfr_exp(r19870, r19869, MPFR_RNDN);
        mpfr_set_d(r19871, im, MPFR_RNDN);
        mpfr_sin(r19872, r19871, MPFR_RNDN);
        mpfr_mul(r19873, r19870, r19872, MPFR_RNDN);
        return mpfr_get_d(r19873, MPFR_RNDN);
}

static mpfr_t r19874, r19875, r19876, r19877, r19878;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r19874);
        mpfr_init(r19875);
        mpfr_init(r19876);
        mpfr_init(r19877);
        mpfr_init(r19878);
}

double f_fm(double re, double im) {
        mpfr_set_d(r19874, re, MPFR_RNDN);
        mpfr_exp(r19875, r19874, MPFR_RNDN);
        mpfr_set_d(r19876, im, MPFR_RNDN);
        mpfr_sin(r19877, r19876, MPFR_RNDN);
        mpfr_mul(r19878, r19875, r19877, MPFR_RNDN);
        return mpfr_get_d(r19878, MPFR_RNDN);
}

static mpfr_t r19879, r19880, r19881, r19882, r19883;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r19879);
        mpfr_init(r19880);
        mpfr_init(r19881);
        mpfr_init(r19882);
        mpfr_init(r19883);
}

double f_dm(double re, double im) {
        mpfr_set_d(r19879, re, MPFR_RNDN);
        mpfr_exp(r19880, r19879, MPFR_RNDN);
        mpfr_set_d(r19881, im, MPFR_RNDN);
        mpfr_sin(r19882, r19881, MPFR_RNDN);
        mpfr_mul(r19883, r19880, r19882, MPFR_RNDN);
        return mpfr_get_d(r19883, MPFR_RNDN);
}

