#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 r35613 = NdChar;
        float r35614 = 1;
        float r35615 = Ec;
        float r35616 = Vef;
        float r35617 = r35615 - r35616;
        float r35618 = EDonor;
        float r35619 = r35617 - r35618;
        float r35620 = mu;
        float r35621 = r35619 - r35620;
        float r35622 = -r35621;
        float r35623 = KbT;
        float r35624 = r35622 / r35623;
        float r35625 = exp(r35624);
        float r35626 = r35614 + r35625;
        float r35627 = r35613 / r35626;
        float r35628 = NaChar;
        float r35629 = Ev;
        float r35630 = r35629 + r35616;
        float r35631 = EAccept;
        float r35632 = r35630 + r35631;
        float r35633 = -r35620;
        float r35634 = r35632 + r35633;
        float r35635 = r35634 / r35623;
        float r35636 = exp(r35635);
        float r35637 = r35614 + r35636;
        float r35638 = r35628 / r35637;
        float r35639 = r35627 + r35638;
        return r35639;
}

double f_id(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r35640 = NdChar;
        double r35641 = 1;
        double r35642 = Ec;
        double r35643 = Vef;
        double r35644 = r35642 - r35643;
        double r35645 = EDonor;
        double r35646 = r35644 - r35645;
        double r35647 = mu;
        double r35648 = r35646 - r35647;
        double r35649 = -r35648;
        double r35650 = KbT;
        double r35651 = r35649 / r35650;
        double r35652 = exp(r35651);
        double r35653 = r35641 + r35652;
        double r35654 = r35640 / r35653;
        double r35655 = NaChar;
        double r35656 = Ev;
        double r35657 = r35656 + r35643;
        double r35658 = EAccept;
        double r35659 = r35657 + r35658;
        double r35660 = -r35647;
        double r35661 = r35659 + r35660;
        double r35662 = r35661 / r35650;
        double r35663 = exp(r35662);
        double r35664 = r35641 + r35663;
        double r35665 = r35655 / r35664;
        double r35666 = r35654 + r35665;
        return r35666;
}


double f_of(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r35667 = NdChar;
        float r35668 = 1;
        float r35669 = Ec;
        float r35670 = Vef;
        float r35671 = r35669 - r35670;
        float r35672 = EDonor;
        float r35673 = r35671 - r35672;
        float r35674 = mu;
        float r35675 = r35673 - r35674;
        float r35676 = -r35675;
        float r35677 = KbT;
        float r35678 = r35676 / r35677;
        float r35679 = exp(r35678);
        float r35680 = r35668 + r35679;
        float r35681 = r35667 / r35680;
        float r35682 = NaChar;
        float r35683 = Ev;
        float r35684 = r35683 + r35670;
        float r35685 = EAccept;
        float r35686 = r35684 + r35685;
        float r35687 = -r35674;
        float r35688 = r35686 + r35687;
        float r35689 = r35688 / r35677;
        float r35690 = exp(r35689);
        float r35691 = r35668 + r35690;
        float r35692 = r35682 / r35691;
        float r35693 = r35681 + r35692;
        return r35693;
}

double f_od(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r35694 = NdChar;
        double r35695 = 1;
        double r35696 = Ec;
        double r35697 = Vef;
        double r35698 = r35696 - r35697;
        double r35699 = EDonor;
        double r35700 = r35698 - r35699;
        double r35701 = mu;
        double r35702 = r35700 - r35701;
        double r35703 = -r35702;
        double r35704 = KbT;
        double r35705 = r35703 / r35704;
        double r35706 = exp(r35705);
        double r35707 = r35695 + r35706;
        double r35708 = r35694 / r35707;
        double r35709 = NaChar;
        double r35710 = Ev;
        double r35711 = r35710 + r35697;
        double r35712 = EAccept;
        double r35713 = r35711 + r35712;
        double r35714 = -r35701;
        double r35715 = r35713 + r35714;
        double r35716 = r35715 / r35704;
        double r35717 = exp(r35716);
        double r35718 = r35695 + r35717;
        double r35719 = r35709 / r35718;
        double r35720 = r35708 + r35719;
        return r35720;
}

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 r35721, r35722, r35723, r35724, r35725, r35726, r35727, r35728, r35729, r35730, r35731, r35732, r35733, r35734, r35735, r35736, r35737, r35738, r35739, r35740, r35741, r35742, r35743, r35744, r35745, r35746, r35747;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r35721);
        mpfr_init_set_str(r35722, "1", 10, MPFR_RNDN);
        mpfr_init(r35723);
        mpfr_init(r35724);
        mpfr_init(r35725);
        mpfr_init(r35726);
        mpfr_init(r35727);
        mpfr_init(r35728);
        mpfr_init(r35729);
        mpfr_init(r35730);
        mpfr_init(r35731);
        mpfr_init(r35732);
        mpfr_init(r35733);
        mpfr_init(r35734);
        mpfr_init(r35735);
        mpfr_init(r35736);
        mpfr_init(r35737);
        mpfr_init(r35738);
        mpfr_init(r35739);
        mpfr_init(r35740);
        mpfr_init(r35741);
        mpfr_init(r35742);
        mpfr_init(r35743);
        mpfr_init(r35744);
        mpfr_init(r35745);
        mpfr_init(r35746);
        mpfr_init(r35747);
}

