#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 r56001 = x;
        float r56002 = y;
        float r56003 = r56002 * r56002;
        float r56004 = exp(r56003);
        float r56005 = r56001 * r56004;
        return r56005;
}

double f_id(double x, double y) {
        double r56006 = x;
        double r56007 = y;
        double r56008 = r56007 * r56007;
        double r56009 = exp(r56008);
        double r56010 = r56006 * r56009;
        return r56010;
}


double f_of(float x, float y) {
        float r56011 = x;
        float r56012 = y;
        float r56013 = r56012 * r56012;
        float r56014 = exp(r56013);
        float r56015 = r56011 * r56014;
        return r56015;
}

double f_od(double x, double y) {
        double r56016 = x;
        double r56017 = y;
        double r56018 = r56017 * r56017;
        double r56019 = exp(r56018);
        double r56020 = r56016 * r56019;
        return r56020;
}

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 r56021, r56022, r56023, r56024, r56025;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r56021);
        mpfr_init(r56022);
        mpfr_init(r56023);
        mpfr_init(r56024);
        mpfr_init(r56025);
}

double f_im(double x, double y) {
        mpfr_set_d(r56021, x, MPFR_RNDN);
        mpfr_set_d(r56022, y, MPFR_RNDN);
        mpfr_mul(r56023, r56022, r56022, MPFR_RNDN);
        mpfr_exp(r56024, r56023, MPFR_RNDN);
        mpfr_mul(r56025, r56021, r56024, MPFR_RNDN);
        return mpfr_get_d(r56025, MPFR_RNDN);
}

static mpfr_t r56026, r56027, r56028, r56029, r56030;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56026);
        mpfr_init(r56027);
        mpfr_init(r56028);
        mpfr_init(r56029);
        mpfr_init(r56030);
}

double f_fm(double x, double y) {
        mpfr_set_d(r56026, x, MPFR_RNDN);
        mpfr_set_d(r56027, y, MPFR_RNDN);
        mpfr_mul(r56028, r56027, r56027, MPFR_RNDN);
        mpfr_exp(r56029, r56028, MPFR_RNDN);
        mpfr_mul(r56030, r56026, r56029, MPFR_RNDN);
        return mpfr_get_d(r56030, MPFR_RNDN);
}

static mpfr_t r56031, r56032, r56033, r56034, r56035;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56031);
        mpfr_init(r56032);
        mpfr_init(r56033);
        mpfr_init(r56034);
        mpfr_init(r56035);
}

double f_dm(double x, double y) {
        mpfr_set_d(r56031, x, MPFR_RNDN);
        mpfr_set_d(r56032, y, MPFR_RNDN);
        mpfr_mul(r56033, r56032, r56032, MPFR_RNDN);
        mpfr_exp(r56034, r56033, MPFR_RNDN);
        mpfr_mul(r56035, r56031, r56034, MPFR_RNDN);
        return mpfr_get_d(r56035, MPFR_RNDN);
}

