#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 r36893 = x;
        float r36894 = y;
        float r36895 = log(r36894);
        float r36896 = r36894 * r36895;
        float r36897 = r36893 + r36896;
        float r36898 = z;
        float r36899 = r36897 - r36898;
        float r36900 = exp(r36899);
        return r36900;
}

double f_id(double x, double y, double z) {
        double r36901 = x;
        double r36902 = y;
        double r36903 = log(r36902);
        double r36904 = r36902 * r36903;
        double r36905 = r36901 + r36904;
        double r36906 = z;
        double r36907 = r36905 - r36906;
        double r36908 = exp(r36907);
        return r36908;
}


double f_of(float x, float y, float z) {
        float r36909 = x;
        float r36910 = z;
        float r36911 = r36909 - r36910;
        float r36912 = y;
        float r36913 = log(r36912);
        float r36914 = r36913 * r36912;
        float r36915 = r36911 + r36914;
        float r36916 = exp(r36915);
        return r36916;
}

double f_od(double x, double y, double z) {
        double r36917 = x;
        double r36918 = z;
        double r36919 = r36917 - r36918;
        double r36920 = y;
        double r36921 = log(r36920);
        double r36922 = r36921 * r36920;
        double r36923 = r36919 + r36922;
        double r36924 = exp(r36923);
        return r36924;
}

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 r36925, r36926, r36927, r36928, r36929, r36930, r36931, r36932;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r36925);
        mpfr_init(r36926);
        mpfr_init(r36927);
        mpfr_init(r36928);
        mpfr_init(r36929);
        mpfr_init(r36930);
        mpfr_init(r36931);
        mpfr_init(r36932);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r36925, x, MPFR_RNDN);
        mpfr_set_d(r36926, y, MPFR_RNDN);
        mpfr_log(r36927, r36926, MPFR_RNDN);
        mpfr_mul(r36928, r36926, r36927, MPFR_RNDN);
        mpfr_add(r36929, r36925, r36928, MPFR_RNDN);
        mpfr_set_d(r36930, z, MPFR_RNDN);
        mpfr_sub(r36931, r36929, r36930, MPFR_RNDN);
        mpfr_exp(r36932, r36931, MPFR_RNDN);
        return mpfr_get_d(r36932, MPFR_RNDN);
}

static mpfr_t r36933, r36934, r36935, r36936, r36937, r36938, r36939, r36940;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r36933);
        mpfr_init(r36934);
        mpfr_init(r36935);
        mpfr_init(r36936);
        mpfr_init(r36937);
        mpfr_init(r36938);
        mpfr_init(r36939);
        mpfr_init(r36940);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r36933, x, MPFR_RNDN);
        mpfr_set_d(r36934, z, MPFR_RNDN);
        mpfr_sub(r36935, r36933, r36934, MPFR_RNDN);
        mpfr_set_d(r36936, y, MPFR_RNDN);
        mpfr_log(r36937, r36936, MPFR_RNDN);
        mpfr_mul(r36938, r36937, r36936, MPFR_RNDN);
        mpfr_add(r36939, r36935, r36938, MPFR_RNDN);
        mpfr_exp(r36940, r36939, MPFR_RNDN);
        return mpfr_get_d(r36940, MPFR_RNDN);
}

static mpfr_t r36941, r36942, r36943, r36944, r36945, r36946, r36947, r36948;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r36941);
        mpfr_init(r36942);
        mpfr_init(r36943);
        mpfr_init(r36944);
        mpfr_init(r36945);
        mpfr_init(r36946);
        mpfr_init(r36947);
        mpfr_init(r36948);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r36941, x, MPFR_RNDN);
        mpfr_set_d(r36942, z, MPFR_RNDN);
        mpfr_sub(r36943, r36941, r36942, MPFR_RNDN);
        mpfr_set_d(r36944, y, MPFR_RNDN);
        mpfr_log(r36945, r36944, MPFR_RNDN);
        mpfr_mul(r36946, r36945, r36944, MPFR_RNDN);
        mpfr_add(r36947, r36943, r36946, MPFR_RNDN);
        mpfr_exp(r36948, r36947, MPFR_RNDN);
        return mpfr_get_d(r36948, MPFR_RNDN);
}

