#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 r55970 = x;
        float r55971 = y;
        float r55972 = 1.0;
        float r55973 = r55970 * r55971;
        float r55974 = 2.0;
        float r55975 = r55973 / r55974;
        float r55976 = r55972 + r55975;
        float r55977 = r55971 / r55976;
        float r55978 = r55970 - r55977;
        return r55978;
}

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


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

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

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 r56006, r56007, r56008, r56009, r56010, r56011, r56012, r56013, r56014;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r56006);
        mpfr_init(r56007);
        mpfr_init_set_str(r56008, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56009);
        mpfr_init_set_str(r56010, "2.0", 10, MPFR_RNDN);
        mpfr_init(r56011);
        mpfr_init(r56012);
        mpfr_init(r56013);
        mpfr_init(r56014);
}

double f_im(double x, double y) {
        mpfr_set_d(r56006, x, MPFR_RNDN);
        mpfr_set_d(r56007, y, MPFR_RNDN);
        ;
        mpfr_mul(r56009, r56006, r56007, MPFR_RNDN);
        ;
        mpfr_div(r56011, r56009, r56010, MPFR_RNDN);
        mpfr_add(r56012, r56008, r56011, MPFR_RNDN);
        mpfr_div(r56013, r56007, r56012, MPFR_RNDN);
        mpfr_sub(r56014, r56006, r56013, MPFR_RNDN);
        return mpfr_get_d(r56014, MPFR_RNDN);
}

static mpfr_t r56015, r56016, r56017, r56018, r56019, r56020, r56021, r56022, r56023;

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

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

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

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

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

