#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Bulmash initializePoisson";

double f_if(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r30464979 = NdChar;
        float r30464980 = 1;
        float r30464981 = Ec;
        float r30464982 = Vef;
        float r30464983 = r30464981 - r30464982;
        float r30464984 = EDonor;
        float r30464985 = r30464983 - r30464984;
        float r30464986 = mu;
        float r30464987 = r30464985 - r30464986;
        float r30464988 = -r30464987;
        float r30464989 = KbT;
        float r30464990 = r30464988 / r30464989;
        float r30464991 = exp(r30464990);
        float r30464992 = r30464980 + r30464991;
        float r30464993 = r30464979 / r30464992;
        float r30464994 = NaChar;
        float r30464995 = Ev;
        float r30464996 = r30464995 + r30464982;
        float r30464997 = EAccept;
        float r30464998 = r30464996 + r30464997;
        float r30464999 = -r30464986;
        float r30465000 = r30464998 + r30464999;
        float r30465001 = r30465000 / r30464989;
        float r30465002 = exp(r30465001);
        float r30465003 = r30464980 + r30465002;
        float r30465004 = r30464994 / r30465003;
        float r30465005 = r30464993 + r30465004;
        return r30465005;
}

double f_id(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r30465006 = NdChar;
        double r30465007 = 1;
        double r30465008 = Ec;
        double r30465009 = Vef;
        double r30465010 = r30465008 - r30465009;
        double r30465011 = EDonor;
        double r30465012 = r30465010 - r30465011;
        double r30465013 = mu;
        double r30465014 = r30465012 - r30465013;
        double r30465015 = -r30465014;
        double r30465016 = KbT;
        double r30465017 = r30465015 / r30465016;
        double r30465018 = exp(r30465017);
        double r30465019 = r30465007 + r30465018;
        double r30465020 = r30465006 / r30465019;
        double r30465021 = NaChar;
        double r30465022 = Ev;
        double r30465023 = r30465022 + r30465009;
        double r30465024 = EAccept;
        double r30465025 = r30465023 + r30465024;
        double r30465026 = -r30465013;
        double r30465027 = r30465025 + r30465026;
        double r30465028 = r30465027 / r30465016;
        double r30465029 = exp(r30465028);
        double r30465030 = r30465007 + r30465029;
        double r30465031 = r30465021 / r30465030;
        double r30465032 = r30465020 + r30465031;
        return r30465032;
}


double f_of(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r30465033 = NdChar;
        float r30465034 = 1;
        float r30465035 = Ec;
        float r30465036 = Vef;
        float r30465037 = r30465035 - r30465036;
        float r30465038 = EDonor;
        float r30465039 = r30465037 - r30465038;
        float r30465040 = mu;
        float r30465041 = r30465039 - r30465040;
        float r30465042 = -r30465041;
        float r30465043 = KbT;
        float r30465044 = r30465042 / r30465043;
        float r30465045 = exp(r30465044);
        float r30465046 = r30465034 + r30465045;
        float r30465047 = r30465033 / r30465046;
        float r30465048 = NaChar;
        float r30465049 = Ev;
        float r30465050 = r30465049 + r30465036;
        float r30465051 = EAccept;
        float r30465052 = r30465050 + r30465051;
        float r30465053 = -r30465040;
        float r30465054 = r30465052 + r30465053;
        float r30465055 = r30465054 / r30465043;
        float r30465056 = exp(r30465055);
        float r30465057 = r30465034 + r30465056;
        float r30465058 = r30465048 / r30465057;
        float r30465059 = r30465047 + r30465058;
        return r30465059;
}

double f_od(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r30465060 = NdChar;
        double r30465061 = 1;
        double r30465062 = Ec;
        double r30465063 = Vef;
        double r30465064 = r30465062 - r30465063;
        double r30465065 = EDonor;
        double r30465066 = r30465064 - r30465065;
        double r30465067 = mu;
        double r30465068 = r30465066 - r30465067;
        double r30465069 = -r30465068;
        double r30465070 = KbT;
        double r30465071 = r30465069 / r30465070;
        double r30465072 = exp(r30465071);
        double r30465073 = r30465061 + r30465072;
        double r30465074 = r30465060 / r30465073;
        double r30465075 = NaChar;
        double r30465076 = Ev;
        double r30465077 = r30465076 + r30465063;
        double r30465078 = EAccept;
        double r30465079 = r30465077 + r30465078;
        double r30465080 = -r30465067;
        double r30465081 = r30465079 + r30465080;
        double r30465082 = r30465081 / r30465070;
        double r30465083 = exp(r30465082);
        double r30465084 = r30465061 + r30465083;
        double r30465085 = r30465075 / r30465084;
        double r30465086 = r30465074 + r30465085;
        return r30465086;
}

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 r30465087, r30465088, r30465089, r30465090, r30465091, r30465092, r30465093, r30465094, r30465095, r30465096, r30465097, r30465098, r30465099, r30465100, r30465101, r30465102, r30465103, r30465104, r30465105, r30465106, r30465107, r30465108, r30465109, r30465110, r30465111, r30465112, r30465113;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r30465087);
        mpfr_init_set_str(r30465088, "1", 10, MPFR_RNDN);
        mpfr_init(r30465089);
        mpfr_init(r30465090);
        mpfr_init(r30465091);
        mpfr_init(r30465092);
        mpfr_init(r30465093);
        mpfr_init(r30465094);
        mpfr_init(r30465095);
        mpfr_init(r30465096);
        mpfr_init(r30465097);
        mpfr_init(r30465098);
        mpfr_init(r30465099);
        mpfr_init(r30465100);
        mpfr_init(r30465101);
        mpfr_init(r30465102);
        mpfr_init(r30465103);
        mpfr_init(r30465104);
        mpfr_init(r30465105);
        mpfr_init(r30465106);
        mpfr_init(r30465107);
        mpfr_init(r30465108);
        mpfr_init(r30465109);
        mpfr_init(r30465110);
        mpfr_init(r30465111);
        mpfr_init(r30465112);
        mpfr_init(r30465113);
}

