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

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

double f_if(float x, float y) {
        float r55978 = x;
        float r55979 = y;
        float r55980 = 1.0;
        float r55981 = r55978 * r55979;
        float r55982 = 2.0;
        float r55983 = r55981 / r55982;
        float r55984 = r55980 + r55983;
        float r55985 = r55979 / r55984;
        float r55986 = r55978 - r55985;
        return r55986;
}

double f_id(double x, double y) {
        double r55987 = x;
        double r55988 = y;
        double r55989 = 1.0;
        double r55990 = r55987 * r55988;
        double r55991 = 2.0;
        double r55992 = r55990 / r55991;
        double r55993 = r55989 + r55992;
        double r55994 = r55988 / r55993;
        double r55995 = r55987 - r55994;
        return r55995;
}


double f_of(float x, float y) {
        float r55996 = x;
        float r55997 = y;
        float r55998 = 1.0;
        float r55999 = r55996 * r55997;
        float r56000 = 2.0;
        float r56001 = r55999 / r56000;
        float r56002 = r55998 + r56001;
        float r56003 = r55997 / r56002;
        float r56004 = r55996 - r56003;
        return r56004;
}

double f_od(double x, double y) {
        double r56005 = x;
        double r56006 = y;
        double r56007 = 1.0;
        double r56008 = r56005 * r56006;
        double r56009 = 2.0;
        double r56010 = r56008 / r56009;
        double r56011 = r56007 + r56010;
        double r56012 = r56006 / r56011;
        double r56013 = r56005 - r56012;
        return r56013;
}

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 r56014, r56015, r56016, r56017, r56018, r56019, r56020, r56021, r56022;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r56014);
        mpfr_init(r56015);
        mpfr_init_set_str(r56016, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56017);
        mpfr_init_set_str(r56018, "2.0", 10, MPFR_RNDN);
        mpfr_init(r56019);
        mpfr_init(r56020);
        mpfr_init(r56021);
        mpfr_init(r56022);
}

double f_im(double x, double y) {
        mpfr_set_d(r56014, x, MPFR_RNDN);
        mpfr_set_d(r56015, y, MPFR_RNDN);
        ;
        mpfr_mul(r56017, r56014, r56015, MPFR_RNDN);
        ;
        mpfr_div(r56019, r56017, r56018, MPFR_RNDN);
        mpfr_add(r56020, r56016, r56019, MPFR_RNDN);
        mpfr_div(r56021, r56015, r56020, MPFR_RNDN);
        mpfr_sub(r56022, r56014, r56021, MPFR_RNDN);
        return mpfr_get_d(r56022, MPFR_RNDN);
}

static mpfr_t r56023, r56024, r56025, r56026, r56027, r56028, r56029, r56030, r56031;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56023);
        mpfr_init(r56024);
        mpfr_init_set_str(r56025, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56026);
        mpfr_init_set_str(r56027, "2.0", 10, MPFR_RNDN);
        mpfr_init(r56028);
        mpfr_init(r56029);
        mpfr_init(r56030);
        mpfr_init(r56031);
}

double f_fm(double x, double y) {
        mpfr_set_d(r56023, x, MPFR_RNDN);
        mpfr_set_d(r56024, y, MPFR_RNDN);
        ;
        mpfr_mul(r56026, r56023, r56024, MPFR_RNDN);
        ;
        mpfr_div(r56028, r56026, r56027, MPFR_RNDN);
        mpfr_add(r56029, r56025, r56028, MPFR_RNDN);
        mpfr_div(r56030, r56024, r56029, MPFR_RNDN);
        mpfr_sub(r56031, r56023, r56030, MPFR_RNDN);
        return mpfr_get_d(r56031, MPFR_RNDN);
}

static mpfr_t r56032, r56033, r56034, r56035, r56036, r56037, r56038, r56039, r56040;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56032);
        mpfr_init(r56033);
        mpfr_init_set_str(r56034, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56035);
        mpfr_init_set_str(r56036, "2.0", 10, MPFR_RNDN);
        mpfr_init(r56037);
        mpfr_init(r56038);
        mpfr_init(r56039);
        mpfr_init(r56040);
}

double f_dm(double x, double y) {
        mpfr_set_d(r56032, x, MPFR_RNDN);
        mpfr_set_d(r56033, y, MPFR_RNDN);
        ;
        mpfr_mul(r56035, r56032, r56033, MPFR_RNDN);
        ;
        mpfr_div(r56037, r56035, r56036, MPFR_RNDN);
        mpfr_add(r56038, r56034, r56037, MPFR_RNDN);
        mpfr_div(r56039, r56033, r56038, MPFR_RNDN);
        mpfr_sub(r56040, r56032, r56039, MPFR_RNDN);
        return mpfr_get_d(r56040, MPFR_RNDN);
}

