#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 r27317 = NdChar;
        float r27318 = 1;
        float r27319 = Ec;
        float r27320 = Vef;
        float r27321 = r27319 - r27320;
        float r27322 = EDonor;
        float r27323 = r27321 - r27322;
        float r27324 = mu;
        float r27325 = r27323 - r27324;
        float r27326 = -r27325;
        float r27327 = KbT;
        float r27328 = r27326 / r27327;
        float r27329 = exp(r27328);
        float r27330 = r27318 + r27329;
        float r27331 = r27317 / r27330;
        float r27332 = NaChar;
        float r27333 = Ev;
        float r27334 = r27333 + r27320;
        float r27335 = EAccept;
        float r27336 = r27334 + r27335;
        float r27337 = -r27324;
        float r27338 = r27336 + r27337;
        float r27339 = r27338 / r27327;
        float r27340 = exp(r27339);
        float r27341 = r27318 + r27340;
        float r27342 = r27332 / r27341;
        float r27343 = r27331 + r27342;
        return r27343;
}

double f_id(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r27344 = NdChar;
        double r27345 = 1;
        double r27346 = Ec;
        double r27347 = Vef;
        double r27348 = r27346 - r27347;
        double r27349 = EDonor;
        double r27350 = r27348 - r27349;
        double r27351 = mu;
        double r27352 = r27350 - r27351;
        double r27353 = -r27352;
        double r27354 = KbT;
        double r27355 = r27353 / r27354;
        double r27356 = exp(r27355);
        double r27357 = r27345 + r27356;
        double r27358 = r27344 / r27357;
        double r27359 = NaChar;
        double r27360 = Ev;
        double r27361 = r27360 + r27347;
        double r27362 = EAccept;
        double r27363 = r27361 + r27362;
        double r27364 = -r27351;
        double r27365 = r27363 + r27364;
        double r27366 = r27365 / r27354;
        double r27367 = exp(r27366);
        double r27368 = r27345 + r27367;
        double r27369 = r27359 / r27368;
        double r27370 = r27358 + r27369;
        return r27370;
}


double f_of(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r27371 = NdChar;
        float r27372 = 1;
        float r27373 = Ec;
        float r27374 = Vef;
        float r27375 = r27373 - r27374;
        float r27376 = EDonor;
        float r27377 = r27375 - r27376;
        float r27378 = mu;
        float r27379 = r27377 - r27378;
        float r27380 = -r27379;
        float r27381 = KbT;
        float r27382 = r27380 / r27381;
        float r27383 = exp(r27382);
        float r27384 = r27372 + r27383;
        float r27385 = r27371 / r27384;
        float r27386 = NaChar;
        float r27387 = Ev;
        float r27388 = r27387 - r27378;
        float r27389 = EAccept;
        float r27390 = r27389 + r27374;
        float r27391 = r27388 + r27390;
        float r27392 = r27391 / r27381;
        float r27393 = exp(r27392);
        float r27394 = r27393 + r27372;
        float r27395 = sqrt(r27394);
        float r27396 = r27386 / r27395;
        float r27397 = r27387 + r27374;
        float r27398 = r27397 + r27389;
        float r27399 = -r27378;
        float r27400 = r27398 + r27399;
        float r27401 = r27400 / r27381;
        float r27402 = exp(r27401);
        float r27403 = r27372 + r27402;
        float r27404 = sqrt(r27403);
        float r27405 = r27396 / r27404;
        float r27406 = r27385 + r27405;
        return r27406;
}

