#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 r36844 = x;
        float r36845 = y;
        float r36846 = log(r36845);
        float r36847 = r36844 * r36846;
        float r36848 = z;
        float r36849 = r36847 - r36848;
        float r36850 = r36849 - r36845;
        return r36850;
}

double f_id(double x, double y, double z) {
        double r36851 = x;
        double r36852 = y;
        double r36853 = log(r36852);
        double r36854 = r36851 * r36853;
        double r36855 = z;
        double r36856 = r36854 - r36855;
        double r36857 = r36856 - r36852;
        return r36857;
}


double f_of(float x, float y, float z) {
        float r36858 = x;
        float r36859 = y;
        float r36860 = log(r36859);
        float r36861 = r36858 * r36860;
        float r36862 = z;
        float r36863 = r36861 - r36862;
        float r36864 = r36863 - r36859;
        return r36864;
}

double f_od(double x, double y, double z) {
        double r36865 = x;
        double r36866 = y;
        double r36867 = log(r36866);
        double r36868 = r36865 * r36867;
        double r36869 = z;
        double r36870 = r36868 - r36869;
        double r36871 = r36870 - r36866;
        return r36871;
}

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 r36872, r36873, r36874, r36875, r36876, r36877, r36878;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r36872);
        mpfr_init(r36873);
        mpfr_init(r36874);
        mpfr_init(r36875);
        mpfr_init(r36876);
        mpfr_init(r36877);
        mpfr_init(r36878);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r36872, x, MPFR_RNDN);
        mpfr_set_d(r36873, y, MPFR_RNDN);
        mpfr_log(r36874, r36873, MPFR_RNDN);
        mpfr_mul(r36875, r36872, r36874, MPFR_RNDN);
        mpfr_set_d(r36876, z, MPFR_RNDN);
        mpfr_sub(r36877, r36875, r36876, MPFR_RNDN);
        mpfr_sub(r36878, r36877, r36873, MPFR_RNDN);
        return mpfr_get_d(r36878, MPFR_RNDN);
}

static mpfr_t r36879, r36880, r36881, r36882, r36883, r36884, r36885;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r36879);
        mpfr_init(r36880);
        mpfr_init(r36881);
        mpfr_init(r36882);
        mpfr_init(r36883);
        mpfr_init(r36884);
        mpfr_init(r36885);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r36879, x, MPFR_RNDN);
        mpfr_set_d(r36880, y, MPFR_RNDN);
        mpfr_log(r36881, r36880, MPFR_RNDN);
        mpfr_mul(r36882, r36879, r36881, MPFR_RNDN);
        mpfr_set_d(r36883, z, MPFR_RNDN);
        mpfr_sub(r36884, r36882, r36883, MPFR_RNDN);
        mpfr_sub(r36885, r36884, r36880, MPFR_RNDN);
        return mpfr_get_d(r36885, MPFR_RNDN);
}

static mpfr_t r36886, r36887, r36888, r36889, r36890, r36891, r36892;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r36886);
        mpfr_init(r36887);
        mpfr_init(r36888);
        mpfr_init(r36889);
        mpfr_init(r36890);
        mpfr_init(r36891);
        mpfr_init(r36892);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r36886, x, MPFR_RNDN);
        mpfr_set_d(r36887, y, MPFR_RNDN);
        mpfr_log(r36888, r36887, MPFR_RNDN);
        mpfr_mul(r36889, r36886, r36888, MPFR_RNDN);
        mpfr_set_d(r36890, z, MPFR_RNDN);
        mpfr_sub(r36891, r36889, r36890, MPFR_RNDN);
        mpfr_sub(r36892, r36891, r36887, MPFR_RNDN);
        return mpfr_get_d(r36892, MPFR_RNDN);
}

