#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 r11147 = NdChar;
        float r11148 = 1;
        float r11149 = Ec;
        float r11150 = Vef;
        float r11151 = r11149 - r11150;
        float r11152 = EDonor;
        float r11153 = r11151 - r11152;
        float r11154 = mu;
        float r11155 = r11153 - r11154;
        float r11156 = -r11155;
        float r11157 = KbT;
        float r11158 = r11156 / r11157;
        float r11159 = exp(r11158);
        float r11160 = r11148 + r11159;
        float r11161 = r11147 / r11160;
        float r11162 = NaChar;
        float r11163 = Ev;
        float r11164 = r11163 + r11150;
        float r11165 = EAccept;
        float r11166 = r11164 + r11165;
        float r11167 = -r11154;
        float r11168 = r11166 + r11167;
        float r11169 = r11168 / r11157;
        float r11170 = exp(r11169);
        float r11171 = r11148 + r11170;
        float r11172 = r11162 / r11171;
        float r11173 = r11161 + r11172;
        return r11173;
}

double f_id(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r11174 = NdChar;
        double r11175 = 1;
        double r11176 = Ec;
        double r11177 = Vef;
        double r11178 = r11176 - r11177;
        double r11179 = EDonor;
        double r11180 = r11178 - r11179;
        double r11181 = mu;
        double r11182 = r11180 - r11181;
        double r11183 = -r11182;
        double r11184 = KbT;
        double r11185 = r11183 / r11184;
        double r11186 = exp(r11185);
        double r11187 = r11175 + r11186;
        double r11188 = r11174 / r11187;
        double r11189 = NaChar;
        double r11190 = Ev;
        double r11191 = r11190 + r11177;
        double r11192 = EAccept;
        double r11193 = r11191 + r11192;
        double r11194 = -r11181;
        double r11195 = r11193 + r11194;
        double r11196 = r11195 / r11184;
        double r11197 = exp(r11196);
        double r11198 = r11175 + r11197;
        double r11199 = r11189 / r11198;
        double r11200 = r11188 + r11199;
        return r11200;
}


double f_of(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r11201 = NdChar;
        float r11202 = 1;
        float r11203 = Ec;
        float r11204 = Vef;
        float r11205 = r11203 - r11204;
        float r11206 = EDonor;
        float r11207 = r11205 - r11206;
        float r11208 = mu;
        float r11209 = r11207 - r11208;
        float r11210 = -r11209;
        float r11211 = KbT;
        float r11212 = r11210 / r11211;
        float r11213 = exp(r11212);
        float r11214 = r11202 + r11213;
        float r11215 = sqrt(r11214);
        float r11216 = r11201 / r11215;
        float r11217 = r11216 / r11215;
        float r11218 = NaChar;
        float r11219 = Ev;
        float r11220 = r11219 + r11204;
        float r11221 = EAccept;
        float r11222 = r11220 + r11221;
        float r11223 = -r11208;
        float r11224 = r11222 + r11223;
        float r11225 = r11224 / r11211;
        float r11226 = exp(r11225);
        float r11227 = r11202 + r11226;
        float r11228 = r11218 / r11227;
        float r11229 = r11217 + r11228;
        return r11229;
}

double f_od(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r11230 = NdChar;
        double r11231 = 1;
        double r11232 = Ec;
        double r11233 = Vef;
        double r11234 = r11232 - r11233;
        double r11235 = EDonor;
        double r11236 = r11234 - r11235;
        double r11237 = mu;
        double r11238 = r11236 - r11237;
        double r11239 = -r11238;
        double r11240 = KbT;
        double r11241 = r11239 / r11240;
        double r11242 = exp(r11241);
        double r11243 = r11231 + r11242;
        double r11244 = sqrt(r11243);
        double r11245 = r11230 / r11244;
        double r11246 = r11245 / r11244;
        double r11247 = NaChar;
        double r11248 = Ev;
        double r11249 = r11248 + r11233;
        double r11250 = EAccept;
        double r11251 = r11249 + r11250;
        double r11252 = -r11237;
        double r11253 = r11251 + r11252;
        double r11254 = r11253 / r11240;
        double r11255 = exp(r11254);
        double r11256 = r11231 + r11255;
        double r11257 = r11247 / r11256;
        double r11258 = r11246 + r11257;
        return r11258;
}

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 r11259, r11260, r11261, r11262, r11263, r11264, r11265, r11266, r11267, r11268, r11269, r11270, r11271, r11272, r11273, r11274, r11275, r11276, r11277, r11278, r11279, r11280, r11281, r11282, r11283, r11284, r11285;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r11259);
        mpfr_init_set_str(r11260, "1", 10, MPFR_RNDN);
        mpfr_init(r11261);
        mpfr_init(r11262);
        mpfr_init(r11263);
        mpfr_init(r11264);
        mpfr_init(r11265);
        mpfr_init(r11266);
        mpfr_init(r11267);
        mpfr_init(r11268);
        mpfr_init(r11269);
        mpfr_init(r11270);
        mpfr_init(r11271);
        mpfr_init(r11272);
        mpfr_init(r11273);
        mpfr_init(r11274);
        mpfr_init(r11275);
        mpfr_init(r11276);
        mpfr_init(r11277);
        mpfr_init(r11278);
        mpfr_init(r11279);
        mpfr_init(r11280);
        mpfr_init(r11281);
        mpfr_init(r11282);
        mpfr_init(r11283);
        mpfr_init(r11284);
        mpfr_init(r11285);
}

