#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 r32241 = NdChar;
        float r32242 = 1.0f;
        float r32243 = Ec;
        float r32244 = Vef;
        float r32245 = r32243 - r32244;
        float r32246 = EDonor;
        float r32247 = r32245 - r32246;
        float r32248 = mu;
        float r32249 = r32247 - r32248;
        float r32250 = -r32249;
        float r32251 = KbT;
        float r32252 = r32250 / r32251;
        float r32253 = exp(r32252);
        float r32254 = r32242 + r32253;
        float r32255 = r32241 / r32254;
        float r32256 = NaChar;
        float r32257 = Ev;
        float r32258 = r32257 + r32244;
        float r32259 = EAccept;
        float r32260 = r32258 + r32259;
        float r32261 = -r32248;
        float r32262 = r32260 + r32261;
        float r32263 = r32262 / r32251;
        float r32264 = exp(r32263);
        float r32265 = r32242 + r32264;
        float r32266 = r32256 / r32265;
        float r32267 = r32255 + r32266;
        return r32267;
}

double f_id(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r32268 = NdChar;
        double r32269 = 1.0;
        double r32270 = Ec;
        double r32271 = Vef;
        double r32272 = r32270 - r32271;
        double r32273 = EDonor;
        double r32274 = r32272 - r32273;
        double r32275 = mu;
        double r32276 = r32274 - r32275;
        double r32277 = -r32276;
        double r32278 = KbT;
        double r32279 = r32277 / r32278;
        double r32280 = exp(r32279);
        double r32281 = r32269 + r32280;
        double r32282 = r32268 / r32281;
        double r32283 = NaChar;
        double r32284 = Ev;
        double r32285 = r32284 + r32271;
        double r32286 = EAccept;
        double r32287 = r32285 + r32286;
        double r32288 = -r32275;
        double r32289 = r32287 + r32288;
        double r32290 = r32289 / r32278;
        double r32291 = exp(r32290);
        double r32292 = r32269 + r32291;
        double r32293 = r32283 / r32292;
        double r32294 = r32282 + r32293;
        return r32294;
}


double f_of(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r32295 = NdChar;
        float r32296 = 1.0f;
        float r32297 = exp(1.0);
        float r32298 = Ec;
        float r32299 = Vef;
        float r32300 = r32298 - r32299;
        float r32301 = EDonor;
        float r32302 = r32300 - r32301;
        float r32303 = mu;
        float r32304 = r32302 - r32303;
        float r32305 = -r32304;
        float r32306 = KbT;
        float r32307 = r32305 / r32306;
        float r32308 = pow(r32297, r32307);
        float r32309 = r32296 + r32308;
        float r32310 = r32295 / r32309;
        float r32311 = NaChar;
        float r32312 = Ev;
        float r32313 = r32312 + r32299;
        float r32314 = EAccept;
        float r32315 = r32313 + r32314;
        float r32316 = -r32303;
        float r32317 = r32315 + r32316;
        float r32318 = r32317 / r32306;
        float r32319 = exp(r32318);
        float r32320 = r32296 + r32319;
        float r32321 = r32311 / r32320;
        float r32322 = r32310 + r32321;
        return r32322;
}

double f_od(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r32323 = NdChar;
        double r32324 = 1.0;
        double r32325 = exp(1.0);
        double r32326 = Ec;
        double r32327 = Vef;
        double r32328 = r32326 - r32327;
        double r32329 = EDonor;
        double r32330 = r32328 - r32329;
        double r32331 = mu;
        double r32332 = r32330 - r32331;
        double r32333 = -r32332;
        double r32334 = KbT;
        double r32335 = r32333 / r32334;
        double r32336 = pow(r32325, r32335);
        double r32337 = r32324 + r32336;
        double r32338 = r32323 / r32337;
        double r32339 = NaChar;
        double r32340 = Ev;
        double r32341 = r32340 + r32327;
        double r32342 = EAccept;
        double r32343 = r32341 + r32342;
        double r32344 = -r32331;
        double r32345 = r32343 + r32344;
        double r32346 = r32345 / r32334;
        double r32347 = exp(r32346);
        double r32348 = r32324 + r32347;
        double r32349 = r32339 / r32348;
        double r32350 = r32338 + r32349;
        return r32350;
}

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 r32351, r32352, r32353, r32354, r32355, r32356, r32357, r32358, r32359, r32360, r32361, r32362, r32363, r32364, r32365, r32366, r32367, r32368, r32369, r32370, r32371, r32372, r32373, r32374, r32375, r32376, r32377;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r32351);
        mpfr_init_set_str(r32352, "1", 10, MPFR_RNDN);
        mpfr_init(r32353);
        mpfr_init(r32354);
        mpfr_init(r32355);
        mpfr_init(r32356);
        mpfr_init(r32357);
        mpfr_init(r32358);
        mpfr_init(r32359);
        mpfr_init(r32360);
        mpfr_init(r32361);
        mpfr_init(r32362);
        mpfr_init(r32363);
        mpfr_init(r32364);
        mpfr_init(r32365);
        mpfr_init(r32366);
        mpfr_init(r32367);
        mpfr_init(r32368);
        mpfr_init(r32369);
        mpfr_init(r32370);
        mpfr_init(r32371);
        mpfr_init(r32372);
        mpfr_init(r32373);
        mpfr_init(r32374);
        mpfr_init(r32375);
        mpfr_init(r32376);
        mpfr_init(r32377);
}

