#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 r56114 = x;
        float r56115 = y;
        float r56116 = 1.0;
        float r56117 = r56114 * r56115;
        float r56118 = 2.0;
        float r56119 = r56117 / r56118;
        float r56120 = r56116 + r56119;
        float r56121 = r56115 / r56120;
        float r56122 = r56114 - r56121;
        return r56122;
}

double f_id(double x, double y) {
        double r56123 = x;
        double r56124 = y;
        double r56125 = 1.0;
        double r56126 = r56123 * r56124;
        double r56127 = 2.0;
        double r56128 = r56126 / r56127;
        double r56129 = r56125 + r56128;
        double r56130 = r56124 / r56129;
        double r56131 = r56123 - r56130;
        return r56131;
}


double f_of(float x, float y) {
        float r56132 = x;
        float r56133 = y;
        float r56134 = 1.0;
        float r56135 = r56132 * r56133;
        float r56136 = 2.0;
        float r56137 = r56135 / r56136;
        float r56138 = r56134 + r56137;
        float r56139 = r56133 / r56138;
        float r56140 = r56132 - r56139;
        return r56140;
}

double f_od(double x, double y) {
        double r56141 = x;
        double r56142 = y;
        double r56143 = 1.0;
        double r56144 = r56141 * r56142;
        double r56145 = 2.0;
        double r56146 = r56144 / r56145;
        double r56147 = r56143 + r56146;
        double r56148 = r56142 / r56147;
        double r56149 = r56141 - r56148;
        return r56149;
}

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 r56150, r56151, r56152, r56153, r56154, r56155, r56156, r56157, r56158;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r56150);
        mpfr_init(r56151);
        mpfr_init_set_str(r56152, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56153);
        mpfr_init_set_str(r56154, "2.0", 10, MPFR_RNDN);
        mpfr_init(r56155);
        mpfr_init(r56156);
        mpfr_init(r56157);
        mpfr_init(r56158);
}

double f_im(double x, double y) {
        mpfr_set_d(r56150, x, MPFR_RNDN);
        mpfr_set_d(r56151, y, MPFR_RNDN);
        ;
        mpfr_mul(r56153, r56150, r56151, MPFR_RNDN);
        ;
        mpfr_div(r56155, r56153, r56154, MPFR_RNDN);
        mpfr_add(r56156, r56152, r56155, MPFR_RNDN);
        mpfr_div(r56157, r56151, r56156, MPFR_RNDN);
        mpfr_sub(r56158, r56150, r56157, MPFR_RNDN);
        return mpfr_get_d(r56158, MPFR_RNDN);
}

static mpfr_t r56159, r56160, r56161, r56162, r56163, r56164, r56165, r56166, r56167;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56159);
        mpfr_init(r56160);
        mpfr_init_set_str(r56161, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56162);
        mpfr_init_set_str(r56163, "2.0", 10, MPFR_RNDN);
        mpfr_init(r56164);
        mpfr_init(r56165);
        mpfr_init(r56166);
        mpfr_init(r56167);
}

double f_fm(double x, double y) {
        mpfr_set_d(r56159, x, MPFR_RNDN);
        mpfr_set_d(r56160, y, MPFR_RNDN);
        ;
        mpfr_mul(r56162, r56159, r56160, MPFR_RNDN);
        ;
        mpfr_div(r56164, r56162, r56163, MPFR_RNDN);
        mpfr_add(r56165, r56161, r56164, MPFR_RNDN);
        mpfr_div(r56166, r56160, r56165, MPFR_RNDN);
        mpfr_sub(r56167, r56159, r56166, MPFR_RNDN);
        return mpfr_get_d(r56167, MPFR_RNDN);
}

static mpfr_t r56168, r56169, r56170, r56171, r56172, r56173, r56174, r56175, r56176;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56168);
        mpfr_init(r56169);
        mpfr_init_set_str(r56170, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56171);
        mpfr_init_set_str(r56172, "2.0", 10, MPFR_RNDN);
        mpfr_init(r56173);
        mpfr_init(r56174);
        mpfr_init(r56175);
        mpfr_init(r56176);
}

double f_dm(double x, double y) {
        mpfr_set_d(r56168, x, MPFR_RNDN);
        mpfr_set_d(r56169, y, MPFR_RNDN);
        ;
        mpfr_mul(r56171, r56168, r56169, MPFR_RNDN);
        ;
        mpfr_div(r56173, r56171, r56172, MPFR_RNDN);
        mpfr_add(r56174, r56170, r56173, MPFR_RNDN);
        mpfr_div(r56175, r56169, r56174, MPFR_RNDN);
        mpfr_sub(r56176, r56168, r56175, MPFR_RNDN);
        return mpfr_get_d(r56176, MPFR_RNDN);
}

