#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 r35668 = NdChar;
        float r35669 = 1;
        float r35670 = Ec;
        float r35671 = Vef;
        float r35672 = r35670 - r35671;
        float r35673 = EDonor;
        float r35674 = r35672 - r35673;
        float r35675 = mu;
        float r35676 = r35674 - r35675;
        float r35677 = -r35676;
        float r35678 = KbT;
        float r35679 = r35677 / r35678;
        float r35680 = exp(r35679);
        float r35681 = r35669 + r35680;
        float r35682 = r35668 / r35681;
        float r35683 = NaChar;
        float r35684 = Ev;
        float r35685 = r35684 + r35671;
        float r35686 = EAccept;
        float r35687 = r35685 + r35686;
        float r35688 = -r35675;
        float r35689 = r35687 + r35688;
        float r35690 = r35689 / r35678;
        float r35691 = exp(r35690);
        float r35692 = r35669 + r35691;
        float r35693 = r35683 / r35692;
        float r35694 = r35682 + r35693;
        return r35694;
}

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


double f_of(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r35722 = NdChar;
        float r35723 = 1;
        float r35724 = Ec;
        float r35725 = Vef;
        float r35726 = r35724 - r35725;
        float r35727 = EDonor;
        float r35728 = r35726 - r35727;
        float r35729 = mu;
        float r35730 = r35728 - r35729;
        float r35731 = -r35730;
        float r35732 = KbT;
        float r35733 = r35731 / r35732;
        float r35734 = exp(r35733);
        float r35735 = r35723 + r35734;
        float r35736 = r35722 / r35735;
        float r35737 = NaChar;
        float r35738 = Ev;
        float r35739 = r35738 + r35725;
        float r35740 = EAccept;
        float r35741 = r35739 + r35740;
        float r35742 = -r35729;
        float r35743 = r35741 + r35742;
        float r35744 = r35743 / r35732;
        float r35745 = exp(r35744);
        float r35746 = r35723 + r35745;
        float r35747 = r35737 / r35746;
        float r35748 = r35736 + r35747;
        return r35748;
}

double f_od(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r35749 = NdChar;
        double r35750 = 1;
        double r35751 = Ec;
        double r35752 = Vef;
        double r35753 = r35751 - r35752;
        double r35754 = EDonor;
        double r35755 = r35753 - r35754;
        double r35756 = mu;
        double r35757 = r35755 - r35756;
        double r35758 = -r35757;
        double r35759 = KbT;
        double r35760 = r35758 / r35759;
        double r35761 = exp(r35760);
        double r35762 = r35750 + r35761;
        double r35763 = r35749 / r35762;
        double r35764 = NaChar;
        double r35765 = Ev;
        double r35766 = r35765 + r35752;
        double r35767 = EAccept;
        double r35768 = r35766 + r35767;
        double r35769 = -r35756;
        double r35770 = r35768 + r35769;
        double r35771 = r35770 / r35759;
        double r35772 = exp(r35771);
        double r35773 = r35750 + r35772;
        double r35774 = r35764 / r35773;
        double r35775 = r35763 + r35774;
        return r35775;
}

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 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, r35802;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r35776);
        mpfr_init_set_str(r35777, "1", 10, MPFR_RNDN);
        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);
        mpfr_init(r35802);
}

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

static mpfr_t r35803, r35804, r35805, r35806, r35807, r35808, r35809, r35810, r35811, r35812, r35813, r35814, r35815, r35816, r35817, r35818, r35819, r35820, r35821, r35822, r35823, r35824, r35825, r35826, r35827, r35828, r35829;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r35803);
        mpfr_init_set_str(r35804, "1", 10, MPFR_RNDN);
        mpfr_init(r35805);
        mpfr_init(r35806);
        mpfr_init(r35807);
        mpfr_init(r35808);
        mpfr_init(r35809);
        mpfr_init(r35810);
        mpfr_init(r35811);
        mpfr_init(r35812);
        mpfr_init(r35813);
        mpfr_init(r35814);
        mpfr_init(r35815);
        mpfr_init(r35816);
        mpfr_init(r35817);
        mpfr_init(r35818);
        mpfr_init(r35819);
        mpfr_init(r35820);
        mpfr_init(r35821);
        mpfr_init(r35822);
        mpfr_init(r35823);
        mpfr_init(r35824);
        mpfr_init(r35825);
        mpfr_init(r35826);
        mpfr_init(r35827);
        mpfr_init(r35828);
        mpfr_init(r35829);
}