double f_im(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r32351, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r32353, Ec, MPFR_RNDN);
        mpfr_set_d(r32354, Vef, MPFR_RNDN);
        mpfr_sub(r32355, r32353, r32354, MPFR_RNDN);
        mpfr_set_d(r32356, EDonor, MPFR_RNDN);
        mpfr_sub(r32357, r32355, r32356, MPFR_RNDN);
        mpfr_set_d(r32358, mu, MPFR_RNDN);
        mpfr_sub(r32359, r32357, r32358, MPFR_RNDN);
        mpfr_neg(r32360, r32359, MPFR_RNDN);
        mpfr_set_d(r32361, KbT, MPFR_RNDN);
        mpfr_div(r32362, r32360, r32361, MPFR_RNDN);
        mpfr_exp(r32363, r32362, MPFR_RNDN);
        mpfr_add(r32364, r32352, r32363, MPFR_RNDN);
        mpfr_div(r32365, r32351, r32364, MPFR_RNDN);
        mpfr_set_d(r32366, NaChar, MPFR_RNDN);
        mpfr_set_d(r32367, Ev, MPFR_RNDN);
        mpfr_add(r32368, r32367, r32354, MPFR_RNDN);
        mpfr_set_d(r32369, EAccept, MPFR_RNDN);
        mpfr_add(r32370, r32368, r32369, MPFR_RNDN);
        mpfr_neg(r32371, r32358, MPFR_RNDN);
        mpfr_add(r32372, r32370, r32371, MPFR_RNDN);
        mpfr_div(r32373, r32372, r32361, MPFR_RNDN);
        mpfr_exp(r32374, r32373, MPFR_RNDN);
        mpfr_add(r32375, r32352, r32374, MPFR_RNDN);
        mpfr_div(r32376, r32366, r32375, MPFR_RNDN);
        mpfr_add(r32377, r32365, r32376, MPFR_RNDN);
        return mpfr_get_d(r32377, MPFR_RNDN);
}

static mpfr_t r32378, r32379, r32380, r32381, r32382, r32383, r32384, r32385, r32386, r32387, r32388, r32389, r32390, r32391, r32392, r32393, r32394, r32395, r32396, r32397, r32398, r32399, r32400, r32401, r32402, r32403, r32404, r32405;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r32378);
        mpfr_init_set_str(r32379, "1", 10, MPFR_RNDN);
        mpfr_init(r32380);
        mpfr_init(r32381);
        mpfr_init(r32382);
        mpfr_init(r32383);
        mpfr_init(r32384);
        mpfr_init(r32385);
        mpfr_init(r32386);
        mpfr_init(r32387);
        mpfr_init(r32388);
        mpfr_init(r32389);
        mpfr_init(r32390);
        mpfr_init(r32391);
        mpfr_init(r32392);
        mpfr_init(r32393);
        mpfr_init(r32394);
        mpfr_init(r32395);
        mpfr_init(r32396);
        mpfr_init(r32397);
        mpfr_init(r32398);
        mpfr_init(r32399);
        mpfr_init(r32400);
        mpfr_init(r32401);
        mpfr_init(r32402);
        mpfr_init(r32403);
        mpfr_init(r32404);
        mpfr_init(r32405);
}

