#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 r28022 = NdChar;
        float r28023 = 1;
        float r28024 = Ec;
        float r28025 = Vef;
        float r28026 = r28024 - r28025;
        float r28027 = EDonor;
        float r28028 = r28026 - r28027;
        float r28029 = mu;
        float r28030 = r28028 - r28029;
        float r28031 = -r28030;
        float r28032 = KbT;
        float r28033 = r28031 / r28032;
        float r28034 = exp(r28033);
        float r28035 = r28023 + r28034;
        float r28036 = r28022 / r28035;
        float r28037 = NaChar;
        float r28038 = Ev;
        float r28039 = r28038 + r28025;
        float r28040 = EAccept;
        float r28041 = r28039 + r28040;
        float r28042 = -r28029;
        float r28043 = r28041 + r28042;
        float r28044 = r28043 / r28032;
        float r28045 = exp(r28044);
        float r28046 = r28023 + r28045;
        float r28047 = r28037 / r28046;
        float r28048 = r28036 + r28047;
        return r28048;
}

double f_id(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r28049 = NdChar;
        double r28050 = 1;
        double r28051 = Ec;
        double r28052 = Vef;
        double r28053 = r28051 - r28052;
        double r28054 = EDonor;
        double r28055 = r28053 - r28054;
        double r28056 = mu;
        double r28057 = r28055 - r28056;
        double r28058 = -r28057;
        double r28059 = KbT;
        double r28060 = r28058 / r28059;
        double r28061 = exp(r28060);
        double r28062 = r28050 + r28061;
        double r28063 = r28049 / r28062;
        double r28064 = NaChar;
        double r28065 = Ev;
        double r28066 = r28065 + r28052;
        double r28067 = EAccept;
        double r28068 = r28066 + r28067;
        double r28069 = -r28056;
        double r28070 = r28068 + r28069;
        double r28071 = r28070 / r28059;
        double r28072 = exp(r28071);
        double r28073 = r28050 + r28072;
        double r28074 = r28064 / r28073;
        double r28075 = r28063 + r28074;
        return r28075;
}


double f_of(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r28076 = NdChar;
        float r28077 = 1;
        float r28078 = Ec;
        float r28079 = Vef;
        float r28080 = r28078 - r28079;
        float r28081 = EDonor;
        float r28082 = r28080 - r28081;
        float r28083 = mu;
        float r28084 = r28082 - r28083;
        float r28085 = -r28084;
        float r28086 = KbT;
        float r28087 = r28085 / r28086;
        float r28088 = exp(r28087);
        float r28089 = r28077 + r28088;
        float r28090 = r28076 / r28089;
        float r28091 = NaChar;
        float r28092 = Ev;
        float r28093 = r28092 + r28079;
        float r28094 = EAccept;
        float r28095 = r28093 + r28094;
        float r28096 = -r28083;
        float r28097 = r28095 + r28096;
        float r28098 = r28097 / r28086;
        float r28099 = exp(r28098);
        float r28100 = r28077 + r28099;
        float r28101 = r28091 / r28100;
        float r28102 = r28090 + r28101;
        return r28102;
}

double f_od(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r28103 = NdChar;
        double r28104 = 1;
        double r28105 = Ec;
        double r28106 = Vef;
        double r28107 = r28105 - r28106;
        double r28108 = EDonor;
        double r28109 = r28107 - r28108;
        double r28110 = mu;
        double r28111 = r28109 - r28110;
        double r28112 = -r28111;
        double r28113 = KbT;
        double r28114 = r28112 / r28113;
        double r28115 = exp(r28114);
        double r28116 = r28104 + r28115;
        double r28117 = r28103 / r28116;
        double r28118 = NaChar;
        double r28119 = Ev;
        double r28120 = r28119 + r28106;
        double r28121 = EAccept;
        double r28122 = r28120 + r28121;
        double r28123 = -r28110;
        double r28124 = r28122 + r28123;
        double r28125 = r28124 / r28113;
        double r28126 = exp(r28125);
        double r28127 = r28104 + r28126;
        double r28128 = r28118 / r28127;
        double r28129 = r28117 + r28128;
        return r28129;
}

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 r28130, r28131, r28132, r28133, r28134, r28135, r28136, r28137, r28138, r28139, r28140, r28141, r28142, r28143, r28144, r28145, r28146, r28147, r28148, r28149, r28150, r28151, r28152, r28153, r28154, r28155, r28156;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r28130);
        mpfr_init_set_str(r28131, "1", 10, MPFR_RNDN);
        mpfr_init(r28132);
        mpfr_init(r28133);
        mpfr_init(r28134);
        mpfr_init(r28135);
        mpfr_init(r28136);
        mpfr_init(r28137);
        mpfr_init(r28138);
        mpfr_init(r28139);
        mpfr_init(r28140);
        mpfr_init(r28141);
        mpfr_init(r28142);
        mpfr_init(r28143);
        mpfr_init(r28144);
        mpfr_init(r28145);
        mpfr_init(r28146);
        mpfr_init(r28147);
        mpfr_init(r28148);
        mpfr_init(r28149);
        mpfr_init(r28150);
        mpfr_init(r28151);
        mpfr_init(r28152);
        mpfr_init(r28153);
        mpfr_init(r28154);
        mpfr_init(r28155);
        mpfr_init(r28156);
}

