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

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

double f_if(float re, float im) {
        float r20896 = re;
        float r20897 = exp(r20896);
        float r20898 = im;
        float r20899 = cos(r20898);
        float r20900 = r20897 * r20899;
        return r20900;
}

double f_id(double re, double im) {
        double r20901 = re;
        double r20902 = exp(r20901);
        double r20903 = im;
        double r20904 = cos(r20903);
        double r20905 = r20902 * r20904;
        return r20905;
}


double f_of(float re, float im) {
        float r20906 = re;
        float r20907 = exp(r20906);
        float r20908 = im;
        float r20909 = cos(r20908);
        float r20910 = r20907 * r20909;
        return r20910;
}

double f_od(double re, double im) {
        double r20911 = re;
        double r20912 = exp(r20911);
        double r20913 = im;
        double r20914 = cos(r20913);
        double r20915 = r20912 * r20914;
        return r20915;
}

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 r20916, r20917, r20918, r20919, r20920;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r20916);
        mpfr_init(r20917);
        mpfr_init(r20918);
        mpfr_init(r20919);
        mpfr_init(r20920);
}

double f_im(double re, double im) {
        mpfr_set_d(r20916, re, MPFR_RNDN);
        mpfr_exp(r20917, r20916, MPFR_RNDN);
        mpfr_set_d(r20918, im, MPFR_RNDN);
        mpfr_cos(r20919, r20918, MPFR_RNDN);
        mpfr_mul(r20920, r20917, r20919, MPFR_RNDN);
        return mpfr_get_d(r20920, MPFR_RNDN);
}

static mpfr_t r20921, r20922, r20923, r20924, r20925;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r20921);
        mpfr_init(r20922);
        mpfr_init(r20923);
        mpfr_init(r20924);
        mpfr_init(r20925);
}

double f_fm(double re, double im) {
        mpfr_set_d(r20921, re, MPFR_RNDN);
        mpfr_exp(r20922, r20921, MPFR_RNDN);
        mpfr_set_d(r20923, im, MPFR_RNDN);
        mpfr_cos(r20924, r20923, MPFR_RNDN);
        mpfr_mul(r20925, r20922, r20924, MPFR_RNDN);
        return mpfr_get_d(r20925, MPFR_RNDN);
}

static mpfr_t r20926, r20927, r20928, r20929, r20930;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r20926);
        mpfr_init(r20927);
        mpfr_init(r20928);
        mpfr_init(r20929);
        mpfr_init(r20930);
}

double f_dm(double re, double im) {
        mpfr_set_d(r20926, re, MPFR_RNDN);
        mpfr_exp(r20927, r20926, MPFR_RNDN);
        mpfr_set_d(r20928, im, MPFR_RNDN);
        mpfr_cos(r20929, r20928, MPFR_RNDN);
        mpfr_mul(r20930, r20927, r20929, MPFR_RNDN);
        return mpfr_get_d(r20930, MPFR_RNDN);
}

