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

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

double f_if(float x, float y, float z) {
        float r42292 = x;
        float r42293 = y;
        float r42294 = r42292 / r42293;
        float r42295 = log(r42294);
        float r42296 = r42292 * r42295;
        float r42297 = z;
        float r42298 = r42296 - r42297;
        return r42298;
}

double f_id(double x, double y, double z) {
        double r42299 = x;
        double r42300 = y;
        double r42301 = r42299 / r42300;
        double r42302 = log(r42301);
        double r42303 = r42299 * r42302;
        double r42304 = z;
        double r42305 = r42303 - r42304;
        return r42305;
}


double f_of(float x, float y, float z) {
        float r42306 = y;
        float r42307 = 1.707486177612851e-299f;
        bool r42308 = r42306 <= r42307;
        float r42309 = x;
        float r42310 = r42309 / r42306;
        float r42311 = log(r42310);
        float r42312 = r42309 * r42311;
        float r42313 = z;
        float r42314 = r42312 - r42313;
        float r42315 = log(r42309);
        float r42316 = log(r42306);
        float r42317 = r42315 - r42316;
        float r42318 = r42309 * r42317;
        float r42319 = r42318 - r42313;
        float r42320 = r42308 ? r42314 : r42319;
        return r42320;
}

double f_od(double x, double y, double z) {
        double r42321 = y;
        double r42322 = 1.707486177612851e-299;
        bool r42323 = r42321 <= r42322;
        double r42324 = x;
        double r42325 = r42324 / r42321;
        double r42326 = log(r42325);
        double r42327 = r42324 * r42326;
        double r42328 = z;
        double r42329 = r42327 - r42328;
        double r42330 = log(r42324);
        double r42331 = log(r42321);
        double r42332 = r42330 - r42331;
        double r42333 = r42324 * r42332;
        double r42334 = r42333 - r42328;
        double r42335 = r42323 ? r42329 : r42334;
        return r42335;
}

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 r42336, r42337, r42338, r42339, r42340, r42341, r42342;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r42336);
        mpfr_init(r42337);
        mpfr_init(r42338);
        mpfr_init(r42339);
        mpfr_init(r42340);
        mpfr_init(r42341);
        mpfr_init(r42342);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r42336, x, MPFR_RNDN);
        mpfr_set_d(r42337, y, MPFR_RNDN);
        mpfr_div(r42338, r42336, r42337, MPFR_RNDN);
        mpfr_log(r42339, r42338, MPFR_RNDN);
        mpfr_mul(r42340, r42336, r42339, MPFR_RNDN);
        mpfr_set_d(r42341, z, MPFR_RNDN);
        mpfr_sub(r42342, r42340, r42341, MPFR_RNDN);
        return mpfr_get_d(r42342, MPFR_RNDN);
}

static mpfr_t r42343, r42344, r42345, r42346, r42347, r42348, r42349, r42350, r42351, r42352, r42353, r42354, r42355, r42356, r42357;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r42343);
        mpfr_init_set_str(r42344, "1.707486177612851e-299", 10, MPFR_RNDN);
        mpfr_init(r42345);
        mpfr_init(r42346);
        mpfr_init(r42347);
        mpfr_init(r42348);
        mpfr_init(r42349);
        mpfr_init(r42350);
        mpfr_init(r42351);
        mpfr_init(r42352);
        mpfr_init(r42353);
        mpfr_init(r42354);
        mpfr_init(r42355);
        mpfr_init(r42356);
        mpfr_init(r42357);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r42343, y, MPFR_RNDN);
        ;
        mpfr_set_si(r42345, mpfr_cmp(r42343, r42344) <= 0, MPFR_RNDN);
        mpfr_set_d(r42346, x, MPFR_RNDN);
        mpfr_div(r42347, r42346, r42343, MPFR_RNDN);
        mpfr_log(r42348, r42347, MPFR_RNDN);
        mpfr_mul(r42349, r42346, r42348, MPFR_RNDN);
        mpfr_set_d(r42350, z, MPFR_RNDN);
        mpfr_sub(r42351, r42349, r42350, MPFR_RNDN);
        mpfr_log(r42352, r42346, MPFR_RNDN);
        mpfr_log(r42353, r42343, MPFR_RNDN);
        mpfr_sub(r42354, r42352, r42353, MPFR_RNDN);
        mpfr_mul(r42355, r42346, r42354, MPFR_RNDN);
        mpfr_sub(r42356, r42355, r42350, MPFR_RNDN);
        if (mpfr_get_si(r42345, MPFR_RNDN)) { mpfr_set(r42357, r42351, MPFR_RNDN); } else { mpfr_set(r42357, r42356, MPFR_RNDN); };
        return mpfr_get_d(r42357, MPFR_RNDN);
}

static mpfr_t r42358, r42359, r42360, r42361, r42362, r42363, r42364, r42365, r42366, r42367, r42368, r42369, r42370, r42371, r42372;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r42358);
        mpfr_init_set_str(r42359, "1.707486177612851e-299", 10, MPFR_RNDN);
        mpfr_init(r42360);
        mpfr_init(r42361);
        mpfr_init(r42362);
        mpfr_init(r42363);
        mpfr_init(r42364);
        mpfr_init(r42365);
        mpfr_init(r42366);
        mpfr_init(r42367);
        mpfr_init(r42368);
        mpfr_init(r42369);
        mpfr_init(r42370);
        mpfr_init(r42371);
        mpfr_init(r42372);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r42358, y, MPFR_RNDN);
        ;
        mpfr_set_si(r42360, mpfr_cmp(r42358, r42359) <= 0, MPFR_RNDN);
        mpfr_set_d(r42361, x, MPFR_RNDN);
        mpfr_div(r42362, r42361, r42358, MPFR_RNDN);
        mpfr_log(r42363, r42362, MPFR_RNDN);
        mpfr_mul(r42364, r42361, r42363, MPFR_RNDN);
        mpfr_set_d(r42365, z, MPFR_RNDN);
        mpfr_sub(r42366, r42364, r42365, MPFR_RNDN);
        mpfr_log(r42367, r42361, MPFR_RNDN);
        mpfr_log(r42368, r42358, MPFR_RNDN);
        mpfr_sub(r42369, r42367, r42368, MPFR_RNDN);
        mpfr_mul(r42370, r42361, r42369, MPFR_RNDN);
        mpfr_sub(r42371, r42370, r42365, MPFR_RNDN);
        if (mpfr_get_si(r42360, MPFR_RNDN)) { mpfr_set(r42372, r42366, MPFR_RNDN); } else { mpfr_set(r42372, r42371, MPFR_RNDN); };
        return mpfr_get_d(r42372, MPFR_RNDN);
}