double f_im(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r28130, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r28132, Ec, MPFR_RNDN);
        mpfr_set_d(r28133, Vef, MPFR_RNDN);
        mpfr_sub(r28134, r28132, r28133, MPFR_RNDN);
        mpfr_set_d(r28135, EDonor, MPFR_RNDN);
        mpfr_sub(r28136, r28134, r28135, MPFR_RNDN);
        mpfr_set_d(r28137, mu, MPFR_RNDN);
        mpfr_sub(r28138, r28136, r28137, MPFR_RNDN);
        mpfr_neg(r28139, r28138, MPFR_RNDN);
        mpfr_set_d(r28140, KbT, MPFR_RNDN);
        mpfr_div(r28141, r28139, r28140, MPFR_RNDN);
        mpfr_exp(r28142, r28141, MPFR_RNDN);
        mpfr_add(r28143, r28131, r28142, MPFR_RNDN);
        mpfr_div(r28144, r28130, r28143, MPFR_RNDN);
        mpfr_set_d(r28145, NaChar, MPFR_RNDN);
        mpfr_set_d(r28146, Ev, MPFR_RNDN);
        mpfr_add(r28147, r28146, r28133, MPFR_RNDN);
        mpfr_set_d(r28148, EAccept, MPFR_RNDN);
        mpfr_add(r28149, r28147, r28148, MPFR_RNDN);
        mpfr_neg(r28150, r28137, MPFR_RNDN);
        mpfr_add(r28151, r28149, r28150, MPFR_RNDN);
        mpfr_div(r28152, r28151, r28140, MPFR_RNDN);
        mpfr_exp(r28153, r28152, MPFR_RNDN);
        mpfr_add(r28154, r28131, r28153, MPFR_RNDN);
        mpfr_div(r28155, r28145, r28154, MPFR_RNDN);
        mpfr_add(r28156, r28144, r28155, MPFR_RNDN);
        return mpfr_get_d(r28156, MPFR_RNDN);
}

static mpfr_t r28157, r28158, r28159, r28160, r28161, r28162, r28163, r28164, r28165, r28166, r28167, r28168, r28169, r28170, r28171, r28172, r28173, r28174, r28175, r28176, r28177, r28178, r28179, r28180, r28181, r28182, r28183;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28157);
        mpfr_init_set_str(r28158, "1", 10, MPFR_RNDN);
        mpfr_init(r28159);
        mpfr_init(r28160);
        mpfr_init(r28161);
        mpfr_init(r28162);
        mpfr_init(r28163);
        mpfr_init(r28164);
        mpfr_init(r28165);
        mpfr_init(r28166);
        mpfr_init(r28167);
        mpfr_init(r28168);
        mpfr_init(r28169);
        mpfr_init(r28170);
        mpfr_init(r28171);
        mpfr_init(r28172);
        mpfr_init(r28173);
        mpfr_init(r28174);
        mpfr_init(r28175);
        mpfr_init(r28176);
        mpfr_init(r28177);
        mpfr_init(r28178);
        mpfr_init(r28179);
        mpfr_init(r28180);
        mpfr_init(r28181);
        mpfr_init(r28182);
        mpfr_init(r28183);
}