double f_im(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r30465087, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r30465089, Ec, MPFR_RNDN);
        mpfr_set_d(r30465090, Vef, MPFR_RNDN);
        mpfr_sub(r30465091, r30465089, r30465090, MPFR_RNDN);
        mpfr_set_d(r30465092, EDonor, MPFR_RNDN);
        mpfr_sub(r30465093, r30465091, r30465092, MPFR_RNDN);
        mpfr_set_d(r30465094, mu, MPFR_RNDN);
        mpfr_sub(r30465095, r30465093, r30465094, MPFR_RNDN);
        mpfr_neg(r30465096, r30465095, MPFR_RNDN);
        mpfr_set_d(r30465097, KbT, MPFR_RNDN);
        mpfr_div(r30465098, r30465096, r30465097, MPFR_RNDN);
        mpfr_exp(r30465099, r30465098, MPFR_RNDN);
        mpfr_add(r30465100, r30465088, r30465099, MPFR_RNDN);
        mpfr_div(r30465101, r30465087, r30465100, MPFR_RNDN);
        mpfr_set_d(r30465102, NaChar, MPFR_RNDN);
        mpfr_set_d(r30465103, Ev, MPFR_RNDN);
        mpfr_add(r30465104, r30465103, r30465090, MPFR_RNDN);
        mpfr_set_d(r30465105, EAccept, MPFR_RNDN);
        mpfr_add(r30465106, r30465104, r30465105, MPFR_RNDN);
        mpfr_neg(r30465107, r30465094, MPFR_RNDN);
        mpfr_add(r30465108, r30465106, r30465107, MPFR_RNDN);
        mpfr_div(r30465109, r30465108, r30465097, MPFR_RNDN);
        mpfr_exp(r30465110, r30465109, MPFR_RNDN);
        mpfr_add(r30465111, r30465088, r30465110, MPFR_RNDN);
        mpfr_div(r30465112, r30465102, r30465111, MPFR_RNDN);
        mpfr_add(r30465113, r30465101, r30465112, MPFR_RNDN);
        return mpfr_get_d(r30465113, MPFR_RNDN);
}

static mpfr_t r30465114, r30465115, r30465116, r30465117, r30465118, r30465119, r30465120, r30465121, r30465122, r30465123, r30465124, r30465125, r30465126, r30465127, r30465128, r30465129, r30465130, r30465131, r30465132, r30465133, r30465134, r30465135, r30465136, r30465137, r30465138, r30465139, r30465140;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r30465114);
        mpfr_init_set_str(r30465115, "1", 10, MPFR_RNDN);
        mpfr_init(r30465116);
        mpfr_init(r30465117);
        mpfr_init(r30465118);
        mpfr_init(r30465119);
        mpfr_init(r30465120);
        mpfr_init(r30465121);
        mpfr_init(r30465122);
        mpfr_init(r30465123);
        mpfr_init(r30465124);
        mpfr_init(r30465125);
        mpfr_init(r30465126);
        mpfr_init(r30465127);
        mpfr_init(r30465128);
        mpfr_init(r30465129);
        mpfr_init(r30465130);
        mpfr_init(r30465131);
        mpfr_init(r30465132);
        mpfr_init(r30465133);
        mpfr_init(r30465134);
        mpfr_init(r30465135);
        mpfr_init(r30465136);
        mpfr_init(r30465137);
        mpfr_init(r30465138);
        mpfr_init(r30465139);
        mpfr_init(r30465140);
}

