#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 r27479 = NdChar;
        float r27480 = 1;
        float r27481 = Ec;
        float r27482 = Vef;
        float r27483 = r27481 - r27482;
        float r27484 = EDonor;
        float r27485 = r27483 - r27484;
        float r27486 = mu;
        float r27487 = r27485 - r27486;
        float r27488 = -r27487;
        float r27489 = KbT;
        float r27490 = r27488 / r27489;
        float r27491 = exp(r27490);
        float r27492 = r27480 + r27491;
        float r27493 = r27479 / r27492;
        float r27494 = NaChar;
        float r27495 = Ev;
        float r27496 = r27495 + r27482;
        float r27497 = EAccept;
        float r27498 = r27496 + r27497;
        float r27499 = -r27486;
        float r27500 = r27498 + r27499;
        float r27501 = r27500 / r27489;
        float r27502 = exp(r27501);
        float r27503 = r27480 + r27502;
        float r27504 = r27494 / r27503;
        float r27505 = r27493 + r27504;
        return r27505;
}

double f_id(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r27506 = NdChar;
        double r27507 = 1;
        double r27508 = Ec;
        double r27509 = Vef;
        double r27510 = r27508 - r27509;
        double r27511 = EDonor;
        double r27512 = r27510 - r27511;
        double r27513 = mu;
        double r27514 = r27512 - r27513;
        double r27515 = -r27514;
        double r27516 = KbT;
        double r27517 = r27515 / r27516;
        double r27518 = exp(r27517);
        double r27519 = r27507 + r27518;
        double r27520 = r27506 / r27519;
        double r27521 = NaChar;
        double r27522 = Ev;
        double r27523 = r27522 + r27509;
        double r27524 = EAccept;
        double r27525 = r27523 + r27524;
        double r27526 = -r27513;
        double r27527 = r27525 + r27526;
        double r27528 = r27527 / r27516;
        double r27529 = exp(r27528);
        double r27530 = r27507 + r27529;
        double r27531 = r27521 / r27530;
        double r27532 = r27520 + r27531;
        return r27532;
}


double f_of(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r27533 = NdChar;
        float r27534 = Vef;
        float r27535 = EDonor;
        float r27536 = r27534 + r27535;
        float r27537 = mu;
        float r27538 = Ec;
        float r27539 = r27537 - r27538;
        float r27540 = r27536 + r27539;
        float r27541 = KbT;
        float r27542 = r27540 / r27541;
        float r27543 = exp(r27542);
        float r27544 = exp(r27543);
        float r27545 = exp(1.0);
        float r27546 = r27544 * r27545;
        float r27547 = log(r27546);
        float r27548 = r27533 / r27547;
        float r27549 = NaChar;
        float r27550 = 1;
        float r27551 = Ev;
        float r27552 = r27551 + r27534;
        float r27553 = EAccept;
        float r27554 = r27552 + r27553;
        float r27555 = -r27537;
        float r27556 = r27554 + r27555;
        float r27557 = r27556 / r27541;
        float r27558 = exp(r27557);
        float r27559 = r27550 + r27558;
        float r27560 = r27549 / r27559;
        float r27561 = r27548 + r27560;
        return r27561;
}

double f_od(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r27562 = NdChar;
        double r27563 = Vef;
        double r27564 = EDonor;
        double r27565 = r27563 + r27564;
        double r27566 = mu;
        double r27567 = Ec;
        double r27568 = r27566 - r27567;
        double r27569 = r27565 + r27568;
        double r27570 = KbT;
        double r27571 = r27569 / r27570;
        double r27572 = exp(r27571);
        double r27573 = exp(r27572);
        double r27574 = exp(1.0);
        double r27575 = r27573 * r27574;
        double r27576 = log(r27575);
        double r27577 = r27562 / r27576;
        double r27578 = NaChar;
        double r27579 = 1;
        double r27580 = Ev;
        double r27581 = r27580 + r27563;
        double r27582 = EAccept;
        double r27583 = r27581 + r27582;
        double r27584 = -r27566;
        double r27585 = r27583 + r27584;
        double r27586 = r27585 / r27570;
        double r27587 = exp(r27586);
        double r27588 = r27579 + r27587;
        double r27589 = r27578 / r27588;
        double r27590 = r27577 + r27589;
        return r27590;
}

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 r27591, r27592, r27593, r27594, r27595, r27596, r27597, r27598, r27599, r27600, r27601, r27602, r27603, r27604, r27605, r27606, r27607, r27608, r27609, r27610, r27611, r27612, r27613, r27614, r27615, r27616, r27617;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r27591);
        mpfr_init_set_str(r27592, "1", 10, MPFR_RNDN);
        mpfr_init(r27593);
        mpfr_init(r27594);
        mpfr_init(r27595);
        mpfr_init(r27596);
        mpfr_init(r27597);
        mpfr_init(r27598);
        mpfr_init(r27599);
        mpfr_init(r27600);
        mpfr_init(r27601);
        mpfr_init(r27602);
        mpfr_init(r27603);
        mpfr_init(r27604);
        mpfr_init(r27605);
        mpfr_init(r27606);
        mpfr_init(r27607);
        mpfr_init(r27608);
        mpfr_init(r27609);
        mpfr_init(r27610);
        mpfr_init(r27611);
        mpfr_init(r27612);
        mpfr_init(r27613);
        mpfr_init(r27614);
        mpfr_init(r27615);
        mpfr_init(r27616);
        mpfr_init(r27617);
}

