#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 r41982 = x;
        float r41983 = y;
        float r41984 = z;
        float r41985 = r41983 + r41984;
        float r41986 = r41982 * r41985;
        float r41987 = r41986 / r41984;
        return r41987;
}

double f_id(double x, double y, double z) {
        double r41988 = x;
        double r41989 = y;
        double r41990 = z;
        double r41991 = r41989 + r41990;
        double r41992 = r41988 * r41991;
        double r41993 = r41992 / r41990;
        return r41993;
}


double f_of(float x, float y, float z) {
        float r41994 = x;
        float r41995 = -6.168596136367833e-58f;
        bool r41996 = r41994 <= r41995;
        float r41997 = y;
        float r41998 = z;
        float r41999 = r41997 + r41998;
        float r42000 = r41999 / r41998;
        float r42001 = r41994 * r42000;
        float r42002 = 6.519946701032483e+140f;
        bool r42003 = r41994 <= r42002;
        float r42004 = r41997 * r41994;
        float r42005 = r42004 / r41998;
        float r42006 = r42005 + r41994;
        float r42007 = r42003 ? r42006 : r42001;
        float r42008 = r41996 ? r42001 : r42007;
        return r42008;
}

double f_od(double x, double y, double z) {
        double r42009 = x;
        double r42010 = -6.168596136367833e-58;
        bool r42011 = r42009 <= r42010;
        double r42012 = y;
        double r42013 = z;
        double r42014 = r42012 + r42013;
        double r42015 = r42014 / r42013;
        double r42016 = r42009 * r42015;
        double r42017 = 6.519946701032483e+140;
        bool r42018 = r42009 <= r42017;
        double r42019 = r42012 * r42009;
        double r42020 = r42019 / r42013;
        double r42021 = r42020 + r42009;
        double r42022 = r42018 ? r42021 : r42016;
        double r42023 = r42011 ? r42016 : r42022;
        return r42023;
}

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 r42024, r42025, r42026, r42027, r42028, r42029;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r42024);
        mpfr_init(r42025);
        mpfr_init(r42026);
        mpfr_init(r42027);
        mpfr_init(r42028);
        mpfr_init(r42029);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r42024, x, MPFR_RNDN);
        mpfr_set_d(r42025, y, MPFR_RNDN);
        mpfr_set_d(r42026, z, MPFR_RNDN);
        mpfr_add(r42027, r42025, r42026, MPFR_RNDN);
        mpfr_mul(r42028, r42024, r42027, MPFR_RNDN);
        mpfr_div(r42029, r42028, r42026, MPFR_RNDN);
        return mpfr_get_d(r42029, MPFR_RNDN);
}

static mpfr_t r42030, r42031, r42032, r42033, r42034, r42035, r42036, r42037, r42038, r42039, r42040, r42041, r42042, r42043, r42044;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r42030);
        mpfr_init_set_str(r42031, "-6.168596136367833e-58", 10, MPFR_RNDN);
        mpfr_init(r42032);
        mpfr_init(r42033);
        mpfr_init(r42034);
        mpfr_init(r42035);
        mpfr_init(r42036);
        mpfr_init(r42037);
        mpfr_init_set_str(r42038, "6.519946701032483e+140", 10, MPFR_RNDN);
        mpfr_init(r42039);
        mpfr_init(r42040);
        mpfr_init(r42041);
        mpfr_init(r42042);
        mpfr_init(r42043);
        mpfr_init(r42044);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r42030, x, MPFR_RNDN);
        ;
        mpfr_set_si(r42032, mpfr_cmp(r42030, r42031) <= 0, MPFR_RNDN);
        mpfr_set_d(r42033, y, MPFR_RNDN);
        mpfr_set_d(r42034, z, MPFR_RNDN);
        mpfr_add(r42035, r42033, r42034, MPFR_RNDN);
        mpfr_div(r42036, r42035, r42034, MPFR_RNDN);
        mpfr_mul(r42037, r42030, r42036, MPFR_RNDN);
        ;
        mpfr_set_si(r42039, mpfr_cmp(r42030, r42038) <= 0, MPFR_RNDN);
        mpfr_mul(r42040, r42033, r42030, MPFR_RNDN);
        mpfr_div(r42041, r42040, r42034, MPFR_RNDN);
        mpfr_add(r42042, r42041, r42030, MPFR_RNDN);
        if (mpfr_get_si(r42039, MPFR_RNDN)) { mpfr_set(r42043, r42042, MPFR_RNDN); } else { mpfr_set(r42043, r42037, MPFR_RNDN); };
        if (mpfr_get_si(r42032, MPFR_RNDN)) { mpfr_set(r42044, r42037, MPFR_RNDN); } else { mpfr_set(r42044, r42043, MPFR_RNDN); };
        return mpfr_get_d(r42044, MPFR_RNDN);
}

static mpfr_t r42045, r42046, r42047, r42048, r42049, r42050, r42051, r42052, r42053, r42054, r42055, r42056, r42057, r42058, r42059;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r42045);
        mpfr_init_set_str(r42046, "-6.168596136367833e-58", 10, MPFR_RNDN);
        mpfr_init(r42047);
        mpfr_init(r42048);
        mpfr_init(r42049);
        mpfr_init(r42050);
        mpfr_init(r42051);
        mpfr_init(r42052);
        mpfr_init_set_str(r42053, "6.519946701032483e+140", 10, MPFR_RNDN);
        mpfr_init(r42054);
        mpfr_init(r42055);
        mpfr_init(r42056);
        mpfr_init(r42057);
        mpfr_init(r42058);
        mpfr_init(r42059);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r42045, x, MPFR_RNDN);
        ;
        mpfr_set_si(r42047, mpfr_cmp(r42045, r42046) <= 0, MPFR_RNDN);
        mpfr_set_d(r42048, y, MPFR_RNDN);
        mpfr_set_d(r42049, z, MPFR_RNDN);
        mpfr_add(r42050, r42048, r42049, MPFR_RNDN);
        mpfr_div(r42051, r42050, r42049, MPFR_RNDN);
        mpfr_mul(r42052, r42045, r42051, MPFR_RNDN);
        ;
        mpfr_set_si(r42054, mpfr_cmp(r42045, r42053) <= 0, MPFR_RNDN);
        mpfr_mul(r42055, r42048, r42045, MPFR_RNDN);
        mpfr_div(r42056, r42055, r42049, MPFR_RNDN);
        mpfr_add(r42057, r42056, r42045, MPFR_RNDN);
        if (mpfr_get_si(r42054, MPFR_RNDN)) { mpfr_set(r42058, r42057, MPFR_RNDN); } else { mpfr_set(r42058, r42052, MPFR_RNDN); };
        if (mpfr_get_si(r42047, MPFR_RNDN)) { mpfr_set(r42059, r42052, MPFR_RNDN); } else { mpfr_set(r42059, r42058, MPFR_RNDN); };
        return mpfr_get_d(r42059, MPFR_RNDN);
}

