#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 r40854 = x;
        float r40855 = y;
        float r40856 = log(r40855);
        float r40857 = r40854 * r40856;
        float r40858 = z;
        float r40859 = r40857 - r40858;
        float r40860 = r40859 - r40855;
        return r40860;
}

double f_id(double x, double y, double z) {
        double r40861 = x;
        double r40862 = y;
        double r40863 = log(r40862);
        double r40864 = r40861 * r40863;
        double r40865 = z;
        double r40866 = r40864 - r40865;
        double r40867 = r40866 - r40862;
        return r40867;
}


double f_of(float x, float y, float z) {
        float r40868 = x;
        float r40869 = y;
        float r40870 = log(r40869);
        float r40871 = r40868 * r40870;
        float r40872 = z;
        float r40873 = r40871 - r40872;
        float r40874 = r40873 - r40869;
        return r40874;
}

double f_od(double x, double y, double z) {
        double r40875 = x;
        double r40876 = y;
        double r40877 = log(r40876);
        double r40878 = r40875 * r40877;
        double r40879 = z;
        double r40880 = r40878 - r40879;
        double r40881 = r40880 - r40876;
        return r40881;
}

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 r40882, r40883, r40884, r40885, r40886, r40887, r40888;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r40882);
        mpfr_init(r40883);
        mpfr_init(r40884);
        mpfr_init(r40885);
        mpfr_init(r40886);
        mpfr_init(r40887);
        mpfr_init(r40888);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r40882, x, MPFR_RNDN);
        mpfr_set_d(r40883, y, MPFR_RNDN);
        mpfr_log(r40884, r40883, MPFR_RNDN);
        mpfr_mul(r40885, r40882, r40884, MPFR_RNDN);
        mpfr_set_d(r40886, z, MPFR_RNDN);
        mpfr_sub(r40887, r40885, r40886, MPFR_RNDN);
        mpfr_sub(r40888, r40887, r40883, MPFR_RNDN);
        return mpfr_get_d(r40888, MPFR_RNDN);
}

static mpfr_t r40889, r40890, r40891, r40892, r40893, r40894, r40895;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r40889);
        mpfr_init(r40890);
        mpfr_init(r40891);
        mpfr_init(r40892);
        mpfr_init(r40893);
        mpfr_init(r40894);
        mpfr_init(r40895);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r40889, x, MPFR_RNDN);
        mpfr_set_d(r40890, y, MPFR_RNDN);
        mpfr_log(r40891, r40890, MPFR_RNDN);
        mpfr_mul(r40892, r40889, r40891, MPFR_RNDN);
        mpfr_set_d(r40893, z, MPFR_RNDN);
        mpfr_sub(r40894, r40892, r40893, MPFR_RNDN);
        mpfr_sub(r40895, r40894, r40890, MPFR_RNDN);
        return mpfr_get_d(r40895, MPFR_RNDN);
}

static mpfr_t r40896, r40897, r40898, r40899, r40900, r40901, r40902;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r40896);
        mpfr_init(r40897);
        mpfr_init(r40898);
        mpfr_init(r40899);
        mpfr_init(r40900);
        mpfr_init(r40901);
        mpfr_init(r40902);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r40896, x, MPFR_RNDN);
        mpfr_set_d(r40897, y, MPFR_RNDN);
        mpfr_log(r40898, r40897, MPFR_RNDN);
        mpfr_mul(r40899, r40896, r40898, MPFR_RNDN);
        mpfr_set_d(r40900, z, MPFR_RNDN);
        mpfr_sub(r40901, r40899, r40900, MPFR_RNDN);
        mpfr_sub(r40902, r40901, r40897, MPFR_RNDN);
        return mpfr_get_d(r40902, MPFR_RNDN);
}