double f_im(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r27591, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r27593, Ec, MPFR_RNDN);
        mpfr_set_d(r27594, Vef, MPFR_RNDN);
        mpfr_sub(r27595, r27593, r27594, MPFR_RNDN);
        mpfr_set_d(r27596, EDonor, MPFR_RNDN);
        mpfr_sub(r27597, r27595, r27596, MPFR_RNDN);
        mpfr_set_d(r27598, mu, MPFR_RNDN);
        mpfr_sub(r27599, r27597, r27598, MPFR_RNDN);
        mpfr_neg(r27600, r27599, MPFR_RNDN);
        mpfr_set_d(r27601, KbT, MPFR_RNDN);
        mpfr_div(r27602, r27600, r27601, MPFR_RNDN);
        mpfr_exp(r27603, r27602, MPFR_RNDN);
        mpfr_add(r27604, r27592, r27603, MPFR_RNDN);
        mpfr_div(r27605, r27591, r27604, MPFR_RNDN);
        mpfr_set_d(r27606, NaChar, MPFR_RNDN);
        mpfr_set_d(r27607, Ev, MPFR_RNDN);
        mpfr_add(r27608, r27607, r27594, MPFR_RNDN);
        mpfr_set_d(r27609, EAccept, MPFR_RNDN);
        mpfr_add(r27610, r27608, r27609, MPFR_RNDN);
        mpfr_neg(r27611, r27598, MPFR_RNDN);
        mpfr_add(r27612, r27610, r27611, MPFR_RNDN);
        mpfr_div(r27613, r27612, r27601, MPFR_RNDN);
        mpfr_exp(r27614, r27613, MPFR_RNDN);
        mpfr_add(r27615, r27592, r27614, MPFR_RNDN);
        mpfr_div(r27616, r27606, r27615, MPFR_RNDN);
        mpfr_add(r27617, r27605, r27616, MPFR_RNDN);
        return mpfr_get_d(r27617, MPFR_RNDN);
}

static mpfr_t r27618, r27619, r27620, r27621, r27622, r27623, r27624, r27625, r27626, r27627, r27628, r27629, r27630, r27631, r27632, r27633, r27634, r27635, r27636, r27637, r27638, r27639, r27640, r27641, r27642, r27643, r27644, r27645, r27646;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27618);
        mpfr_init(r27619);
        mpfr_init(r27620);
        mpfr_init(r27621);
        mpfr_init(r27622);
        mpfr_init(r27623);
        mpfr_init(r27624);
        mpfr_init(r27625);
        mpfr_init(r27626);
        mpfr_init(r27627);
        mpfr_init(r27628);
        mpfr_init(r27629);
        mpfr_init(r27630);
        mpfr_init(r27631);
        mpfr_init(r27632);
        mpfr_init(r27633);
        mpfr_init(r27634);
        mpfr_init_set_str(r27635, "1", 10, MPFR_RNDN);
        mpfr_init(r27636);
        mpfr_init(r27637);
        mpfr_init(r27638);
        mpfr_init(r27639);
        mpfr_init(r27640);
        mpfr_init(r27641);
        mpfr_init(r27642);
        mpfr_init(r27643);
        mpfr_init(r27644);
        mpfr_init(r27645);
        mpfr_init(r27646);
}

