#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 r40529 = x;
        float r40530 = y;
        float r40531 = log(r40530);
        float r40532 = r40529 * r40531;
        float r40533 = z;
        float r40534 = r40532 - r40533;
        float r40535 = r40534 - r40530;
        return r40535;
}

double f_id(double x, double y, double z) {
        double r40536 = x;
        double r40537 = y;
        double r40538 = log(r40537);
        double r40539 = r40536 * r40538;
        double r40540 = z;
        double r40541 = r40539 - r40540;
        double r40542 = r40541 - r40537;
        return r40542;
}


double f_of(float x, float y, float z) {
        float r40543 = x;
        float r40544 = y;
        float r40545 = log(r40544);
        float r40546 = r40543 * r40545;
        float r40547 = z;
        float r40548 = r40546 - r40547;
        float r40549 = r40548 - r40544;
        return r40549;
}

double f_od(double x, double y, double z) {
        double r40550 = x;
        double r40551 = y;
        double r40552 = log(r40551);
        double r40553 = r40550 * r40552;
        double r40554 = z;
        double r40555 = r40553 - r40554;
        double r40556 = r40555 - r40551;
        return r40556;
}

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 r40557, r40558, r40559, r40560, r40561, r40562, r40563;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r40557);
        mpfr_init(r40558);
        mpfr_init(r40559);
        mpfr_init(r40560);
        mpfr_init(r40561);
        mpfr_init(r40562);
        mpfr_init(r40563);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r40557, x, MPFR_RNDN);
        mpfr_set_d(r40558, y, MPFR_RNDN);
        mpfr_log(r40559, r40558, MPFR_RNDN);
        mpfr_mul(r40560, r40557, r40559, MPFR_RNDN);
        mpfr_set_d(r40561, z, MPFR_RNDN);
        mpfr_sub(r40562, r40560, r40561, MPFR_RNDN);
        mpfr_sub(r40563, r40562, r40558, MPFR_RNDN);
        return mpfr_get_d(r40563, MPFR_RNDN);
}

static mpfr_t r40564, r40565, r40566, r40567, r40568, r40569, r40570;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r40564);
        mpfr_init(r40565);
        mpfr_init(r40566);
        mpfr_init(r40567);
        mpfr_init(r40568);
        mpfr_init(r40569);
        mpfr_init(r40570);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r40564, x, MPFR_RNDN);
        mpfr_set_d(r40565, y, MPFR_RNDN);
        mpfr_log(r40566, r40565, MPFR_RNDN);
        mpfr_mul(r40567, r40564, r40566, MPFR_RNDN);
        mpfr_set_d(r40568, z, MPFR_RNDN);
        mpfr_sub(r40569, r40567, r40568, MPFR_RNDN);
        mpfr_sub(r40570, r40569, r40565, MPFR_RNDN);
        return mpfr_get_d(r40570, MPFR_RNDN);
}

static mpfr_t r40571, r40572, r40573, r40574, r40575, r40576, r40577;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r40571);
        mpfr_init(r40572);
        mpfr_init(r40573);
        mpfr_init(r40574);
        mpfr_init(r40575);
        mpfr_init(r40576);
        mpfr_init(r40577);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r40571, x, MPFR_RNDN);
        mpfr_set_d(r40572, y, MPFR_RNDN);
        mpfr_log(r40573, r40572, MPFR_RNDN);
        mpfr_mul(r40574, r40571, r40573, MPFR_RNDN);
        mpfr_set_d(r40575, z, MPFR_RNDN);
        mpfr_sub(r40576, r40574, r40575, MPFR_RNDN);
        mpfr_sub(r40577, r40576, r40572, MPFR_RNDN);
        return mpfr_get_d(r40577, MPFR_RNDN);
}

