#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 r56036 = x;
        float r56037 = y;
        float r56038 = 1.0;
        float r56039 = r56036 * r56037;
        float r56040 = 2.0;
        float r56041 = r56039 / r56040;
        float r56042 = r56038 + r56041;
        float r56043 = r56037 / r56042;
        float r56044 = r56036 - r56043;
        return r56044;
}

double f_id(double x, double y) {
        double r56045 = x;
        double r56046 = y;
        double r56047 = 1.0;
        double r56048 = r56045 * r56046;
        double r56049 = 2.0;
        double r56050 = r56048 / r56049;
        double r56051 = r56047 + r56050;
        double r56052 = r56046 / r56051;
        double r56053 = r56045 - r56052;
        return r56053;
}


double f_of(float x, float y) {
        float r56054 = x;
        float r56055 = y;
        float r56056 = 1.0;
        float r56057 = r56054 * r56055;
        float r56058 = 2.0;
        float r56059 = r56057 / r56058;
        float r56060 = r56056 + r56059;
        float r56061 = r56055 / r56060;
        float r56062 = r56054 - r56061;
        return r56062;
}

double f_od(double x, double y) {
        double r56063 = x;
        double r56064 = y;
        double r56065 = 1.0;
        double r56066 = r56063 * r56064;
        double r56067 = 2.0;
        double r56068 = r56066 / r56067;
        double r56069 = r56065 + r56068;
        double r56070 = r56064 / r56069;
        double r56071 = r56063 - r56070;
        return r56071;
}

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 r56072, r56073, r56074, r56075, r56076, r56077, r56078, r56079, r56080;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r56072);
        mpfr_init(r56073);
        mpfr_init_set_str(r56074, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56075);
        mpfr_init_set_str(r56076, "2.0", 10, MPFR_RNDN);
        mpfr_init(r56077);
        mpfr_init(r56078);
        mpfr_init(r56079);
        mpfr_init(r56080);
}

double f_im(double x, double y) {
        mpfr_set_d(r56072, x, MPFR_RNDN);
        mpfr_set_d(r56073, y, MPFR_RNDN);
        ;
        mpfr_mul(r56075, r56072, r56073, MPFR_RNDN);
        ;
        mpfr_div(r56077, r56075, r56076, MPFR_RNDN);
        mpfr_add(r56078, r56074, r56077, MPFR_RNDN);
        mpfr_div(r56079, r56073, r56078, MPFR_RNDN);
        mpfr_sub(r56080, r56072, r56079, MPFR_RNDN);
        return mpfr_get_d(r56080, MPFR_RNDN);
}

static mpfr_t r56081, r56082, r56083, r56084, r56085, r56086, r56087, r56088, r56089;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56081);
        mpfr_init(r56082);
        mpfr_init_set_str(r56083, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56084);
        mpfr_init_set_str(r56085, "2.0", 10, MPFR_RNDN);
        mpfr_init(r56086);
        mpfr_init(r56087);
        mpfr_init(r56088);
        mpfr_init(r56089);
}

double f_fm(double x, double y) {
        mpfr_set_d(r56081, x, MPFR_RNDN);
        mpfr_set_d(r56082, y, MPFR_RNDN);
        ;
        mpfr_mul(r56084, r56081, r56082, MPFR_RNDN);
        ;
        mpfr_div(r56086, r56084, r56085, MPFR_RNDN);
        mpfr_add(r56087, r56083, r56086, MPFR_RNDN);
        mpfr_div(r56088, r56082, r56087, MPFR_RNDN);
        mpfr_sub(r56089, r56081, r56088, MPFR_RNDN);
        return mpfr_get_d(r56089, MPFR_RNDN);
}

static mpfr_t r56090, r56091, r56092, r56093, r56094, r56095, r56096, r56097, r56098;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56090);
        mpfr_init(r56091);
        mpfr_init_set_str(r56092, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56093);
        mpfr_init_set_str(r56094, "2.0", 10, MPFR_RNDN);
        mpfr_init(r56095);
        mpfr_init(r56096);
        mpfr_init(r56097);
        mpfr_init(r56098);
}

double f_dm(double x, double y) {
        mpfr_set_d(r56090, x, MPFR_RNDN);
        mpfr_set_d(r56091, y, MPFR_RNDN);
        ;
        mpfr_mul(r56093, r56090, r56091, MPFR_RNDN);
        ;
        mpfr_div(r56095, r56093, r56094, MPFR_RNDN);
        mpfr_add(r56096, r56092, r56095, MPFR_RNDN);
        mpfr_div(r56097, r56091, r56096, MPFR_RNDN);
        mpfr_sub(r56098, r56090, r56097, MPFR_RNDN);
        return mpfr_get_d(r56098, MPFR_RNDN);
}