double f_od(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r27407 = NdChar;
        double r27408 = 1;
        double r27409 = Ec;
        double r27410 = Vef;
        double r27411 = r27409 - r27410;
        double r27412 = EDonor;
        double r27413 = r27411 - r27412;
        double r27414 = mu;
        double r27415 = r27413 - r27414;
        double r27416 = -r27415;
        double r27417 = KbT;
        double r27418 = r27416 / r27417;
        double r27419 = exp(r27418);
        double r27420 = r27408 + r27419;
        double r27421 = r27407 / r27420;
        double r27422 = NaChar;
        double r27423 = Ev;
        double r27424 = r27423 - r27414;
        double r27425 = EAccept;
        double r27426 = r27425 + r27410;
        double r27427 = r27424 + r27426;
        double r27428 = r27427 / r27417;
        double r27429 = exp(r27428);
        double r27430 = r27429 + r27408;
        double r27431 = sqrt(r27430);
        double r27432 = r27422 / r27431;
        double r27433 = r27423 + r27410;
        double r27434 = r27433 + r27425;
        double r27435 = -r27414;
        double r27436 = r27434 + r27435;
        double r27437 = r27436 / r27417;
        double r27438 = exp(r27437);
        double r27439 = r27408 + r27438;
        double r27440 = sqrt(r27439);
        double r27441 = r27432 / r27440;
        double r27442 = r27421 + r27441;
        return r27442;
}

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 r27443, r27444, r27445, r27446, r27447, r27448, r27449, r27450, r27451, r27452, r27453, r27454, r27455, r27456, r27457, r27458, r27459, r27460, r27461, r27462, r27463, r27464, r27465, r27466, r27467, r27468, r27469;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27443);
        mpfr_init_set_str(r27444, "1", 10, MPFR_RNDN);
        mpfr_init(r27445);
        mpfr_init(r27446);
        mpfr_init(r27447);
        mpfr_init(r27448);
        mpfr_init(r27449);
        mpfr_init(r27450);
        mpfr_init(r27451);
        mpfr_init(r27452);
        mpfr_init(r27453);
        mpfr_init(r27454);
        mpfr_init(r27455);
        mpfr_init(r27456);
        mpfr_init(r27457);
        mpfr_init(r27458);
        mpfr_init(r27459);
        mpfr_init(r27460);
        mpfr_init(r27461);
        mpfr_init(r27462);
        mpfr_init(r27463);
        mpfr_init(r27464);
        mpfr_init(r27465);
        mpfr_init(r27466);
        mpfr_init(r27467);
        mpfr_init(r27468);
        mpfr_init(r27469);
}

double f_im(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r27443, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r27445, Ec, MPFR_RNDN);
        mpfr_set_d(r27446, Vef, MPFR_RNDN);
        mpfr_sub(r27447, r27445, r27446, MPFR_RNDN);
        mpfr_set_d(r27448, EDonor, MPFR_RNDN);
        mpfr_sub(r27449, r27447, r27448, MPFR_RNDN);
        mpfr_set_d(r27450, mu, MPFR_RNDN);
        mpfr_sub(r27451, r27449, r27450, MPFR_RNDN);
        mpfr_neg(r27452, r27451, MPFR_RNDN);
        mpfr_set_d(r27453, KbT, MPFR_RNDN);
        mpfr_div(r27454, r27452, r27453, MPFR_RNDN);
        mpfr_exp(r27455, r27454, MPFR_RNDN);
        mpfr_add(r27456, r27444, r27455, MPFR_RNDN);
        mpfr_div(r27457, r27443, r27456, MPFR_RNDN);
        mpfr_set_d(r27458, NaChar, MPFR_RNDN);
        mpfr_set_d(r27459, Ev, MPFR_RNDN);
        mpfr_add(r27460, r27459, r27446, MPFR_RNDN);
        mpfr_set_d(r27461, EAccept, MPFR_RNDN);
        mpfr_add(r27462, r27460, r27461, MPFR_RNDN);
        mpfr_neg(r27463, r27450, MPFR_RNDN);
        mpfr_add(r27464, r27462, r27463, MPFR_RNDN);
        mpfr_div(r27465, r27464, r27453, MPFR_RNDN);
        mpfr_exp(r27466, r27465, MPFR_RNDN);
        mpfr_add(r27467, r27444, r27466, MPFR_RNDN);
        mpfr_div(r27468, r27458, r27467, MPFR_RNDN);
        mpfr_add(r27469, r27457, r27468, MPFR_RNDN);
        return mpfr_get_d(r27469, MPFR_RNDN);
}

