#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 r10327 = NdChar;
        float r10328 = 1.0f;
        float r10329 = Ec;
        float r10330 = Vef;
        float r10331 = r10329 - r10330;
        float r10332 = EDonor;
        float r10333 = r10331 - r10332;
        float r10334 = mu;
        float r10335 = r10333 - r10334;
        float r10336 = -r10335;
        float r10337 = KbT;
        float r10338 = r10336 / r10337;
        float r10339 = exp(r10338);
        float r10340 = r10328 + r10339;
        float r10341 = r10327 / r10340;
        float r10342 = NaChar;
        float r10343 = Ev;
        float r10344 = r10343 + r10330;
        float r10345 = EAccept;
        float r10346 = r10344 + r10345;
        float r10347 = -r10334;
        float r10348 = r10346 + r10347;
        float r10349 = r10348 / r10337;
        float r10350 = exp(r10349);
        float r10351 = r10328 + r10350;
        float r10352 = r10342 / r10351;
        float r10353 = r10341 + r10352;
        return r10353;
}

double f_id(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r10354 = NdChar;
        double r10355 = 1.0;
        double r10356 = Ec;
        double r10357 = Vef;
        double r10358 = r10356 - r10357;
        double r10359 = EDonor;
        double r10360 = r10358 - r10359;
        double r10361 = mu;
        double r10362 = r10360 - r10361;
        double r10363 = -r10362;
        double r10364 = KbT;
        double r10365 = r10363 / r10364;
        double r10366 = exp(r10365);
        double r10367 = r10355 + r10366;
        double r10368 = r10354 / r10367;
        double r10369 = NaChar;
        double r10370 = Ev;
        double r10371 = r10370 + r10357;
        double r10372 = EAccept;
        double r10373 = r10371 + r10372;
        double r10374 = -r10361;
        double r10375 = r10373 + r10374;
        double r10376 = r10375 / r10364;
        double r10377 = exp(r10376);
        double r10378 = r10355 + r10377;
        double r10379 = r10369 / r10378;
        double r10380 = r10368 + r10379;
        return r10380;
}


double f_of(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r10381 = NdChar;
        float r10382 = 1.0f;
        float r10383 = mu;
        float r10384 = Ec;
        float r10385 = r10383 - r10384;
        float r10386 = EDonor;
        float r10387 = Vef;
        float r10388 = r10386 + r10387;
        float r10389 = r10385 + r10388;
        float r10390 = KbT;
        float r10391 = r10389 / r10390;
        float r10392 = cbrt(r10391);
        float r10393 = r10392 * r10392;
        float r10394 = r10392 * r10393;
        float r10395 = exp(r10394);
        float r10396 = r10382 + r10395;
        float r10397 = r10381 / r10396;
        float r10398 = NaChar;
        float r10399 = Ev;
        float r10400 = r10399 - r10383;
        float r10401 = EAccept;
        float r10402 = r10387 + r10401;
        float r10403 = r10400 + r10402;
        float r10404 = r10403 / r10390;
        float r10405 = exp(r10404);
        float r10406 = r10405 + r10382;
        float r10407 = r10398 / r10406;
        float r10408 = r10397 + r10407;
        return r10408;
}

double f_od(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r10409 = NdChar;
        double r10410 = 1.0;
        double r10411 = mu;
        double r10412 = Ec;
        double r10413 = r10411 - r10412;
        double r10414 = EDonor;
        double r10415 = Vef;
        double r10416 = r10414 + r10415;
        double r10417 = r10413 + r10416;
        double r10418 = KbT;
        double r10419 = r10417 / r10418;
        double r10420 = cbrt(r10419);
        double r10421 = r10420 * r10420;
        double r10422 = r10420 * r10421;
        double r10423 = exp(r10422);
        double r10424 = r10410 + r10423;
        double r10425 = r10409 / r10424;
        double r10426 = NaChar;
        double r10427 = Ev;
        double r10428 = r10427 - r10411;
        double r10429 = EAccept;
        double r10430 = r10415 + r10429;
        double r10431 = r10428 + r10430;
        double r10432 = r10431 / r10418;
        double r10433 = exp(r10432);
        double r10434 = r10433 + r10410;
        double r10435 = r10426 / r10434;
        double r10436 = r10425 + r10435;
        return r10436;
}

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 r10437, r10438, r10439, r10440, r10441, r10442, r10443, r10444, r10445, r10446, r10447, r10448, r10449, r10450, r10451, r10452, r10453, r10454, r10455, r10456, r10457, r10458, r10459, r10460, r10461, r10462, r10463;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r10437);
        mpfr_init_set_str(r10438, "1", 10, MPFR_RNDN);
        mpfr_init(r10439);
        mpfr_init(r10440);
        mpfr_init(r10441);
        mpfr_init(r10442);
        mpfr_init(r10443);
        mpfr_init(r10444);
        mpfr_init(r10445);
        mpfr_init(r10446);
        mpfr_init(r10447);
        mpfr_init(r10448);
        mpfr_init(r10449);
        mpfr_init(r10450);
        mpfr_init(r10451);
        mpfr_init(r10452);
        mpfr_init(r10453);
        mpfr_init(r10454);
        mpfr_init(r10455);
        mpfr_init(r10456);
        mpfr_init(r10457);
        mpfr_init(r10458);
        mpfr_init(r10459);
        mpfr_init(r10460);
        mpfr_init(r10461);
        mpfr_init(r10462);
        mpfr_init(r10463);
}

