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

char *name = "Statistics.Distribution.Poisson:$clogProbability from math-functions-0.1.5.2";

double f_if(float x, float y, float z) {
        float r40426 = x;
        float r40427 = y;
        float r40428 = log(r40427);
        float r40429 = r40426 * r40428;
        float r40430 = z;
        float r40431 = r40429 - r40430;
        float r40432 = r40431 - r40427;
        return r40432;
}

double f_id(double x, double y, double z) {
        double r40433 = x;
        double r40434 = y;
        double r40435 = log(r40434);
        double r40436 = r40433 * r40435;
        double r40437 = z;
        double r40438 = r40436 - r40437;
        double r40439 = r40438 - r40434;
        return r40439;
}


double f_of(float x, float y, float z) {
        float r40440 = x;
        float r40441 = y;
        float r40442 = log(r40441);
        float r40443 = r40440 * r40442;
        float r40444 = z;
        float r40445 = r40443 - r40444;
        float r40446 = r40445 - r40441;
        return r40446;
}

double f_od(double x, double y, double z) {
        double r40447 = x;
        double r40448 = y;
        double r40449 = log(r40448);
        double r40450 = r40447 * r40449;
        double r40451 = z;
        double r40452 = r40450 - r40451;
        double r40453 = r40452 - r40448;
        return r40453;
}

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 r40454, r40455, r40456, r40457, r40458, r40459, r40460;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r40454);
        mpfr_init(r40455);
        mpfr_init(r40456);
        mpfr_init(r40457);
        mpfr_init(r40458);
        mpfr_init(r40459);
        mpfr_init(r40460);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r40454, x, MPFR_RNDN);
        mpfr_set_d(r40455, y, MPFR_RNDN);
        mpfr_log(r40456, r40455, MPFR_RNDN);
        mpfr_mul(r40457, r40454, r40456, MPFR_RNDN);
        mpfr_set_d(r40458, z, MPFR_RNDN);
        mpfr_sub(r40459, r40457, r40458, MPFR_RNDN);
        mpfr_sub(r40460, r40459, r40455, MPFR_RNDN);
        return mpfr_get_d(r40460, MPFR_RNDN);
}

static mpfr_t r40461, r40462, r40463, r40464, r40465, r40466, r40467;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r40461);
        mpfr_init(r40462);
        mpfr_init(r40463);
        mpfr_init(r40464);
        mpfr_init(r40465);
        mpfr_init(r40466);
        mpfr_init(r40467);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r40461, x, MPFR_RNDN);
        mpfr_set_d(r40462, y, MPFR_RNDN);
        mpfr_log(r40463, r40462, MPFR_RNDN);
        mpfr_mul(r40464, r40461, r40463, MPFR_RNDN);
        mpfr_set_d(r40465, z, MPFR_RNDN);
        mpfr_sub(r40466, r40464, r40465, MPFR_RNDN);
        mpfr_sub(r40467, r40466, r40462, MPFR_RNDN);
        return mpfr_get_d(r40467, MPFR_RNDN);
}

static mpfr_t r40468, r40469, r40470, r40471, r40472, r40473, r40474;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r40468);
        mpfr_init(r40469);
        mpfr_init(r40470);
        mpfr_init(r40471);
        mpfr_init(r40472);
        mpfr_init(r40473);
        mpfr_init(r40474);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r40468, x, MPFR_RNDN);
        mpfr_set_d(r40469, y, MPFR_RNDN);
        mpfr_log(r40470, r40469, MPFR_RNDN);
        mpfr_mul(r40471, r40468, r40470, MPFR_RNDN);
        mpfr_set_d(r40472, z, MPFR_RNDN);
        mpfr_sub(r40473, r40471, r40472, MPFR_RNDN);
        mpfr_sub(r40474, r40473, r40469, MPFR_RNDN);
        return mpfr_get_d(r40474, MPFR_RNDN);
}

