#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 r36138 = NdChar;
        float r36139 = 1;
        float r36140 = Ec;
        float r36141 = Vef;
        float r36142 = r36140 - r36141;
        float r36143 = EDonor;
        float r36144 = r36142 - r36143;
        float r36145 = mu;
        float r36146 = r36144 - r36145;
        float r36147 = -r36146;
        float r36148 = KbT;
        float r36149 = r36147 / r36148;
        float r36150 = exp(r36149);
        float r36151 = r36139 + r36150;
        float r36152 = r36138 / r36151;
        float r36153 = NaChar;
        float r36154 = Ev;
        float r36155 = r36154 + r36141;
        float r36156 = EAccept;
        float r36157 = r36155 + r36156;
        float r36158 = -r36145;
        float r36159 = r36157 + r36158;
        float r36160 = r36159 / r36148;
        float r36161 = exp(r36160);
        float r36162 = r36139 + r36161;
        float r36163 = r36153 / r36162;
        float r36164 = r36152 + r36163;
        return r36164;
}

double f_id(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r36165 = NdChar;
        double r36166 = 1;
        double r36167 = Ec;
        double r36168 = Vef;
        double r36169 = r36167 - r36168;
        double r36170 = EDonor;
        double r36171 = r36169 - r36170;
        double r36172 = mu;
        double r36173 = r36171 - r36172;
        double r36174 = -r36173;
        double r36175 = KbT;
        double r36176 = r36174 / r36175;
        double r36177 = exp(r36176);
        double r36178 = r36166 + r36177;
        double r36179 = r36165 / r36178;
        double r36180 = NaChar;
        double r36181 = Ev;
        double r36182 = r36181 + r36168;
        double r36183 = EAccept;
        double r36184 = r36182 + r36183;
        double r36185 = -r36172;
        double r36186 = r36184 + r36185;
        double r36187 = r36186 / r36175;
        double r36188 = exp(r36187);
        double r36189 = r36166 + r36188;
        double r36190 = r36180 / r36189;
        double r36191 = r36179 + r36190;
        return r36191;
}


double f_of(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r36192 = NdChar;
        float r36193 = 1;
        float r36194 = Ec;
        float r36195 = Vef;
        float r36196 = r36194 - r36195;
        float r36197 = EDonor;
        float r36198 = r36196 - r36197;
        float r36199 = mu;
        float r36200 = r36198 - r36199;
        float r36201 = -r36200;
        float r36202 = KbT;
        float r36203 = r36201 / r36202;
        float r36204 = exp(r36203);
        float r36205 = r36193 + r36204;
        float r36206 = r36192 / r36205;
        float r36207 = NaChar;
        float r36208 = Ev;
        float r36209 = r36208 + r36195;
        float r36210 = EAccept;
        float r36211 = r36209 + r36210;
        float r36212 = -r36199;
        float r36213 = r36211 + r36212;
        float r36214 = r36213 / r36202;
        float r36215 = exp(r36214);
        float r36216 = r36193 + r36215;
        float r36217 = r36207 / r36216;
        float r36218 = r36206 + r36217;
        return r36218;
}

double f_od(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r36219 = NdChar;
        double r36220 = 1;
        double r36221 = Ec;
        double r36222 = Vef;
        double r36223 = r36221 - r36222;
        double r36224 = EDonor;
        double r36225 = r36223 - r36224;
        double r36226 = mu;
        double r36227 = r36225 - r36226;
        double r36228 = -r36227;
        double r36229 = KbT;
        double r36230 = r36228 / r36229;
        double r36231 = exp(r36230);
        double r36232 = r36220 + r36231;
        double r36233 = r36219 / r36232;
        double r36234 = NaChar;
        double r36235 = Ev;
        double r36236 = r36235 + r36222;
        double r36237 = EAccept;
        double r36238 = r36236 + r36237;
        double r36239 = -r36226;
        double r36240 = r36238 + r36239;
        double r36241 = r36240 / r36229;
        double r36242 = exp(r36241);
        double r36243 = r36220 + r36242;
        double r36244 = r36234 / r36243;
        double r36245 = r36233 + r36244;
        return r36245;
}

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 r36246, r36247, r36248, r36249, r36250, r36251, r36252, r36253, r36254, r36255, r36256, r36257, r36258, r36259, r36260, r36261, r36262, r36263, r36264, r36265, r36266, r36267, r36268, r36269, r36270, r36271, r36272;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r36246);
        mpfr_init_set_str(r36247, "1", 10, MPFR_RNDN);
        mpfr_init(r36248);
        mpfr_init(r36249);
        mpfr_init(r36250);
        mpfr_init(r36251);
        mpfr_init(r36252);
        mpfr_init(r36253);
        mpfr_init(r36254);
        mpfr_init(r36255);
        mpfr_init(r36256);
        mpfr_init(r36257);
        mpfr_init(r36258);
        mpfr_init(r36259);
        mpfr_init(r36260);
        mpfr_init(r36261);
        mpfr_init(r36262);
        mpfr_init(r36263);
        mpfr_init(r36264);
        mpfr_init(r36265);
        mpfr_init(r36266);
        mpfr_init(r36267);
        mpfr_init(r36268);
        mpfr_init(r36269);
        mpfr_init(r36270);
        mpfr_init(r36271);
        mpfr_init(r36272);
}