double f_im(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r35721, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r35723, Ec, MPFR_RNDN);
        mpfr_set_d(r35724, Vef, MPFR_RNDN);
        mpfr_sub(r35725, r35723, r35724, MPFR_RNDN);
        mpfr_set_d(r35726, EDonor, MPFR_RNDN);
        mpfr_sub(r35727, r35725, r35726, MPFR_RNDN);
        mpfr_set_d(r35728, mu, MPFR_RNDN);
        mpfr_sub(r35729, r35727, r35728, MPFR_RNDN);
        mpfr_neg(r35730, r35729, MPFR_RNDN);
        mpfr_set_d(r35731, KbT, MPFR_RNDN);
        mpfr_div(r35732, r35730, r35731, MPFR_RNDN);
        mpfr_exp(r35733, r35732, MPFR_RNDN);
        mpfr_add(r35734, r35722, r35733, MPFR_RNDN);
        mpfr_div(r35735, r35721, r35734, MPFR_RNDN);
        mpfr_set_d(r35736, NaChar, MPFR_RNDN);
        mpfr_set_d(r35737, Ev, MPFR_RNDN);
        mpfr_add(r35738, r35737, r35724, MPFR_RNDN);
        mpfr_set_d(r35739, EAccept, MPFR_RNDN);
        mpfr_add(r35740, r35738, r35739, MPFR_RNDN);
        mpfr_neg(r35741, r35728, MPFR_RNDN);
        mpfr_add(r35742, r35740, r35741, MPFR_RNDN);
        mpfr_div(r35743, r35742, r35731, MPFR_RNDN);
        mpfr_exp(r35744, r35743, MPFR_RNDN);
        mpfr_add(r35745, r35722, r35744, MPFR_RNDN);
        mpfr_div(r35746, r35736, r35745, MPFR_RNDN);
        mpfr_add(r35747, r35735, r35746, MPFR_RNDN);
        return mpfr_get_d(r35747, MPFR_RNDN);
}

static mpfr_t r35748, r35749, r35750, r35751, r35752, r35753, r35754, r35755, r35756, r35757, r35758, r35759, r35760, r35761, r35762, r35763, r35764, r35765, r35766, r35767, r35768, r35769, r35770, r35771, r35772, r35773, r35774;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r35748);
        mpfr_init_set_str(r35749, "1", 10, MPFR_RNDN);
        mpfr_init(r35750);
        mpfr_init(r35751);
        mpfr_init(r35752);
        mpfr_init(r35753);
        mpfr_init(r35754);
        mpfr_init(r35755);
        mpfr_init(r35756);
        mpfr_init(r35757);
        mpfr_init(r35758);
        mpfr_init(r35759);
        mpfr_init(r35760);
        mpfr_init(r35761);
        mpfr_init(r35762);
        mpfr_init(r35763);
        mpfr_init(r35764);
        mpfr_init(r35765);
        mpfr_init(r35766);
        mpfr_init(r35767);
        mpfr_init(r35768);
        mpfr_init(r35769);
        mpfr_init(r35770);
        mpfr_init(r35771);
        mpfr_init(r35772);
        mpfr_init(r35773);
        mpfr_init(r35774);
}