double f_fm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r35803, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r35805, Ec, MPFR_RNDN);
        mpfr_set_d(r35806, Vef, MPFR_RNDN);
        mpfr_sub(r35807, r35805, r35806, MPFR_RNDN);
        mpfr_set_d(r35808, EDonor, MPFR_RNDN);
        mpfr_sub(r35809, r35807, r35808, MPFR_RNDN);
        mpfr_set_d(r35810, mu, MPFR_RNDN);
        mpfr_sub(r35811, r35809, r35810, MPFR_RNDN);
        mpfr_neg(r35812, r35811, MPFR_RNDN);
        mpfr_set_d(r35813, KbT, MPFR_RNDN);
        mpfr_div(r35814, r35812, r35813, MPFR_RNDN);
        mpfr_exp(r35815, r35814, MPFR_RNDN);
        mpfr_add(r35816, r35804, r35815, MPFR_RNDN);
        mpfr_div(r35817, r35803, r35816, MPFR_RNDN);
        mpfr_set_d(r35818, NaChar, MPFR_RNDN);
        mpfr_set_d(r35819, Ev, MPFR_RNDN);
        mpfr_add(r35820, r35819, r35806, MPFR_RNDN);
        mpfr_set_d(r35821, EAccept, MPFR_RNDN);
        mpfr_add(r35822, r35820, r35821, MPFR_RNDN);
        mpfr_neg(r35823, r35810, MPFR_RNDN);
        mpfr_add(r35824, r35822, r35823, MPFR_RNDN);
        mpfr_div(r35825, r35824, r35813, MPFR_RNDN);
        mpfr_exp(r35826, r35825, MPFR_RNDN);
        mpfr_add(r35827, r35804, r35826, MPFR_RNDN);
        mpfr_div(r35828, r35818, r35827, MPFR_RNDN);
        mpfr_add(r35829, r35817, r35828, MPFR_RNDN);
        return mpfr_get_d(r35829, MPFR_RNDN);
}

static mpfr_t r35830, r35831, r35832, r35833, r35834, r35835, r35836, r35837, r35838, r35839, r35840, r35841, r35842, r35843, r35844, r35845, r35846, r35847, r35848, r35849, r35850, r35851, r35852, r35853, r35854, r35855, r35856;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r35830);
        mpfr_init_set_str(r35831, "1", 10, MPFR_RNDN);
        mpfr_init(r35832);
        mpfr_init(r35833);
        mpfr_init(r35834);
        mpfr_init(r35835);
        mpfr_init(r35836);
        mpfr_init(r35837);
        mpfr_init(r35838);
        mpfr_init(r35839);
        mpfr_init(r35840);
        mpfr_init(r35841);
        mpfr_init(r35842);
        mpfr_init(r35843);
        mpfr_init(r35844);
        mpfr_init(r35845);
        mpfr_init(r35846);
        mpfr_init(r35847);
        mpfr_init(r35848);
        mpfr_init(r35849);
        mpfr_init(r35850);
        mpfr_init(r35851);
        mpfr_init(r35852);
        mpfr_init(r35853);
        mpfr_init(r35854);
        mpfr_init(r35855);
        mpfr_init(r35856);
}

double f_dm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r35830, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r35832, Ec, MPFR_RNDN);
        mpfr_set_d(r35833, Vef, MPFR_RNDN);
        mpfr_sub(r35834, r35832, r35833, MPFR_RNDN);
        mpfr_set_d(r35835, EDonor, MPFR_RNDN);
        mpfr_sub(r35836, r35834, r35835, MPFR_RNDN);
        mpfr_set_d(r35837, mu, MPFR_RNDN);
        mpfr_sub(r35838, r35836, r35837, MPFR_RNDN);
        mpfr_neg(r35839, r35838, MPFR_RNDN);
        mpfr_set_d(r35840, KbT, MPFR_RNDN);
        mpfr_div(r35841, r35839, r35840, MPFR_RNDN);
        mpfr_exp(r35842, r35841, MPFR_RNDN);
        mpfr_add(r35843, r35831, r35842, MPFR_RNDN);
        mpfr_div(r35844, r35830, r35843, MPFR_RNDN);
        mpfr_set_d(r35845, NaChar, MPFR_RNDN);
        mpfr_set_d(r35846, Ev, MPFR_RNDN);
        mpfr_add(r35847, r35846, r35833, MPFR_RNDN);
        mpfr_set_d(r35848, EAccept, MPFR_RNDN);
        mpfr_add(r35849, r35847, r35848, MPFR_RNDN);
        mpfr_neg(r35850, r35837, MPFR_RNDN);
        mpfr_add(r35851, r35849, r35850, MPFR_RNDN);
        mpfr_div(r35852, r35851, r35840, MPFR_RNDN);
        mpfr_exp(r35853, r35852, MPFR_RNDN);
        mpfr_add(r35854, r35831, r35853, MPFR_RNDN);
        mpfr_div(r35855, r35845, r35854, MPFR_RNDN);
        mpfr_add(r35856, r35844, r35855, MPFR_RNDN);
        return mpfr_get_d(r35856, MPFR_RNDN);
}