static mpfr_t r27470, r27471, r27472, r27473, r27474, r27475, r27476, r27477, r27478, r27479, r27480, r27481, r27482, r27483, r27484, r27485, r27486, r27487, r27488, r27489, r27490, r27491, r27492, r27493, r27494, r27495, r27496, r27497, r27498, r27499, r27500, r27501, r27502, r27503, r27504, r27505;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27470);
        mpfr_init_set_str(r27471, "1", 10, MPFR_RNDN);
        mpfr_init(r27472);
        mpfr_init(r27473);
        mpfr_init(r27474);
        mpfr_init(r27475);
        mpfr_init(r27476);
        mpfr_init(r27477);
        mpfr_init(r27478);
        mpfr_init(r27479);
        mpfr_init(r27480);
        mpfr_init(r27481);
        mpfr_init(r27482);
        mpfr_init(r27483);
        mpfr_init(r27484);
        mpfr_init(r27485);
        mpfr_init(r27486);
        mpfr_init(r27487);
        mpfr_init(r27488);
        mpfr_init(r27489);
        mpfr_init(r27490);
        mpfr_init(r27491);
        mpfr_init(r27492);
        mpfr_init(r27493);
        mpfr_init(r27494);
        mpfr_init(r27495);
        mpfr_init(r27496);
        mpfr_init(r27497);
        mpfr_init(r27498);
        mpfr_init(r27499);
        mpfr_init(r27500);
        mpfr_init(r27501);
        mpfr_init(r27502);
        mpfr_init(r27503);
        mpfr_init(r27504);
        mpfr_init(r27505);
}

double f_fm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r27470, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r27472, Ec, MPFR_RNDN);
        mpfr_set_d(r27473, Vef, MPFR_RNDN);
        mpfr_sub(r27474, r27472, r27473, MPFR_RNDN);
        mpfr_set_d(r27475, EDonor, MPFR_RNDN);
        mpfr_sub(r27476, r27474, r27475, MPFR_RNDN);
        mpfr_set_d(r27477, mu, MPFR_RNDN);
        mpfr_sub(r27478, r27476, r27477, MPFR_RNDN);
        mpfr_neg(r27479, r27478, MPFR_RNDN);
        mpfr_set_d(r27480, KbT, MPFR_RNDN);
        mpfr_div(r27481, r27479, r27480, MPFR_RNDN);
        mpfr_exp(r27482, r27481, MPFR_RNDN);
        mpfr_add(r27483, r27471, r27482, MPFR_RNDN);
        mpfr_div(r27484, r27470, r27483, MPFR_RNDN);
        mpfr_set_d(r27485, NaChar, MPFR_RNDN);
        mpfr_set_d(r27486, Ev, MPFR_RNDN);
        mpfr_sub(r27487, r27486, r27477, MPFR_RNDN);
        mpfr_set_d(r27488, EAccept, MPFR_RNDN);
        mpfr_add(r27489, r27488, r27473, MPFR_RNDN);
        mpfr_add(r27490, r27487, r27489, MPFR_RNDN);
        mpfr_div(r27491, r27490, r27480, MPFR_RNDN);
        mpfr_exp(r27492, r27491, MPFR_RNDN);
        mpfr_add(r27493, r27492, r27471, MPFR_RNDN);
        mpfr_sqrt(r27494, r27493, MPFR_RNDN);
        mpfr_div(r27495, r27485, r27494, MPFR_RNDN);
        mpfr_add(r27496, r27486, r27473, MPFR_RNDN);
        mpfr_add(r27497, r27496, r27488, MPFR_RNDN);
        mpfr_neg(r27498, r27477, MPFR_RNDN);
        mpfr_add(r27499, r27497, r27498, MPFR_RNDN);
        mpfr_div(r27500, r27499, r27480, MPFR_RNDN);
        mpfr_exp(r27501, r27500, MPFR_RNDN);
        mpfr_add(r27502, r27471, r27501, MPFR_RNDN);
        mpfr_sqrt(r27503, r27502, MPFR_RNDN);
        mpfr_div(r27504, r27495, r27503, MPFR_RNDN);
        mpfr_add(r27505, r27484, r27504, MPFR_RNDN);
        return mpfr_get_d(r27505, MPFR_RNDN);
}