double f_im(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r36246, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r36248, Ec, MPFR_RNDN);
        mpfr_set_d(r36249, Vef, MPFR_RNDN);
        mpfr_sub(r36250, r36248, r36249, MPFR_RNDN);
        mpfr_set_d(r36251, EDonor, MPFR_RNDN);
        mpfr_sub(r36252, r36250, r36251, MPFR_RNDN);
        mpfr_set_d(r36253, mu, MPFR_RNDN);
        mpfr_sub(r36254, r36252, r36253, MPFR_RNDN);
        mpfr_neg(r36255, r36254, MPFR_RNDN);
        mpfr_set_d(r36256, KbT, MPFR_RNDN);
        mpfr_div(r36257, r36255, r36256, MPFR_RNDN);
        mpfr_exp(r36258, r36257, MPFR_RNDN);
        mpfr_add(r36259, r36247, r36258, MPFR_RNDN);
        mpfr_div(r36260, r36246, r36259, MPFR_RNDN);
        mpfr_set_d(r36261, NaChar, MPFR_RNDN);
        mpfr_set_d(r36262, Ev, MPFR_RNDN);
        mpfr_add(r36263, r36262, r36249, MPFR_RNDN);
        mpfr_set_d(r36264, EAccept, MPFR_RNDN);
        mpfr_add(r36265, r36263, r36264, MPFR_RNDN);
        mpfr_neg(r36266, r36253, MPFR_RNDN);
        mpfr_add(r36267, r36265, r36266, MPFR_RNDN);
        mpfr_div(r36268, r36267, r36256, MPFR_RNDN);
        mpfr_exp(r36269, r36268, MPFR_RNDN);
        mpfr_add(r36270, r36247, r36269, MPFR_RNDN);
        mpfr_div(r36271, r36261, r36270, MPFR_RNDN);
        mpfr_add(r36272, r36260, r36271, MPFR_RNDN);
        return mpfr_get_d(r36272, MPFR_RNDN);
}

static mpfr_t r36273, r36274, r36275, r36276, r36277, r36278, r36279, r36280, r36281, r36282, r36283, r36284, r36285, r36286, r36287, r36288, r36289, r36290, r36291, r36292, r36293, r36294, r36295, r36296, r36297, r36298, r36299;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r36273);
        mpfr_init_set_str(r36274, "1", 10, MPFR_RNDN);
        mpfr_init(r36275);
        mpfr_init(r36276);
        mpfr_init(r36277);
        mpfr_init(r36278);
        mpfr_init(r36279);
        mpfr_init(r36280);
        mpfr_init(r36281);
        mpfr_init(r36282);
        mpfr_init(r36283);
        mpfr_init(r36284);
        mpfr_init(r36285);
        mpfr_init(r36286);
        mpfr_init(r36287);
        mpfr_init(r36288);
        mpfr_init(r36289);
        mpfr_init(r36290);
        mpfr_init(r36291);
        mpfr_init(r36292);
        mpfr_init(r36293);
        mpfr_init(r36294);
        mpfr_init(r36295);
        mpfr_init(r36296);
        mpfr_init(r36297);
        mpfr_init(r36298);
        mpfr_init(r36299);
}

