#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 r40346 = x;
        float r40347 = y;
        float r40348 = log(r40347);
        float r40349 = r40346 * r40348;
        float r40350 = z;
        float r40351 = r40349 - r40350;
        float r40352 = r40351 - r40347;
        return r40352;
}

double f_id(double x, double y, double z) {
        double r40353 = x;
        double r40354 = y;
        double r40355 = log(r40354);
        double r40356 = r40353 * r40355;
        double r40357 = z;
        double r40358 = r40356 - r40357;
        double r40359 = r40358 - r40354;
        return r40359;
}


double f_of(float x, float y, float z) {
        float r40360 = x;
        float r40361 = y;
        float r40362 = log(r40361);
        float r40363 = r40360 * r40362;
        float r40364 = z;
        float r40365 = r40363 - r40364;
        float r40366 = r40365 - r40361;
        return r40366;
}

double f_od(double x, double y, double z) {
        double r40367 = x;
        double r40368 = y;
        double r40369 = log(r40368);
        double r40370 = r40367 * r40369;
        double r40371 = z;
        double r40372 = r40370 - r40371;
        double r40373 = r40372 - r40368;
        return r40373;
}

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 r40374, r40375, r40376, r40377, r40378, r40379, r40380;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r40374);
        mpfr_init(r40375);
        mpfr_init(r40376);
        mpfr_init(r40377);
        mpfr_init(r40378);
        mpfr_init(r40379);
        mpfr_init(r40380);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r40374, x, MPFR_RNDN);
        mpfr_set_d(r40375, y, MPFR_RNDN);
        mpfr_log(r40376, r40375, MPFR_RNDN);
        mpfr_mul(r40377, r40374, r40376, MPFR_RNDN);
        mpfr_set_d(r40378, z, MPFR_RNDN);
        mpfr_sub(r40379, r40377, r40378, MPFR_RNDN);
        mpfr_sub(r40380, r40379, r40375, MPFR_RNDN);
        return mpfr_get_d(r40380, MPFR_RNDN);
}

static mpfr_t r40381, r40382, r40383, r40384, r40385, r40386, r40387;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r40381);
        mpfr_init(r40382);
        mpfr_init(r40383);
        mpfr_init(r40384);
        mpfr_init(r40385);
        mpfr_init(r40386);
        mpfr_init(r40387);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r40381, x, MPFR_RNDN);
        mpfr_set_d(r40382, y, MPFR_RNDN);
        mpfr_log(r40383, r40382, MPFR_RNDN);
        mpfr_mul(r40384, r40381, r40383, MPFR_RNDN);
        mpfr_set_d(r40385, z, MPFR_RNDN);
        mpfr_sub(r40386, r40384, r40385, MPFR_RNDN);
        mpfr_sub(r40387, r40386, r40382, MPFR_RNDN);
        return mpfr_get_d(r40387, MPFR_RNDN);
}

static mpfr_t r40388, r40389, r40390, r40391, r40392, r40393, r40394;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r40388);
        mpfr_init(r40389);
        mpfr_init(r40390);
        mpfr_init(r40391);
        mpfr_init(r40392);
        mpfr_init(r40393);
        mpfr_init(r40394);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r40388, x, MPFR_RNDN);
        mpfr_set_d(r40389, y, MPFR_RNDN);
        mpfr_log(r40390, r40389, MPFR_RNDN);
        mpfr_mul(r40391, r40388, r40390, MPFR_RNDN);
        mpfr_set_d(r40392, z, MPFR_RNDN);
        mpfr_sub(r40393, r40391, r40392, MPFR_RNDN);
        mpfr_sub(r40394, r40393, r40389, MPFR_RNDN);
        return mpfr_get_d(r40394, MPFR_RNDN);
}