double f_fm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r30465114, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r30465116, Ec, MPFR_RNDN);
        mpfr_set_d(r30465117, Vef, MPFR_RNDN);
        mpfr_sub(r30465118, r30465116, r30465117, MPFR_RNDN);
        mpfr_set_d(r30465119, EDonor, MPFR_RNDN);
        mpfr_sub(r30465120, r30465118, r30465119, MPFR_RNDN);
        mpfr_set_d(r30465121, mu, MPFR_RNDN);
        mpfr_sub(r30465122, r30465120, r30465121, MPFR_RNDN);
        mpfr_neg(r30465123, r30465122, MPFR_RNDN);
        mpfr_set_d(r30465124, KbT, MPFR_RNDN);
        mpfr_div(r30465125, r30465123, r30465124, MPFR_RNDN);
        mpfr_exp(r30465126, r30465125, MPFR_RNDN);
        mpfr_add(r30465127, r30465115, r30465126, MPFR_RNDN);
        mpfr_div(r30465128, r30465114, r30465127, MPFR_RNDN);
        mpfr_set_d(r30465129, NaChar, MPFR_RNDN);
        mpfr_set_d(r30465130, Ev, MPFR_RNDN);
        mpfr_add(r30465131, r30465130, r30465117, MPFR_RNDN);
        mpfr_set_d(r30465132, EAccept, MPFR_RNDN);
        mpfr_add(r30465133, r30465131, r30465132, MPFR_RNDN);
        mpfr_neg(r30465134, r30465121, MPFR_RNDN);
        mpfr_add(r30465135, r30465133, r30465134, MPFR_RNDN);
        mpfr_div(r30465136, r30465135, r30465124, MPFR_RNDN);
        mpfr_exp(r30465137, r30465136, MPFR_RNDN);
        mpfr_add(r30465138, r30465115, r30465137, MPFR_RNDN);
        mpfr_div(r30465139, r30465129, r30465138, MPFR_RNDN);
        mpfr_add(r30465140, r30465128, r30465139, MPFR_RNDN);
        return mpfr_get_d(r30465140, MPFR_RNDN);
}

static mpfr_t r30465141, r30465142, r30465143, r30465144, r30465145, r30465146, r30465147, r30465148, r30465149, r30465150, r30465151, r30465152, r30465153, r30465154, r30465155, r30465156, r30465157, r30465158, r30465159, r30465160, r30465161, r30465162, r30465163, r30465164, r30465165, r30465166, r30465167;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r30465141);
        mpfr_init_set_str(r30465142, "1", 10, MPFR_RNDN);
        mpfr_init(r30465143);
        mpfr_init(r30465144);
        mpfr_init(r30465145);
        mpfr_init(r30465146);
        mpfr_init(r30465147);
        mpfr_init(r30465148);
        mpfr_init(r30465149);
        mpfr_init(r30465150);
        mpfr_init(r30465151);
        mpfr_init(r30465152);
        mpfr_init(r30465153);
        mpfr_init(r30465154);
        mpfr_init(r30465155);
        mpfr_init(r30465156);
        mpfr_init(r30465157);
        mpfr_init(r30465158);
        mpfr_init(r30465159);
        mpfr_init(r30465160);
        mpfr_init(r30465161);
        mpfr_init(r30465162);
        mpfr_init(r30465163);
        mpfr_init(r30465164);
        mpfr_init(r30465165);
        mpfr_init(r30465166);
        mpfr_init(r30465167);
}

double f_dm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r30465141, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r30465143, Ec, MPFR_RNDN);
        mpfr_set_d(r30465144, Vef, MPFR_RNDN);
        mpfr_sub(r30465145, r30465143, r30465144, MPFR_RNDN);
        mpfr_set_d(r30465146, EDonor, MPFR_RNDN);
        mpfr_sub(r30465147, r30465145, r30465146, MPFR_RNDN);
        mpfr_set_d(r30465148, mu, MPFR_RNDN);
        mpfr_sub(r30465149, r30465147, r30465148, MPFR_RNDN);
        mpfr_neg(r30465150, r30465149, MPFR_RNDN);
        mpfr_set_d(r30465151, KbT, MPFR_RNDN);
        mpfr_div(r30465152, r30465150, r30465151, MPFR_RNDN);
        mpfr_exp(r30465153, r30465152, MPFR_RNDN);
        mpfr_add(r30465154, r30465142, r30465153, MPFR_RNDN);
        mpfr_div(r30465155, r30465141, r30465154, MPFR_RNDN);
        mpfr_set_d(r30465156, NaChar, MPFR_RNDN);
        mpfr_set_d(r30465157, Ev, MPFR_RNDN);
        mpfr_add(r30465158, r30465157, r30465144, MPFR_RNDN);
        mpfr_set_d(r30465159, EAccept, MPFR_RNDN);
        mpfr_add(r30465160, r30465158, r30465159, MPFR_RNDN);
        mpfr_neg(r30465161, r30465148, MPFR_RNDN);
        mpfr_add(r30465162, r30465160, r30465161, MPFR_RNDN);
        mpfr_div(r30465163, r30465162, r30465151, MPFR_RNDN);
        mpfr_exp(r30465164, r30465163, MPFR_RNDN);
        mpfr_add(r30465165, r30465142, r30465164, MPFR_RNDN);
        mpfr_div(r30465166, r30465156, r30465165, MPFR_RNDN);
        mpfr_add(r30465167, r30465155, r30465166, MPFR_RNDN);
        return mpfr_get_d(r30465167, MPFR_RNDN);
}

