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

char *name = "Numeric.SpecFunctions:choose from math-functions-0.1.5.2";

double f_if(float x, float y, float z) {
        float r44831 = x;
        float r44832 = y;
        float r44833 = z;
        float r44834 = r44832 + r44833;
        float r44835 = r44831 * r44834;
        float r44836 = r44835 / r44833;
        return r44836;
}

double f_id(double x, double y, double z) {
        double r44837 = x;
        double r44838 = y;
        double r44839 = z;
        double r44840 = r44838 + r44839;
        double r44841 = r44837 * r44840;
        double r44842 = r44841 / r44839;
        return r44842;
}


double f_of(float x, float y, float z) {
        float r44843 = x;
        float r44844 = z;
        float r44845 = y;
        float r44846 = r44845 + r44844;
        float r44847 = r44844 / r44846;
        float r44848 = r44843 / r44847;
        return r44848;
}

double f_od(double x, double y, double z) {
        double r44849 = x;
        double r44850 = z;
        double r44851 = y;
        double r44852 = r44851 + r44850;
        double r44853 = r44850 / r44852;
        double r44854 = r44849 / r44853;
        return r44854;
}

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 r44855, r44856, r44857, r44858, r44859, r44860;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r44855);
        mpfr_init(r44856);
        mpfr_init(r44857);
        mpfr_init(r44858);
        mpfr_init(r44859);
        mpfr_init(r44860);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r44855, x, MPFR_RNDN);
        mpfr_set_d(r44856, y, MPFR_RNDN);
        mpfr_set_d(r44857, z, MPFR_RNDN);
        mpfr_add(r44858, r44856, r44857, MPFR_RNDN);
        mpfr_mul(r44859, r44855, r44858, MPFR_RNDN);
        mpfr_div(r44860, r44859, r44857, MPFR_RNDN);
        return mpfr_get_d(r44860, MPFR_RNDN);
}

static mpfr_t r44861, r44862, r44863, r44864, r44865, r44866;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r44861);
        mpfr_init(r44862);
        mpfr_init(r44863);
        mpfr_init(r44864);
        mpfr_init(r44865);
        mpfr_init(r44866);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r44861, x, MPFR_RNDN);
        mpfr_set_d(r44862, z, MPFR_RNDN);
        mpfr_set_d(r44863, y, MPFR_RNDN);
        mpfr_add(r44864, r44863, r44862, MPFR_RNDN);
        mpfr_div(r44865, r44862, r44864, MPFR_RNDN);
        mpfr_div(r44866, r44861, r44865, MPFR_RNDN);
        return mpfr_get_d(r44866, MPFR_RNDN);
}

static mpfr_t r44867, r44868, r44869, r44870, r44871, r44872;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r44867);
        mpfr_init(r44868);
        mpfr_init(r44869);
        mpfr_init(r44870);
        mpfr_init(r44871);
        mpfr_init(r44872);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r44867, x, MPFR_RNDN);
        mpfr_set_d(r44868, z, MPFR_RNDN);
        mpfr_set_d(r44869, y, MPFR_RNDN);
        mpfr_add(r44870, r44869, r44868, MPFR_RNDN);
        mpfr_div(r44871, r44868, r44870, MPFR_RNDN);
        mpfr_div(r44872, r44867, r44871, MPFR_RNDN);
        return mpfr_get_d(r44872, MPFR_RNDN);
}

