#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 r45331 = x;
        float r45332 = y;
        float r45333 = r45331 / r45332;
        float r45334 = log(r45333);
        float r45335 = r45331 * r45334;
        float r45336 = z;
        float r45337 = r45335 - r45336;
        return r45337;
}

double f_id(double x, double y, double z) {
        double r45338 = x;
        double r45339 = y;
        double r45340 = r45338 / r45339;
        double r45341 = log(r45340);
        double r45342 = r45338 * r45341;
        double r45343 = z;
        double r45344 = r45342 - r45343;
        return r45344;
}


double f_of(float x, float y, float z) {
        float r45345 = y;
        float r45346 = 1.0547965810207488e-305;
        bool r45347 = r45345 <= r45346;
        float r45348 = x;
        float r45349 = r45348 / r45345;
        float r45350 = cbrt(r45349);
        float r45351 = log(r45350);
        float r45352 = r45348 + r45348;
        float r45353 = r45351 * r45352;
        float r45354 = r45348 * r45351;
        float r45355 = r45353 + r45354;
        float r45356 = z;
        float r45357 = r45355 - r45356;
        float r45358 = log(r45348);
        float r45359 = log(r45345);
        float r45360 = r45358 - r45359;
        float r45361 = r45348 * r45360;
        float r45362 = r45361 - r45356;
        float r45363 = r45347 ? r45357 : r45362;
        return r45363;
}

double f_od(double x, double y, double z) {
        double r45364 = y;
        double r45365 = 1.0547965810207488e-305;
        bool r45366 = r45364 <= r45365;
        double r45367 = x;
        double r45368 = r45367 / r45364;
        double r45369 = cbrt(r45368);
        double r45370 = log(r45369);
        double r45371 = r45367 + r45367;
        double r45372 = r45370 * r45371;
        double r45373 = r45367 * r45370;
        double r45374 = r45372 + r45373;
        double r45375 = z;
        double r45376 = r45374 - r45375;
        double r45377 = log(r45367);
        double r45378 = log(r45364);
        double r45379 = r45377 - r45378;
        double r45380 = r45367 * r45379;
        double r45381 = r45380 - r45375;
        double r45382 = r45366 ? r45376 : r45381;
        return r45382;
}

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 r45383, r45384, r45385, r45386, r45387, r45388, r45389;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45383);
        mpfr_init(r45384);
        mpfr_init(r45385);
        mpfr_init(r45386);
        mpfr_init(r45387);
        mpfr_init(r45388);
        mpfr_init(r45389);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r45383, x, MPFR_RNDN);
        mpfr_set_d(r45384, y, MPFR_RNDN);
        mpfr_div(r45385, r45383, r45384, MPFR_RNDN);
        mpfr_log(r45386, r45385, MPFR_RNDN);
        mpfr_mul(r45387, r45383, r45386, MPFR_RNDN);
        mpfr_set_d(r45388, z, MPFR_RNDN);
        mpfr_sub(r45389, r45387, r45388, MPFR_RNDN);
        return mpfr_get_d(r45389, MPFR_RNDN);
}