static mpfr_t r27506, r27507, r27508, r27509, r27510, r27511, r27512, r27513, r27514, r27515, r27516, r27517, r27518, r27519, r27520, r27521, r27522, r27523, r27524, r27525, r27526, r27527, r27528, r27529, r27530, r27531, r27532, r27533, r27534, r27535, r27536, r27537, r27538, r27539, r27540, r27541;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27506);
        mpfr_init_set_str(r27507, "1", 10, MPFR_RNDN);
        mpfr_init(r27508);
        mpfr_init(r27509);
        mpfr_init(r27510);
        mpfr_init(r27511);
        mpfr_init(r27512);
        mpfr_init(r27513);
        mpfr_init(r27514);
        mpfr_init(r27515);
        mpfr_init(r27516);
        mpfr_init(r27517);
        mpfr_init(r27518);
        mpfr_init(r27519);
        mpfr_init(r27520);
        mpfr_init(r27521);
        mpfr_init(r27522);
        mpfr_init(r27523);
        mpfr_init(r27524);
        mpfr_init(r27525);
        mpfr_init(r27526);
        mpfr_init(r27527);
        mpfr_init(r27528);
        mpfr_init(r27529);
        mpfr_init(r27530);
        mpfr_init(r27531);
        mpfr_init(r27532);
        mpfr_init(r27533);
        mpfr_init(r27534);
        mpfr_init(r27535);
        mpfr_init(r27536);
        mpfr_init(r27537);
        mpfr_init(r27538);
        mpfr_init(r27539);
        mpfr_init(r27540);
        mpfr_init(r27541);
}

double f_dm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r27506, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r27508, Ec, MPFR_RNDN);
        mpfr_set_d(r27509, Vef, MPFR_RNDN);
        mpfr_sub(r27510, r27508, r27509, MPFR_RNDN);
        mpfr_set_d(r27511, EDonor, MPFR_RNDN);
        mpfr_sub(r27512, r27510, r27511, MPFR_RNDN);
        mpfr_set_d(r27513, mu, MPFR_RNDN);
        mpfr_sub(r27514, r27512, r27513, MPFR_RNDN);
        mpfr_neg(r27515, r27514, MPFR_RNDN);
        mpfr_set_d(r27516, KbT, MPFR_RNDN);
        mpfr_div(r27517, r27515, r27516, MPFR_RNDN);
        mpfr_exp(r27518, r27517, MPFR_RNDN);
        mpfr_add(r27519, r27507, r27518, MPFR_RNDN);
        mpfr_div(r27520, r27506, r27519, MPFR_RNDN);
        mpfr_set_d(r27521, NaChar, MPFR_RNDN);
        mpfr_set_d(r27522, Ev, MPFR_RNDN);
        mpfr_sub(r27523, r27522, r27513, MPFR_RNDN);
        mpfr_set_d(r27524, EAccept, MPFR_RNDN);
        mpfr_add(r27525, r27524, r27509, MPFR_RNDN);
        mpfr_add(r27526, r27523, r27525, MPFR_RNDN);
        mpfr_div(r27527, r27526, r27516, MPFR_RNDN);
        mpfr_exp(r27528, r27527, MPFR_RNDN);
        mpfr_add(r27529, r27528, r27507, MPFR_RNDN);
        mpfr_sqrt(r27530, r27529, MPFR_RNDN);
        mpfr_div(r27531, r27521, r27530, MPFR_RNDN);
        mpfr_add(r27532, r27522, r27509, MPFR_RNDN);
        mpfr_add(r27533, r27532, r27524, MPFR_RNDN);
        mpfr_neg(r27534, r27513, MPFR_RNDN);
        mpfr_add(r27535, r27533, r27534, MPFR_RNDN);
        mpfr_div(r27536, r27535, r27516, MPFR_RNDN);
        mpfr_exp(r27537, r27536, MPFR_RNDN);
        mpfr_add(r27538, r27507, r27537, MPFR_RNDN);
        mpfr_sqrt(r27539, r27538, MPFR_RNDN);
        mpfr_div(r27540, r27531, r27539, MPFR_RNDN);
        mpfr_add(r27541, r27520, r27540, MPFR_RNDN);
        return mpfr_get_d(r27541, MPFR_RNDN);
}