double f_im(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r10437, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r10439, Ec, MPFR_RNDN);
        mpfr_set_d(r10440, Vef, MPFR_RNDN);
        mpfr_sub(r10441, r10439, r10440, MPFR_RNDN);
        mpfr_set_d(r10442, EDonor, MPFR_RNDN);
        mpfr_sub(r10443, r10441, r10442, MPFR_RNDN);
        mpfr_set_d(r10444, mu, MPFR_RNDN);
        mpfr_sub(r10445, r10443, r10444, MPFR_RNDN);
        mpfr_neg(r10446, r10445, MPFR_RNDN);
        mpfr_set_d(r10447, KbT, MPFR_RNDN);
        mpfr_div(r10448, r10446, r10447, MPFR_RNDN);
        mpfr_exp(r10449, r10448, MPFR_RNDN);
        mpfr_add(r10450, r10438, r10449, MPFR_RNDN);
        mpfr_div(r10451, r10437, r10450, MPFR_RNDN);
        mpfr_set_d(r10452, NaChar, MPFR_RNDN);
        mpfr_set_d(r10453, Ev, MPFR_RNDN);
        mpfr_add(r10454, r10453, r10440, MPFR_RNDN);
        mpfr_set_d(r10455, EAccept, MPFR_RNDN);
        mpfr_add(r10456, r10454, r10455, MPFR_RNDN);
        mpfr_neg(r10457, r10444, MPFR_RNDN);
        mpfr_add(r10458, r10456, r10457, MPFR_RNDN);
        mpfr_div(r10459, r10458, r10447, MPFR_RNDN);
        mpfr_exp(r10460, r10459, MPFR_RNDN);
        mpfr_add(r10461, r10438, r10460, MPFR_RNDN);
        mpfr_div(r10462, r10452, r10461, MPFR_RNDN);
        mpfr_add(r10463, r10451, r10462, MPFR_RNDN);
        return mpfr_get_d(r10463, MPFR_RNDN);
}

static mpfr_t r10464, r10465, r10466, r10467, r10468, r10469, r10470, r10471, r10472, r10473, r10474, r10475, r10476, r10477, r10478, r10479, r10480, r10481, r10482, r10483, r10484, r10485, r10486, r10487, r10488, r10489, r10490, r10491;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10464);
        mpfr_init_set_str(r10465, "1", 10, MPFR_RNDN);
        mpfr_init(r10466);
        mpfr_init(r10467);
        mpfr_init(r10468);
        mpfr_init(r10469);
        mpfr_init(r10470);
        mpfr_init(r10471);
        mpfr_init(r10472);
        mpfr_init(r10473);
        mpfr_init(r10474);
        mpfr_init(r10475);
        mpfr_init(r10476);
        mpfr_init(r10477);
        mpfr_init(r10478);
        mpfr_init(r10479);
        mpfr_init(r10480);
        mpfr_init(r10481);
        mpfr_init(r10482);
        mpfr_init(r10483);
        mpfr_init(r10484);
        mpfr_init(r10485);
        mpfr_init(r10486);
        mpfr_init(r10487);
        mpfr_init(r10488);
        mpfr_init(r10489);
        mpfr_init(r10490);
        mpfr_init(r10491);
}