double f_im(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r11259, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r11261, Ec, MPFR_RNDN);
        mpfr_set_d(r11262, Vef, MPFR_RNDN);
        mpfr_sub(r11263, r11261, r11262, MPFR_RNDN);
        mpfr_set_d(r11264, EDonor, MPFR_RNDN);
        mpfr_sub(r11265, r11263, r11264, MPFR_RNDN);
        mpfr_set_d(r11266, mu, MPFR_RNDN);
        mpfr_sub(r11267, r11265, r11266, MPFR_RNDN);
        mpfr_neg(r11268, r11267, MPFR_RNDN);
        mpfr_set_d(r11269, KbT, MPFR_RNDN);
        mpfr_div(r11270, r11268, r11269, MPFR_RNDN);
        mpfr_exp(r11271, r11270, MPFR_RNDN);
        mpfr_add(r11272, r11260, r11271, MPFR_RNDN);
        mpfr_div(r11273, r11259, r11272, MPFR_RNDN);
        mpfr_set_d(r11274, NaChar, MPFR_RNDN);
        mpfr_set_d(r11275, Ev, MPFR_RNDN);
        mpfr_add(r11276, r11275, r11262, MPFR_RNDN);
        mpfr_set_d(r11277, EAccept, MPFR_RNDN);
        mpfr_add(r11278, r11276, r11277, MPFR_RNDN);
        mpfr_neg(r11279, r11266, MPFR_RNDN);
        mpfr_add(r11280, r11278, r11279, MPFR_RNDN);
        mpfr_div(r11281, r11280, r11269, MPFR_RNDN);
        mpfr_exp(r11282, r11281, MPFR_RNDN);
        mpfr_add(r11283, r11260, r11282, MPFR_RNDN);
        mpfr_div(r11284, r11274, r11283, MPFR_RNDN);
        mpfr_add(r11285, r11273, r11284, MPFR_RNDN);
        return mpfr_get_d(r11285, MPFR_RNDN);
}

static mpfr_t r11286, r11287, r11288, r11289, r11290, r11291, r11292, r11293, r11294, r11295, r11296, r11297, r11298, r11299, r11300, r11301, r11302, r11303, r11304, r11305, r11306, r11307, r11308, r11309, r11310, r11311, r11312, r11313, r11314;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11286);
        mpfr_init_set_str(r11287, "1", 10, MPFR_RNDN);
        mpfr_init(r11288);
        mpfr_init(r11289);
        mpfr_init(r11290);
        mpfr_init(r11291);
        mpfr_init(r11292);
        mpfr_init(r11293);
        mpfr_init(r11294);
        mpfr_init(r11295);
        mpfr_init(r11296);
        mpfr_init(r11297);
        mpfr_init(r11298);
        mpfr_init(r11299);
        mpfr_init(r11300);
        mpfr_init(r11301);
        mpfr_init(r11302);
        mpfr_init(r11303);
        mpfr_init(r11304);
        mpfr_init(r11305);
        mpfr_init(r11306);
        mpfr_init(r11307);
        mpfr_init(r11308);
        mpfr_init(r11309);
        mpfr_init(r11310);
        mpfr_init(r11311);
        mpfr_init(r11312);
        mpfr_init(r11313);
        mpfr_init(r11314);
}