double f_fm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r27618, NdChar, MPFR_RNDN);
        mpfr_set_d(r27619, Vef, MPFR_RNDN);
        mpfr_set_d(r27620, EDonor, MPFR_RNDN);
        mpfr_add(r27621, r27619, r27620, MPFR_RNDN);
        mpfr_set_d(r27622, mu, MPFR_RNDN);
        mpfr_set_d(r27623, Ec, MPFR_RNDN);
        mpfr_sub(r27624, r27622, r27623, MPFR_RNDN);
        mpfr_add(r27625, r27621, r27624, MPFR_RNDN);
        mpfr_set_d(r27626, KbT, MPFR_RNDN);
        mpfr_div(r27627, r27625, r27626, MPFR_RNDN);
        mpfr_exp(r27628, r27627, MPFR_RNDN);
        mpfr_exp(r27629, r27628, MPFR_RNDN);
        mpfr_set_si(r27630, 1, MPFR_RNDN), mpfr_const_exp(r27630, r27630, MPFR_RNDN);
        mpfr_mul(r27631, r27629, r27630, MPFR_RNDN);
        mpfr_log(r27632, r27631, MPFR_RNDN);
        mpfr_div(r27633, r27618, r27632, MPFR_RNDN);
        mpfr_set_d(r27634, NaChar, MPFR_RNDN);
        ;
        mpfr_set_d(r27636, Ev, MPFR_RNDN);
        mpfr_add(r27637, r27636, r27619, MPFR_RNDN);
        mpfr_set_d(r27638, EAccept, MPFR_RNDN);
        mpfr_add(r27639, r27637, r27638, MPFR_RNDN);
        mpfr_neg(r27640, r27622, MPFR_RNDN);
        mpfr_add(r27641, r27639, r27640, MPFR_RNDN);
        mpfr_div(r27642, r27641, r27626, MPFR_RNDN);
        mpfr_exp(r27643, r27642, MPFR_RNDN);
        mpfr_add(r27644, r27635, r27643, MPFR_RNDN);
        mpfr_div(r27645, r27634, r27644, MPFR_RNDN);
        mpfr_add(r27646, r27633, r27645, MPFR_RNDN);
        return mpfr_get_d(r27646, MPFR_RNDN);
}

static mpfr_t r27647, r27648, r27649, r27650, r27651, r27652, r27653, r27654, r27655, r27656, r27657, r27658, r27659, r27660, r27661, r27662, r27663, r27664, r27665, r27666, r27667, r27668, r27669, r27670, r27671, r27672, r27673, r27674, r27675;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27647);
        mpfr_init(r27648);
        mpfr_init(r27649);
        mpfr_init(r27650);
        mpfr_init(r27651);
        mpfr_init(r27652);
        mpfr_init(r27653);
        mpfr_init(r27654);
        mpfr_init(r27655);
        mpfr_init(r27656);
        mpfr_init(r27657);
        mpfr_init(r27658);
        mpfr_init(r27659);
        mpfr_init(r27660);
        mpfr_init(r27661);
        mpfr_init(r27662);
        mpfr_init(r27663);
        mpfr_init_set_str(r27664, "1", 10, MPFR_RNDN);
        mpfr_init(r27665);
        mpfr_init(r27666);
        mpfr_init(r27667);
        mpfr_init(r27668);
        mpfr_init(r27669);
        mpfr_init(r27670);
        mpfr_init(r27671);
        mpfr_init(r27672);
        mpfr_init(r27673);
        mpfr_init(r27674);
        mpfr_init(r27675);
}

double f_dm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r27647, NdChar, MPFR_RNDN);
        mpfr_set_d(r27648, Vef, MPFR_RNDN);
        mpfr_set_d(r27649, EDonor, MPFR_RNDN);
        mpfr_add(r27650, r27648, r27649, MPFR_RNDN);
        mpfr_set_d(r27651, mu, MPFR_RNDN);
        mpfr_set_d(r27652, Ec, MPFR_RNDN);
        mpfr_sub(r27653, r27651, r27652, MPFR_RNDN);
        mpfr_add(r27654, r27650, r27653, MPFR_RNDN);
        mpfr_set_d(r27655, KbT, MPFR_RNDN);
        mpfr_div(r27656, r27654, r27655, MPFR_RNDN);
        mpfr_exp(r27657, r27656, MPFR_RNDN);
        mpfr_exp(r27658, r27657, MPFR_RNDN);
        mpfr_set_si(r27659, 1, MPFR_RNDN), mpfr_const_exp(r27659, r27659, MPFR_RNDN);
        mpfr_mul(r27660, r27658, r27659, MPFR_RNDN);
        mpfr_log(r27661, r27660, MPFR_RNDN);
        mpfr_div(r27662, r27647, r27661, MPFR_RNDN);
        mpfr_set_d(r27663, NaChar, MPFR_RNDN);
        ;
        mpfr_set_d(r27665, Ev, MPFR_RNDN);
        mpfr_add(r27666, r27665, r27648, MPFR_RNDN);
        mpfr_set_d(r27667, EAccept, MPFR_RNDN);
        mpfr_add(r27668, r27666, r27667, MPFR_RNDN);
        mpfr_neg(r27669, r27651, MPFR_RNDN);
        mpfr_add(r27670, r27668, r27669, MPFR_RNDN);
        mpfr_div(r27671, r27670, r27655, MPFR_RNDN);
        mpfr_exp(r27672, r27671, MPFR_RNDN);
        mpfr_add(r27673, r27664, r27672, MPFR_RNDN);
        mpfr_div(r27674, r27663, r27673, MPFR_RNDN);
        mpfr_add(r27675, r27662, r27674, MPFR_RNDN);
        return mpfr_get_d(r27675, MPFR_RNDN);
}