double f_fm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r28157, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r28159, Ec, MPFR_RNDN);
        mpfr_set_d(r28160, Vef, MPFR_RNDN);
        mpfr_sub(r28161, r28159, r28160, MPFR_RNDN);
        mpfr_set_d(r28162, EDonor, MPFR_RNDN);
        mpfr_sub(r28163, r28161, r28162, MPFR_RNDN);
        mpfr_set_d(r28164, mu, MPFR_RNDN);
        mpfr_sub(r28165, r28163, r28164, MPFR_RNDN);
        mpfr_neg(r28166, r28165, MPFR_RNDN);
        mpfr_set_d(r28167, KbT, MPFR_RNDN);
        mpfr_div(r28168, r28166, r28167, MPFR_RNDN);
        mpfr_exp(r28169, r28168, MPFR_RNDN);
        mpfr_add(r28170, r28158, r28169, MPFR_RNDN);
        mpfr_div(r28171, r28157, r28170, MPFR_RNDN);
        mpfr_set_d(r28172, NaChar, MPFR_RNDN);
        mpfr_set_d(r28173, Ev, MPFR_RNDN);
        mpfr_add(r28174, r28173, r28160, MPFR_RNDN);
        mpfr_set_d(r28175, EAccept, MPFR_RNDN);
        mpfr_add(r28176, r28174, r28175, MPFR_RNDN);
        mpfr_neg(r28177, r28164, MPFR_RNDN);
        mpfr_add(r28178, r28176, r28177, MPFR_RNDN);
        mpfr_div(r28179, r28178, r28167, MPFR_RNDN);
        mpfr_exp(r28180, r28179, MPFR_RNDN);
        mpfr_add(r28181, r28158, r28180, MPFR_RNDN);
        mpfr_div(r28182, r28172, r28181, MPFR_RNDN);
        mpfr_add(r28183, r28171, r28182, MPFR_RNDN);
        return mpfr_get_d(r28183, MPFR_RNDN);
}

static mpfr_t r28184, r28185, r28186, r28187, r28188, r28189, r28190, r28191, r28192, r28193, r28194, r28195, r28196, r28197, r28198, r28199, r28200, r28201, r28202, r28203, r28204, r28205, r28206, r28207, r28208, r28209, r28210;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28184);
        mpfr_init_set_str(r28185, "1", 10, MPFR_RNDN);
        mpfr_init(r28186);
        mpfr_init(r28187);
        mpfr_init(r28188);
        mpfr_init(r28189);
        mpfr_init(r28190);
        mpfr_init(r28191);
        mpfr_init(r28192);
        mpfr_init(r28193);
        mpfr_init(r28194);
        mpfr_init(r28195);
        mpfr_init(r28196);
        mpfr_init(r28197);
        mpfr_init(r28198);
        mpfr_init(r28199);
        mpfr_init(r28200);
        mpfr_init(r28201);
        mpfr_init(r28202);
        mpfr_init(r28203);
        mpfr_init(r28204);
        mpfr_init(r28205);
        mpfr_init(r28206);
        mpfr_init(r28207);
        mpfr_init(r28208);
        mpfr_init(r28209);
        mpfr_init(r28210);
}

double f_dm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r28184, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r28186, Ec, MPFR_RNDN);
        mpfr_set_d(r28187, Vef, MPFR_RNDN);
        mpfr_sub(r28188, r28186, r28187, MPFR_RNDN);
        mpfr_set_d(r28189, EDonor, MPFR_RNDN);
        mpfr_sub(r28190, r28188, r28189, MPFR_RNDN);
        mpfr_set_d(r28191, mu, MPFR_RNDN);
        mpfr_sub(r28192, r28190, r28191, MPFR_RNDN);
        mpfr_neg(r28193, r28192, MPFR_RNDN);
        mpfr_set_d(r28194, KbT, MPFR_RNDN);
        mpfr_div(r28195, r28193, r28194, MPFR_RNDN);
        mpfr_exp(r28196, r28195, MPFR_RNDN);
        mpfr_add(r28197, r28185, r28196, MPFR_RNDN);
        mpfr_div(r28198, r28184, r28197, MPFR_RNDN);
        mpfr_set_d(r28199, NaChar, MPFR_RNDN);
        mpfr_set_d(r28200, Ev, MPFR_RNDN);
        mpfr_add(r28201, r28200, r28187, MPFR_RNDN);
        mpfr_set_d(r28202, EAccept, MPFR_RNDN);
        mpfr_add(r28203, r28201, r28202, MPFR_RNDN);
        mpfr_neg(r28204, r28191, MPFR_RNDN);
        mpfr_add(r28205, r28203, r28204, MPFR_RNDN);
        mpfr_div(r28206, r28205, r28194, MPFR_RNDN);
        mpfr_exp(r28207, r28206, MPFR_RNDN);
        mpfr_add(r28208, r28185, r28207, MPFR_RNDN);
        mpfr_div(r28209, r28199, r28208, MPFR_RNDN);
        mpfr_add(r28210, r28198, r28209, MPFR_RNDN);
        return mpfr_get_d(r28210, MPFR_RNDN);
}