double f_fm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r35748, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r35750, Ec, MPFR_RNDN);
        mpfr_set_d(r35751, Vef, MPFR_RNDN);
        mpfr_sub(r35752, r35750, r35751, MPFR_RNDN);
        mpfr_set_d(r35753, EDonor, MPFR_RNDN);
        mpfr_sub(r35754, r35752, r35753, MPFR_RNDN);
        mpfr_set_d(r35755, mu, MPFR_RNDN);
        mpfr_sub(r35756, r35754, r35755, MPFR_RNDN);
        mpfr_neg(r35757, r35756, MPFR_RNDN);
        mpfr_set_d(r35758, KbT, MPFR_RNDN);
        mpfr_div(r35759, r35757, r35758, MPFR_RNDN);
        mpfr_exp(r35760, r35759, MPFR_RNDN);
        mpfr_add(r35761, r35749, r35760, MPFR_RNDN);
        mpfr_div(r35762, r35748, r35761, MPFR_RNDN);
        mpfr_set_d(r35763, NaChar, MPFR_RNDN);
        mpfr_set_d(r35764, Ev, MPFR_RNDN);
        mpfr_add(r35765, r35764, r35751, MPFR_RNDN);
        mpfr_set_d(r35766, EAccept, MPFR_RNDN);
        mpfr_add(r35767, r35765, r35766, MPFR_RNDN);
        mpfr_neg(r35768, r35755, MPFR_RNDN);
        mpfr_add(r35769, r35767, r35768, MPFR_RNDN);
        mpfr_div(r35770, r35769, r35758, MPFR_RNDN);
        mpfr_exp(r35771, r35770, MPFR_RNDN);
        mpfr_add(r35772, r35749, r35771, MPFR_RNDN);
        mpfr_div(r35773, r35763, r35772, MPFR_RNDN);
        mpfr_add(r35774, r35762, r35773, MPFR_RNDN);
        return mpfr_get_d(r35774, MPFR_RNDN);
}

static mpfr_t r35775, r35776, r35777, r35778, r35779, r35780, r35781, r35782, r35783, r35784, r35785, r35786, r35787, r35788, r35789, r35790, r35791, r35792, r35793, r35794, r35795, r35796, r35797, r35798, r35799, r35800, r35801;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r35775);
        mpfr_init_set_str(r35776, "1", 10, MPFR_RNDN);
        mpfr_init(r35777);
        mpfr_init(r35778);
        mpfr_init(r35779);
        mpfr_init(r35780);
        mpfr_init(r35781);
        mpfr_init(r35782);
        mpfr_init(r35783);
        mpfr_init(r35784);
        mpfr_init(r35785);
        mpfr_init(r35786);
        mpfr_init(r35787);
        mpfr_init(r35788);
        mpfr_init(r35789);
        mpfr_init(r35790);
        mpfr_init(r35791);
        mpfr_init(r35792);
        mpfr_init(r35793);
        mpfr_init(r35794);
        mpfr_init(r35795);
        mpfr_init(r35796);
        mpfr_init(r35797);
        mpfr_init(r35798);
        mpfr_init(r35799);
        mpfr_init(r35800);
        mpfr_init(r35801);
}

double f_dm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r35775, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r35777, Ec, MPFR_RNDN);
        mpfr_set_d(r35778, Vef, MPFR_RNDN);
        mpfr_sub(r35779, r35777, r35778, MPFR_RNDN);
        mpfr_set_d(r35780, EDonor, MPFR_RNDN);
        mpfr_sub(r35781, r35779, r35780, MPFR_RNDN);
        mpfr_set_d(r35782, mu, MPFR_RNDN);
        mpfr_sub(r35783, r35781, r35782, MPFR_RNDN);
        mpfr_neg(r35784, r35783, MPFR_RNDN);
        mpfr_set_d(r35785, KbT, MPFR_RNDN);
        mpfr_div(r35786, r35784, r35785, MPFR_RNDN);
        mpfr_exp(r35787, r35786, MPFR_RNDN);
        mpfr_add(r35788, r35776, r35787, MPFR_RNDN);
        mpfr_div(r35789, r35775, r35788, MPFR_RNDN);
        mpfr_set_d(r35790, NaChar, MPFR_RNDN);
        mpfr_set_d(r35791, Ev, MPFR_RNDN);
        mpfr_add(r35792, r35791, r35778, MPFR_RNDN);
        mpfr_set_d(r35793, EAccept, MPFR_RNDN);
        mpfr_add(r35794, r35792, r35793, MPFR_RNDN);
        mpfr_neg(r35795, r35782, MPFR_RNDN);
        mpfr_add(r35796, r35794, r35795, MPFR_RNDN);
        mpfr_div(r35797, r35796, r35785, MPFR_RNDN);
        mpfr_exp(r35798, r35797, MPFR_RNDN);
        mpfr_add(r35799, r35776, r35798, MPFR_RNDN);
        mpfr_div(r35800, r35790, r35799, MPFR_RNDN);
        mpfr_add(r35801, r35789, r35800, MPFR_RNDN);
        return mpfr_get_d(r35801, MPFR_RNDN);
}

