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

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

double f_if(float x, float y, float z) {
        float r40687 = x;
        float r40688 = y;
        float r40689 = log(r40688);
        float r40690 = r40688 * r40689;
        float r40691 = r40687 + r40690;
        float r40692 = z;
        float r40693 = r40691 - r40692;
        float r40694 = exp(r40693);
        return r40694;
}

double f_id(double x, double y, double z) {
        double r40695 = x;
        double r40696 = y;
        double r40697 = log(r40696);
        double r40698 = r40696 * r40697;
        double r40699 = r40695 + r40698;
        double r40700 = z;
        double r40701 = r40699 - r40700;
        double r40702 = exp(r40701);
        return r40702;
}


double f_of(float x, float y, float z) {
        float r40703 = x;
        float r40704 = y;
        float r40705 = log(r40704);
        float r40706 = r40704 * r40705;
        float r40707 = r40703 + r40706;
        float r40708 = z;
        float r40709 = r40707 - r40708;
        float r40710 = exp(r40709);
        return r40710;
}

double f_od(double x, double y, double z) {
        double r40711 = x;
        double r40712 = y;
        double r40713 = log(r40712);
        double r40714 = r40712 * r40713;
        double r40715 = r40711 + r40714;
        double r40716 = z;
        double r40717 = r40715 - r40716;
        double r40718 = exp(r40717);
        return r40718;
}

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 r40719, r40720, r40721, r40722, r40723, r40724, r40725, r40726;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r40719);
        mpfr_init(r40720);
        mpfr_init(r40721);
        mpfr_init(r40722);
        mpfr_init(r40723);
        mpfr_init(r40724);
        mpfr_init(r40725);
        mpfr_init(r40726);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r40719, x, MPFR_RNDN);
        mpfr_set_d(r40720, y, MPFR_RNDN);
        mpfr_log(r40721, r40720, MPFR_RNDN);
        mpfr_mul(r40722, r40720, r40721, MPFR_RNDN);
        mpfr_add(r40723, r40719, r40722, MPFR_RNDN);
        mpfr_set_d(r40724, z, MPFR_RNDN);
        mpfr_sub(r40725, r40723, r40724, MPFR_RNDN);
        mpfr_exp(r40726, r40725, MPFR_RNDN);
        return mpfr_get_d(r40726, MPFR_RNDN);
}

static mpfr_t r40727, r40728, r40729, r40730, r40731, r40732, r40733, r40734;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r40727);
        mpfr_init(r40728);
        mpfr_init(r40729);
        mpfr_init(r40730);
        mpfr_init(r40731);
        mpfr_init(r40732);
        mpfr_init(r40733);
        mpfr_init(r40734);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r40727, x, MPFR_RNDN);
        mpfr_set_d(r40728, y, MPFR_RNDN);
        mpfr_log(r40729, r40728, MPFR_RNDN);
        mpfr_mul(r40730, r40728, r40729, MPFR_RNDN);
        mpfr_add(r40731, r40727, r40730, MPFR_RNDN);
        mpfr_set_d(r40732, z, MPFR_RNDN);
        mpfr_sub(r40733, r40731, r40732, MPFR_RNDN);
        mpfr_exp(r40734, r40733, MPFR_RNDN);
        return mpfr_get_d(r40734, MPFR_RNDN);
}

static mpfr_t r40735, r40736, r40737, r40738, r40739, r40740, r40741, r40742;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r40735);
        mpfr_init(r40736);
        mpfr_init(r40737);
        mpfr_init(r40738);
        mpfr_init(r40739);
        mpfr_init(r40740);
        mpfr_init(r40741);
        mpfr_init(r40742);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r40735, x, MPFR_RNDN);
        mpfr_set_d(r40736, y, MPFR_RNDN);
        mpfr_log(r40737, r40736, MPFR_RNDN);
        mpfr_mul(r40738, r40736, r40737, MPFR_RNDN);
        mpfr_add(r40739, r40735, r40738, MPFR_RNDN);
        mpfr_set_d(r40740, z, MPFR_RNDN);
        mpfr_sub(r40741, r40739, r40740, MPFR_RNDN);
        mpfr_exp(r40742, r40741, MPFR_RNDN);
        return mpfr_get_d(r40742, MPFR_RNDN);
}