double f_fm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r10464, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r10466, mu, MPFR_RNDN);
        mpfr_set_d(r10467, Ec, MPFR_RNDN);
        mpfr_sub(r10468, r10466, r10467, MPFR_RNDN);
        mpfr_set_d(r10469, EDonor, MPFR_RNDN);
        mpfr_set_d(r10470, Vef, MPFR_RNDN);
        mpfr_add(r10471, r10469, r10470, MPFR_RNDN);
        mpfr_add(r10472, r10468, r10471, MPFR_RNDN);
        mpfr_set_d(r10473, KbT, MPFR_RNDN);
        mpfr_div(r10474, r10472, r10473, MPFR_RNDN);
        mpfr_cbrt(r10475, r10474, MPFR_RNDN);
        mpfr_mul(r10476, r10475, r10475, MPFR_RNDN);
        mpfr_mul(r10477, r10475, r10476, MPFR_RNDN);
        mpfr_exp(r10478, r10477, MPFR_RNDN);
        mpfr_add(r10479, r10465, r10478, MPFR_RNDN);
        mpfr_div(r10480, r10464, r10479, MPFR_RNDN);
        mpfr_set_d(r10481, NaChar, MPFR_RNDN);
        mpfr_set_d(r10482, Ev, MPFR_RNDN);
        mpfr_sub(r10483, r10482, r10466, MPFR_RNDN);
        mpfr_set_d(r10484, EAccept, MPFR_RNDN);
        mpfr_add(r10485, r10470, r10484, MPFR_RNDN);
        mpfr_add(r10486, r10483, r10485, MPFR_RNDN);
        mpfr_div(r10487, r10486, r10473, MPFR_RNDN);
        mpfr_exp(r10488, r10487, MPFR_RNDN);
        mpfr_add(r10489, r10488, r10465, MPFR_RNDN);
        mpfr_div(r10490, r10481, r10489, MPFR_RNDN);
        mpfr_add(r10491, r10480, r10490, MPFR_RNDN);
        return mpfr_get_d(r10491, MPFR_RNDN);
}

static mpfr_t r10492, r10493, r10494, r10495, r10496, r10497, r10498, r10499, r10500, r10501, r10502, r10503, r10504, r10505, r10506, r10507, r10508, r10509, r10510, r10511, r10512, r10513, r10514, r10515, r10516, r10517, r10518, r10519;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10492);
        mpfr_init_set_str(r10493, "1", 10, MPFR_RNDN);
        mpfr_init(r10494);
        mpfr_init(r10495);
        mpfr_init(r10496);
        mpfr_init(r10497);
        mpfr_init(r10498);
        mpfr_init(r10499);
        mpfr_init(r10500);
        mpfr_init(r10501);
        mpfr_init(r10502);
        mpfr_init(r10503);
        mpfr_init(r10504);
        mpfr_init(r10505);
        mpfr_init(r10506);
        mpfr_init(r10507);
        mpfr_init(r10508);
        mpfr_init(r10509);
        mpfr_init(r10510);
        mpfr_init(r10511);
        mpfr_init(r10512);
        mpfr_init(r10513);
        mpfr_init(r10514);
        mpfr_init(r10515);
        mpfr_init(r10516);
        mpfr_init(r10517);
        mpfr_init(r10518);
        mpfr_init(r10519);
}

double f_dm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r10492, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r10494, mu, MPFR_RNDN);
        mpfr_set_d(r10495, Ec, MPFR_RNDN);
        mpfr_sub(r10496, r10494, r10495, MPFR_RNDN);
        mpfr_set_d(r10497, EDonor, MPFR_RNDN);
        mpfr_set_d(r10498, Vef, MPFR_RNDN);
        mpfr_add(r10499, r10497, r10498, MPFR_RNDN);
        mpfr_add(r10500, r10496, r10499, MPFR_RNDN);
        mpfr_set_d(r10501, KbT, MPFR_RNDN);
        mpfr_div(r10502, r10500, r10501, MPFR_RNDN);
        mpfr_cbrt(r10503, r10502, MPFR_RNDN);
        mpfr_mul(r10504, r10503, r10503, MPFR_RNDN);
        mpfr_mul(r10505, r10503, r10504, MPFR_RNDN);
        mpfr_exp(r10506, r10505, MPFR_RNDN);
        mpfr_add(r10507, r10493, r10506, MPFR_RNDN);
        mpfr_div(r10508, r10492, r10507, MPFR_RNDN);
        mpfr_set_d(r10509, NaChar, MPFR_RNDN);
        mpfr_set_d(r10510, Ev, MPFR_RNDN);
        mpfr_sub(r10511, r10510, r10494, MPFR_RNDN);
        mpfr_set_d(r10512, EAccept, MPFR_RNDN);
        mpfr_add(r10513, r10498, r10512, MPFR_RNDN);
        mpfr_add(r10514, r10511, r10513, MPFR_RNDN);
        mpfr_div(r10515, r10514, r10501, MPFR_RNDN);
        mpfr_exp(r10516, r10515, MPFR_RNDN);
        mpfr_add(r10517, r10516, r10493, MPFR_RNDN);
        mpfr_div(r10518, r10509, r10517, MPFR_RNDN);
        mpfr_add(r10519, r10508, r10518, MPFR_RNDN);
        return mpfr_get_d(r10519, MPFR_RNDN);
}