double f_fm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r32378, NdChar, MPFR_RNDN);
        ;
        mpfr_set_si(r32380, 1, MPFR_RNDN); mpfr_exp(r32380, r32380, MPFR_RNDN);;
        mpfr_set_d(r32381, Ec, MPFR_RNDN);
        mpfr_set_d(r32382, Vef, MPFR_RNDN);
        mpfr_sub(r32383, r32381, r32382, MPFR_RNDN);
        mpfr_set_d(r32384, EDonor, MPFR_RNDN);
        mpfr_sub(r32385, r32383, r32384, MPFR_RNDN);
        mpfr_set_d(r32386, mu, MPFR_RNDN);
        mpfr_sub(r32387, r32385, r32386, MPFR_RNDN);
        mpfr_neg(r32388, r32387, MPFR_RNDN);
        mpfr_set_d(r32389, KbT, MPFR_RNDN);
        mpfr_div(r32390, r32388, r32389, MPFR_RNDN);
        mpfr_pow(r32391, r32380, r32390, MPFR_RNDN);
        mpfr_add(r32392, r32379, r32391, MPFR_RNDN);
        mpfr_div(r32393, r32378, r32392, MPFR_RNDN);
        mpfr_set_d(r32394, NaChar, MPFR_RNDN);
        mpfr_set_d(r32395, Ev, MPFR_RNDN);
        mpfr_add(r32396, r32395, r32382, MPFR_RNDN);
        mpfr_set_d(r32397, EAccept, MPFR_RNDN);
        mpfr_add(r32398, r32396, r32397, MPFR_RNDN);
        mpfr_neg(r32399, r32386, MPFR_RNDN);
        mpfr_add(r32400, r32398, r32399, MPFR_RNDN);
        mpfr_div(r32401, r32400, r32389, MPFR_RNDN);
        mpfr_exp(r32402, r32401, MPFR_RNDN);
        mpfr_add(r32403, r32379, r32402, MPFR_RNDN);
        mpfr_div(r32404, r32394, r32403, MPFR_RNDN);
        mpfr_add(r32405, r32393, r32404, MPFR_RNDN);
        return mpfr_get_d(r32405, MPFR_RNDN);
}

static mpfr_t r32406, r32407, r32408, r32409, r32410, r32411, r32412, r32413, r32414, r32415, r32416, r32417, r32418, r32419, r32420, r32421, r32422, r32423, r32424, r32425, r32426, r32427, r32428, r32429, r32430, r32431, r32432, r32433;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r32406);
        mpfr_init_set_str(r32407, "1", 10, MPFR_RNDN);
        mpfr_init(r32408);
        mpfr_init(r32409);
        mpfr_init(r32410);
        mpfr_init(r32411);
        mpfr_init(r32412);
        mpfr_init(r32413);
        mpfr_init(r32414);
        mpfr_init(r32415);
        mpfr_init(r32416);
        mpfr_init(r32417);
        mpfr_init(r32418);
        mpfr_init(r32419);
        mpfr_init(r32420);
        mpfr_init(r32421);
        mpfr_init(r32422);
        mpfr_init(r32423);
        mpfr_init(r32424);
        mpfr_init(r32425);
        mpfr_init(r32426);
        mpfr_init(r32427);
        mpfr_init(r32428);
        mpfr_init(r32429);
        mpfr_init(r32430);
        mpfr_init(r32431);
        mpfr_init(r32432);
        mpfr_init(r32433);
}

double f_dm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r32406, NdChar, MPFR_RNDN);
        ;
        mpfr_set_si(r32408, 1, MPFR_RNDN); mpfr_exp(r32408, r32408, MPFR_RNDN);;
        mpfr_set_d(r32409, Ec, MPFR_RNDN);
        mpfr_set_d(r32410, Vef, MPFR_RNDN);
        mpfr_sub(r32411, r32409, r32410, MPFR_RNDN);
        mpfr_set_d(r32412, EDonor, MPFR_RNDN);
        mpfr_sub(r32413, r32411, r32412, MPFR_RNDN);
        mpfr_set_d(r32414, mu, MPFR_RNDN);
        mpfr_sub(r32415, r32413, r32414, MPFR_RNDN);
        mpfr_neg(r32416, r32415, MPFR_RNDN);
        mpfr_set_d(r32417, KbT, MPFR_RNDN);
        mpfr_div(r32418, r32416, r32417, MPFR_RNDN);
        mpfr_pow(r32419, r32408, r32418, MPFR_RNDN);
        mpfr_add(r32420, r32407, r32419, MPFR_RNDN);
        mpfr_div(r32421, r32406, r32420, MPFR_RNDN);
        mpfr_set_d(r32422, NaChar, MPFR_RNDN);
        mpfr_set_d(r32423, Ev, MPFR_RNDN);
        mpfr_add(r32424, r32423, r32410, MPFR_RNDN);
        mpfr_set_d(r32425, EAccept, MPFR_RNDN);
        mpfr_add(r32426, r32424, r32425, MPFR_RNDN);
        mpfr_neg(r32427, r32414, MPFR_RNDN);
        mpfr_add(r32428, r32426, r32427, MPFR_RNDN);
        mpfr_div(r32429, r32428, r32417, MPFR_RNDN);
        mpfr_exp(r32430, r32429, MPFR_RNDN);
        mpfr_add(r32431, r32407, r32430, MPFR_RNDN);
        mpfr_div(r32432, r32422, r32431, MPFR_RNDN);
        mpfr_add(r32433, r32421, r32432, MPFR_RNDN);
        return mpfr_get_d(r32433, MPFR_RNDN);
}