double f_fm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r36273, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r36275, Ec, MPFR_RNDN);
        mpfr_set_d(r36276, Vef, MPFR_RNDN);
        mpfr_sub(r36277, r36275, r36276, MPFR_RNDN);
        mpfr_set_d(r36278, EDonor, MPFR_RNDN);
        mpfr_sub(r36279, r36277, r36278, MPFR_RNDN);
        mpfr_set_d(r36280, mu, MPFR_RNDN);
        mpfr_sub(r36281, r36279, r36280, MPFR_RNDN);
        mpfr_neg(r36282, r36281, MPFR_RNDN);
        mpfr_set_d(r36283, KbT, MPFR_RNDN);
        mpfr_div(r36284, r36282, r36283, MPFR_RNDN);
        mpfr_exp(r36285, r36284, MPFR_RNDN);
        mpfr_add(r36286, r36274, r36285, MPFR_RNDN);
        mpfr_div(r36287, r36273, r36286, MPFR_RNDN);
        mpfr_set_d(r36288, NaChar, MPFR_RNDN);
        mpfr_set_d(r36289, Ev, MPFR_RNDN);
        mpfr_add(r36290, r36289, r36276, MPFR_RNDN);
        mpfr_set_d(r36291, EAccept, MPFR_RNDN);
        mpfr_add(r36292, r36290, r36291, MPFR_RNDN);
        mpfr_neg(r36293, r36280, MPFR_RNDN);
        mpfr_add(r36294, r36292, r36293, MPFR_RNDN);
        mpfr_div(r36295, r36294, r36283, MPFR_RNDN);
        mpfr_exp(r36296, r36295, MPFR_RNDN);
        mpfr_add(r36297, r36274, r36296, MPFR_RNDN);
        mpfr_div(r36298, r36288, r36297, MPFR_RNDN);
        mpfr_add(r36299, r36287, r36298, MPFR_RNDN);
        return mpfr_get_d(r36299, MPFR_RNDN);
}

static mpfr_t r36300, r36301, r36302, r36303, r36304, r36305, r36306, r36307, r36308, r36309, r36310, r36311, r36312, r36313, r36314, r36315, r36316, r36317, r36318, r36319, r36320, r36321, r36322, r36323, r36324, r36325, r36326;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r36300);
        mpfr_init_set_str(r36301, "1", 10, MPFR_RNDN);
        mpfr_init(r36302);
        mpfr_init(r36303);
        mpfr_init(r36304);
        mpfr_init(r36305);
        mpfr_init(r36306);
        mpfr_init(r36307);
        mpfr_init(r36308);
        mpfr_init(r36309);
        mpfr_init(r36310);
        mpfr_init(r36311);
        mpfr_init(r36312);
        mpfr_init(r36313);
        mpfr_init(r36314);
        mpfr_init(r36315);
        mpfr_init(r36316);
        mpfr_init(r36317);
        mpfr_init(r36318);
        mpfr_init(r36319);
        mpfr_init(r36320);
        mpfr_init(r36321);
        mpfr_init(r36322);
        mpfr_init(r36323);
        mpfr_init(r36324);
        mpfr_init(r36325);
        mpfr_init(r36326);
}

double f_dm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r36300, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r36302, Ec, MPFR_RNDN);
        mpfr_set_d(r36303, Vef, MPFR_RNDN);
        mpfr_sub(r36304, r36302, r36303, MPFR_RNDN);
        mpfr_set_d(r36305, EDonor, MPFR_RNDN);
        mpfr_sub(r36306, r36304, r36305, MPFR_RNDN);
        mpfr_set_d(r36307, mu, MPFR_RNDN);
        mpfr_sub(r36308, r36306, r36307, MPFR_RNDN);
        mpfr_neg(r36309, r36308, MPFR_RNDN);
        mpfr_set_d(r36310, KbT, MPFR_RNDN);
        mpfr_div(r36311, r36309, r36310, MPFR_RNDN);
        mpfr_exp(r36312, r36311, MPFR_RNDN);
        mpfr_add(r36313, r36301, r36312, MPFR_RNDN);
        mpfr_div(r36314, r36300, r36313, MPFR_RNDN);
        mpfr_set_d(r36315, NaChar, MPFR_RNDN);
        mpfr_set_d(r36316, Ev, MPFR_RNDN);
        mpfr_add(r36317, r36316, r36303, MPFR_RNDN);
        mpfr_set_d(r36318, EAccept, MPFR_RNDN);
        mpfr_add(r36319, r36317, r36318, MPFR_RNDN);
        mpfr_neg(r36320, r36307, MPFR_RNDN);
        mpfr_add(r36321, r36319, r36320, MPFR_RNDN);
        mpfr_div(r36322, r36321, r36310, MPFR_RNDN);
        mpfr_exp(r36323, r36322, MPFR_RNDN);
        mpfr_add(r36324, r36301, r36323, MPFR_RNDN);
        mpfr_div(r36325, r36315, r36324, MPFR_RNDN);
        mpfr_add(r36326, r36314, r36325, MPFR_RNDN);
        return mpfr_get_d(r36326, MPFR_RNDN);
}