static mpfr_t r45390, r45391, r45392, r45393, r45394, r45395, r45396, r45397, r45398, r45399, r45400, r45401, r45402, r45403, r45404, r45405, r45406, r45407, r45408;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45390);
        mpfr_init_set_str(r45391, "1.0547965810207488e-305", 10, MPFR_RNDN);
        mpfr_init(r45392);
        mpfr_init(r45393);
        mpfr_init(r45394);
        mpfr_init(r45395);
        mpfr_init(r45396);
        mpfr_init(r45397);
        mpfr_init(r45398);
        mpfr_init(r45399);
        mpfr_init(r45400);
        mpfr_init(r45401);
        mpfr_init(r45402);
        mpfr_init(r45403);
        mpfr_init(r45404);
        mpfr_init(r45405);
        mpfr_init(r45406);
        mpfr_init(r45407);
        mpfr_init(r45408);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r45390, y, MPFR_RNDN);
        ;
        mpfr_set_si(r45392, mpfr_cmp(r45390, r45391) <= 0, MPFR_RNDN);
        mpfr_set_d(r45393, x, MPFR_RNDN);
        mpfr_div(r45394, r45393, r45390, MPFR_RNDN);
        mpfr_cbrt(r45395, r45394, MPFR_RNDN);
        mpfr_log(r45396, r45395, MPFR_RNDN);
        mpfr_add(r45397, r45393, r45393, MPFR_RNDN);
        mpfr_mul(r45398, r45396, r45397, MPFR_RNDN);
        mpfr_mul(r45399, r45393, r45396, MPFR_RNDN);
        mpfr_add(r45400, r45398, r45399, MPFR_RNDN);
        mpfr_set_d(r45401, z, MPFR_RNDN);
        mpfr_sub(r45402, r45400, r45401, MPFR_RNDN);
        mpfr_log(r45403, r45393, MPFR_RNDN);
        mpfr_log(r45404, r45390, MPFR_RNDN);
        mpfr_sub(r45405, r45403, r45404, MPFR_RNDN);
        mpfr_mul(r45406, r45393, r45405, MPFR_RNDN);
        mpfr_sub(r45407, r45406, r45401, MPFR_RNDN);
        if (mpfr_get_si(r45392, MPFR_RNDN)) { mpfr_set(r45408, r45402, MPFR_RNDN); } else { mpfr_set(r45408, r45407, MPFR_RNDN); };
        return mpfr_get_d(r45408, MPFR_RNDN);
}

static mpfr_t r45409, r45410, r45411, r45412, r45413, r45414, r45415, r45416, r45417, r45418, r45419, r45420, r45421, r45422, r45423, r45424, r45425, r45426, r45427;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45409);
        mpfr_init_set_str(r45410, "1.0547965810207488e-305", 10, MPFR_RNDN);
        mpfr_init(r45411);
        mpfr_init(r45412);
        mpfr_init(r45413);
        mpfr_init(r45414);
        mpfr_init(r45415);
        mpfr_init(r45416);
        mpfr_init(r45417);
        mpfr_init(r45418);
        mpfr_init(r45419);
        mpfr_init(r45420);
        mpfr_init(r45421);
        mpfr_init(r45422);
        mpfr_init(r45423);
        mpfr_init(r45424);
        mpfr_init(r45425);
        mpfr_init(r45426);
        mpfr_init(r45427);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r45409, y, MPFR_RNDN);
        ;
        mpfr_set_si(r45411, mpfr_cmp(r45409, r45410) <= 0, MPFR_RNDN);
        mpfr_set_d(r45412, x, MPFR_RNDN);
        mpfr_div(r45413, r45412, r45409, MPFR_RNDN);
        mpfr_cbrt(r45414, r45413, MPFR_RNDN);
        mpfr_log(r45415, r45414, MPFR_RNDN);
        mpfr_add(r45416, r45412, r45412, MPFR_RNDN);
        mpfr_mul(r45417, r45415, r45416, MPFR_RNDN);
        mpfr_mul(r45418, r45412, r45415, MPFR_RNDN);
        mpfr_add(r45419, r45417, r45418, MPFR_RNDN);
        mpfr_set_d(r45420, z, MPFR_RNDN);
        mpfr_sub(r45421, r45419, r45420, MPFR_RNDN);
        mpfr_log(r45422, r45412, MPFR_RNDN);
        mpfr_log(r45423, r45409, MPFR_RNDN);
        mpfr_sub(r45424, r45422, r45423, MPFR_RNDN);
        mpfr_mul(r45425, r45412, r45424, MPFR_RNDN);
        mpfr_sub(r45426, r45425, r45420, MPFR_RNDN);
        if (mpfr_get_si(r45411, MPFR_RNDN)) { mpfr_set(r45427, r45421, MPFR_RNDN); } else { mpfr_set(r45427, r45426, MPFR_RNDN); };
        return mpfr_get_d(r45427, MPFR_RNDN);
}

