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

char *name = "Data.Number.Erf:$dmerfcx from erf-2.0.0.0";

double f_if(float x, float y) {
        float r55935 = x;
        float r55936 = y;
        float r55937 = r55936 * r55936;
        float r55938 = exp(r55937);
        float r55939 = r55935 * r55938;
        return r55939;
}

double f_id(double x, double y) {
        double r55940 = x;
        double r55941 = y;
        double r55942 = r55941 * r55941;
        double r55943 = exp(r55942);
        double r55944 = r55940 * r55943;
        return r55944;
}


double f_of(float x, float y) {
        float r55945 = x;
        float r55946 = y;
        float r55947 = r55946 * r55946;
        float r55948 = exp(r55947);
        float r55949 = r55945 * r55948;
        return r55949;
}

double f_od(double x, double y) {
        double r55950 = x;
        double r55951 = y;
        double r55952 = r55951 * r55951;
        double r55953 = exp(r55952);
        double r55954 = r55950 * r55953;
        return r55954;
}

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 r55955, r55956, r55957, r55958, r55959;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r55955);
        mpfr_init(r55956);
        mpfr_init(r55957);
        mpfr_init(r55958);
        mpfr_init(r55959);
}

double f_im(double x, double y) {
        mpfr_set_d(r55955, x, MPFR_RNDN);
        mpfr_set_d(r55956, y, MPFR_RNDN);
        mpfr_mul(r55957, r55956, r55956, MPFR_RNDN);
        mpfr_exp(r55958, r55957, MPFR_RNDN);
        mpfr_mul(r55959, r55955, r55958, MPFR_RNDN);
        return mpfr_get_d(r55959, MPFR_RNDN);
}

static mpfr_t r55960, r55961, r55962, r55963, r55964;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55960);
        mpfr_init(r55961);
        mpfr_init(r55962);
        mpfr_init(r55963);
        mpfr_init(r55964);
}

double f_fm(double x, double y) {
        mpfr_set_d(r55960, x, MPFR_RNDN);
        mpfr_set_d(r55961, y, MPFR_RNDN);
        mpfr_mul(r55962, r55961, r55961, MPFR_RNDN);
        mpfr_exp(r55963, r55962, MPFR_RNDN);
        mpfr_mul(r55964, r55960, r55963, MPFR_RNDN);
        return mpfr_get_d(r55964, MPFR_RNDN);
}

static mpfr_t r55965, r55966, r55967, r55968, r55969;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55965);
        mpfr_init(r55966);
        mpfr_init(r55967);
        mpfr_init(r55968);
        mpfr_init(r55969);
}

double f_dm(double x, double y) {
        mpfr_set_d(r55965, x, MPFR_RNDN);
        mpfr_set_d(r55966, y, MPFR_RNDN);
        mpfr_mul(r55967, r55966, r55966, MPFR_RNDN);
        mpfr_exp(r55968, r55967, MPFR_RNDN);
        mpfr_mul(r55969, r55965, r55968, MPFR_RNDN);
        return mpfr_get_d(r55969, MPFR_RNDN);
}