double f_fm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r11286, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r11288, Ec, MPFR_RNDN);
        mpfr_set_d(r11289, Vef, MPFR_RNDN);
        mpfr_sub(r11290, r11288, r11289, MPFR_RNDN);
        mpfr_set_d(r11291, EDonor, MPFR_RNDN);
        mpfr_sub(r11292, r11290, r11291, MPFR_RNDN);
        mpfr_set_d(r11293, mu, MPFR_RNDN);
        mpfr_sub(r11294, r11292, r11293, MPFR_RNDN);
        mpfr_neg(r11295, r11294, MPFR_RNDN);
        mpfr_set_d(r11296, KbT, MPFR_RNDN);
        mpfr_div(r11297, r11295, r11296, MPFR_RNDN);
        mpfr_exp(r11298, r11297, MPFR_RNDN);
        mpfr_add(r11299, r11287, r11298, MPFR_RNDN);
        mpfr_sqrt(r11300, r11299, MPFR_RNDN);
        mpfr_div(r11301, r11286, r11300, MPFR_RNDN);
        mpfr_div(r11302, r11301, r11300, MPFR_RNDN);
        mpfr_set_d(r11303, NaChar, MPFR_RNDN);
        mpfr_set_d(r11304, Ev, MPFR_RNDN);
        mpfr_add(r11305, r11304, r11289, MPFR_RNDN);
        mpfr_set_d(r11306, EAccept, MPFR_RNDN);
        mpfr_add(r11307, r11305, r11306, MPFR_RNDN);
        mpfr_neg(r11308, r11293, MPFR_RNDN);
        mpfr_add(r11309, r11307, r11308, MPFR_RNDN);
        mpfr_div(r11310, r11309, r11296, MPFR_RNDN);
        mpfr_exp(r11311, r11310, MPFR_RNDN);
        mpfr_add(r11312, r11287, r11311, MPFR_RNDN);
        mpfr_div(r11313, r11303, r11312, MPFR_RNDN);
        mpfr_add(r11314, r11302, r11313, MPFR_RNDN);
        return mpfr_get_d(r11314, MPFR_RNDN);
}

static mpfr_t r11315, r11316, r11317, r11318, r11319, r11320, r11321, r11322, r11323, r11324, r11325, r11326, r11327, r11328, r11329, r11330, r11331, r11332, r11333, r11334, r11335, r11336, r11337, r11338, r11339, r11340, r11341, r11342, r11343;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11315);
        mpfr_init_set_str(r11316, "1", 10, MPFR_RNDN);
        mpfr_init(r11317);
        mpfr_init(r11318);
        mpfr_init(r11319);
        mpfr_init(r11320);
        mpfr_init(r11321);
        mpfr_init(r11322);
        mpfr_init(r11323);
        mpfr_init(r11324);
        mpfr_init(r11325);
        mpfr_init(r11326);
        mpfr_init(r11327);
        mpfr_init(r11328);
        mpfr_init(r11329);
        mpfr_init(r11330);
        mpfr_init(r11331);
        mpfr_init(r11332);
        mpfr_init(r11333);
        mpfr_init(r11334);
        mpfr_init(r11335);
        mpfr_init(r11336);
        mpfr_init(r11337);
        mpfr_init(r11338);
        mpfr_init(r11339);
        mpfr_init(r11340);
        mpfr_init(r11341);
        mpfr_init(r11342);
        mpfr_init(r11343);
}

double f_dm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r11315, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r11317, Ec, MPFR_RNDN);
        mpfr_set_d(r11318, Vef, MPFR_RNDN);
        mpfr_sub(r11319, r11317, r11318, MPFR_RNDN);
        mpfr_set_d(r11320, EDonor, MPFR_RNDN);
        mpfr_sub(r11321, r11319, r11320, MPFR_RNDN);
        mpfr_set_d(r11322, mu, MPFR_RNDN);
        mpfr_sub(r11323, r11321, r11322, MPFR_RNDN);
        mpfr_neg(r11324, r11323, MPFR_RNDN);
        mpfr_set_d(r11325, KbT, MPFR_RNDN);
        mpfr_div(r11326, r11324, r11325, MPFR_RNDN);
        mpfr_exp(r11327, r11326, MPFR_RNDN);
        mpfr_add(r11328, r11316, r11327, MPFR_RNDN);
        mpfr_sqrt(r11329, r11328, MPFR_RNDN);
        mpfr_div(r11330, r11315, r11329, MPFR_RNDN);
        mpfr_div(r11331, r11330, r11329, MPFR_RNDN);
        mpfr_set_d(r11332, NaChar, MPFR_RNDN);
        mpfr_set_d(r11333, Ev, MPFR_RNDN);
        mpfr_add(r11334, r11333, r11318, MPFR_RNDN);
        mpfr_set_d(r11335, EAccept, MPFR_RNDN);
        mpfr_add(r11336, r11334, r11335, MPFR_RNDN);
        mpfr_neg(r11337, r11322, MPFR_RNDN);
        mpfr_add(r11338, r11336, r11337, MPFR_RNDN);
        mpfr_div(r11339, r11338, r11325, MPFR_RNDN);
        mpfr_exp(r11340, r11339, MPFR_RNDN);
        mpfr_add(r11341, r11316, r11340, MPFR_RNDN);
        mpfr_div(r11342, r11332, r11341, MPFR_RNDN);
        mpfr_add(r11343, r11331, r11342, MPFR_RNDN);
        return mpfr_get_d(r11343, MPFR_RNDN);
}

