#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 r35746 = NdChar;
        float r35747 = 1;
        float r35748 = Ec;
        float r35749 = Vef;
        float r35750 = r35748 - r35749;
        float r35751 = EDonor;
        float r35752 = r35750 - r35751;
        float r35753 = mu;
        float r35754 = r35752 - r35753;
        float r35755 = -r35754;
        float r35756 = KbT;
        float r35757 = r35755 / r35756;
        float r35758 = exp(r35757);
        float r35759 = r35747 + r35758;
        float r35760 = r35746 / r35759;
        float r35761 = NaChar;
        float r35762 = Ev;
        float r35763 = r35762 + r35749;
        float r35764 = EAccept;
        float r35765 = r35763 + r35764;
        float r35766 = -r35753;
        float r35767 = r35765 + r35766;
        float r35768 = r35767 / r35756;
        float r35769 = exp(r35768);
        float r35770 = r35747 + r35769;
        float r35771 = r35761 / r35770;
        float r35772 = r35760 + r35771;
        return r35772;
}

double f_id(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r35773 = NdChar;
        double r35774 = 1;
        double r35775 = Ec;
        double r35776 = Vef;
        double r35777 = r35775 - r35776;
        double r35778 = EDonor;
        double r35779 = r35777 - r35778;
        double r35780 = mu;
        double r35781 = r35779 - r35780;
        double r35782 = -r35781;
        double r35783 = KbT;
        double r35784 = r35782 / r35783;
        double r35785 = exp(r35784);
        double r35786 = r35774 + r35785;
        double r35787 = r35773 / r35786;
        double r35788 = NaChar;
        double r35789 = Ev;
        double r35790 = r35789 + r35776;
        double r35791 = EAccept;
        double r35792 = r35790 + r35791;
        double r35793 = -r35780;
        double r35794 = r35792 + r35793;
        double r35795 = r35794 / r35783;
        double r35796 = exp(r35795);
        double r35797 = r35774 + r35796;
        double r35798 = r35788 / r35797;
        double r35799 = r35787 + r35798;
        return r35799;
}


double f_of(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r35800 = NdChar;
        float r35801 = 1;
        float r35802 = Ec;
        float r35803 = Vef;
        float r35804 = r35802 - r35803;
        float r35805 = EDonor;
        float r35806 = r35804 - r35805;
        float r35807 = mu;
        float r35808 = r35806 - r35807;
        float r35809 = -r35808;
        float r35810 = KbT;
        float r35811 = r35809 / r35810;
        float r35812 = exp(r35811);
        float r35813 = r35801 + r35812;
        float r35814 = r35800 / r35813;
        float r35815 = NaChar;
        float r35816 = Ev;
        float r35817 = r35816 + r35803;
        float r35818 = EAccept;
        float r35819 = r35817 + r35818;
        float r35820 = -r35807;
        float r35821 = r35819 + r35820;
        float r35822 = r35821 / r35810;
        float r35823 = exp(r35822);
        float r35824 = r35801 + r35823;
        float r35825 = r35815 / r35824;
        float r35826 = r35814 + r35825;
        return r35826;
}

double f_od(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r35827 = NdChar;
        double r35828 = 1;
        double r35829 = Ec;
        double r35830 = Vef;
        double r35831 = r35829 - r35830;
        double r35832 = EDonor;
        double r35833 = r35831 - r35832;
        double r35834 = mu;
        double r35835 = r35833 - r35834;
        double r35836 = -r35835;
        double r35837 = KbT;
        double r35838 = r35836 / r35837;
        double r35839 = exp(r35838);
        double r35840 = r35828 + r35839;
        double r35841 = r35827 / r35840;
        double r35842 = NaChar;
        double r35843 = Ev;
        double r35844 = r35843 + r35830;
        double r35845 = EAccept;
        double r35846 = r35844 + r35845;
        double r35847 = -r35834;
        double r35848 = r35846 + r35847;
        double r35849 = r35848 / r35837;
        double r35850 = exp(r35849);
        double r35851 = r35828 + r35850;
        double r35852 = r35842 / r35851;
        double r35853 = r35841 + r35852;
        return r35853;
}

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 r35854, r35855, r35856, r35857, r35858, r35859, r35860, r35861, r35862, r35863, r35864, r35865, r35866, r35867, r35868, r35869, r35870, r35871, r35872, r35873, r35874, r35875, r35876, r35877, r35878, r35879, r35880;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r35854);
        mpfr_init_set_str(r35855, "1", 10, MPFR_RNDN);
        mpfr_init(r35856);
        mpfr_init(r35857);
        mpfr_init(r35858);
        mpfr_init(r35859);
        mpfr_init(r35860);
        mpfr_init(r35861);
        mpfr_init(r35862);
        mpfr_init(r35863);
        mpfr_init(r35864);
        mpfr_init(r35865);
        mpfr_init(r35866);
        mpfr_init(r35867);
        mpfr_init(r35868);
        mpfr_init(r35869);
        mpfr_init(r35870);
        mpfr_init(r35871);
        mpfr_init(r35872);
        mpfr_init(r35873);
        mpfr_init(r35874);
        mpfr_init(r35875);
        mpfr_init(r35876);
        mpfr_init(r35877);
        mpfr_init(r35878);
        mpfr_init(r35879);
        mpfr_init(r35880);
}

double f_im(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r35854, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r35856, Ec, MPFR_RNDN);
        mpfr_set_d(r35857, Vef, MPFR_RNDN);
        mpfr_sub(r35858, r35856, r35857, MPFR_RNDN);
        mpfr_set_d(r35859, EDonor, MPFR_RNDN);
        mpfr_sub(r35860, r35858, r35859, MPFR_RNDN);
        mpfr_set_d(r35861, mu, MPFR_RNDN);
        mpfr_sub(r35862, r35860, r35861, MPFR_RNDN);
        mpfr_neg(r35863, r35862, MPFR_RNDN);
        mpfr_set_d(r35864, KbT, MPFR_RNDN);
        mpfr_div(r35865, r35863, r35864, MPFR_RNDN);
        mpfr_exp(r35866, r35865, MPFR_RNDN);
        mpfr_add(r35867, r35855, r35866, MPFR_RNDN);
        mpfr_div(r35868, r35854, r35867, MPFR_RNDN);
        mpfr_set_d(r35869, NaChar, MPFR_RNDN);
        mpfr_set_d(r35870, Ev, MPFR_RNDN);
        mpfr_add(r35871, r35870, r35857, MPFR_RNDN);
        mpfr_set_d(r35872, EAccept, MPFR_RNDN);
        mpfr_add(r35873, r35871, r35872, MPFR_RNDN);
        mpfr_neg(r35874, r35861, MPFR_RNDN);
        mpfr_add(r35875, r35873, r35874, MPFR_RNDN);
        mpfr_div(r35876, r35875, r35864, MPFR_RNDN);
        mpfr_exp(r35877, r35876, MPFR_RNDN);
        mpfr_add(r35878, r35855, r35877, MPFR_RNDN);
        mpfr_div(r35879, r35869, r35878, MPFR_RNDN);
        mpfr_add(r35880, r35868, r35879, MPFR_RNDN);
        return mpfr_get_d(r35880, MPFR_RNDN);
}

static mpfr_t r35881, r35882, r35883, r35884, r35885, r35886, r35887, r35888, r35889, r35890, r35891, r35892, r35893, r35894, r35895, r35896, r35897, r35898, r35899, r35900, r35901, r35902, r35903, r35904, r35905, r35906, r35907;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r35881);
        mpfr_init_set_str(r35882, "1", 10, MPFR_RNDN);
        mpfr_init(r35883);
        mpfr_init(r35884);
        mpfr_init(r35885);
        mpfr_init(r35886);
        mpfr_init(r35887);
        mpfr_init(r35888);
        mpfr_init(r35889);
        mpfr_init(r35890);
        mpfr_init(r35891);
        mpfr_init(r35892);
        mpfr_init(r35893);
        mpfr_init(r35894);
        mpfr_init(r35895);
        mpfr_init(r35896);
        mpfr_init(r35897);
        mpfr_init(r35898);
        mpfr_init(r35899);
        mpfr_init(r35900);
        mpfr_init(r35901);
        mpfr_init(r35902);
        mpfr_init(r35903);
        mpfr_init(r35904);
        mpfr_init(r35905);
        mpfr_init(r35906);
        mpfr_init(r35907);
}

double f_fm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r35881, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r35883, Ec, MPFR_RNDN);
        mpfr_set_d(r35884, Vef, MPFR_RNDN);
        mpfr_sub(r35885, r35883, r35884, MPFR_RNDN);
        mpfr_set_d(r35886, EDonor, MPFR_RNDN);
        mpfr_sub(r35887, r35885, r35886, MPFR_RNDN);
        mpfr_set_d(r35888, mu, MPFR_RNDN);
        mpfr_sub(r35889, r35887, r35888, MPFR_RNDN);
        mpfr_neg(r35890, r35889, MPFR_RNDN);
        mpfr_set_d(r35891, KbT, MPFR_RNDN);
        mpfr_div(r35892, r35890, r35891, MPFR_RNDN);
        mpfr_exp(r35893, r35892, MPFR_RNDN);
        mpfr_add(r35894, r35882, r35893, MPFR_RNDN);
        mpfr_div(r35895, r35881, r35894, MPFR_RNDN);
        mpfr_set_d(r35896, NaChar, MPFR_RNDN);
        mpfr_set_d(r35897, Ev, MPFR_RNDN);
        mpfr_add(r35898, r35897, r35884, MPFR_RNDN);
        mpfr_set_d(r35899, EAccept, MPFR_RNDN);
        mpfr_add(r35900, r35898, r35899, MPFR_RNDN);
        mpfr_neg(r35901, r35888, MPFR_RNDN);
        mpfr_add(r35902, r35900, r35901, MPFR_RNDN);
        mpfr_div(r35903, r35902, r35891, MPFR_RNDN);
        mpfr_exp(r35904, r35903, MPFR_RNDN);
        mpfr_add(r35905, r35882, r35904, MPFR_RNDN);
        mpfr_div(r35906, r35896, r35905, MPFR_RNDN);
        mpfr_add(r35907, r35895, r35906, MPFR_RNDN);
        return mpfr_get_d(r35907, MPFR_RNDN);
}

static mpfr_t r35908, r35909, r35910, r35911, r35912, r35913, r35914, r35915, r35916, r35917, r35918, r35919, r35920, r35921, r35922, r35923, r35924, r35925, r35926, r35927, r35928, r35929, r35930, r35931, r35932, r35933, r35934;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r35908);
        mpfr_init_set_str(r35909, "1", 10, MPFR_RNDN);
        mpfr_init(r35910);
        mpfr_init(r35911);
        mpfr_init(r35912);
        mpfr_init(r35913);
        mpfr_init(r35914);
        mpfr_init(r35915);
        mpfr_init(r35916);
        mpfr_init(r35917);
        mpfr_init(r35918);
        mpfr_init(r35919);
        mpfr_init(r35920);
        mpfr_init(r35921);
        mpfr_init(r35922);
        mpfr_init(r35923);
        mpfr_init(r35924);
        mpfr_init(r35925);
        mpfr_init(r35926);
        mpfr_init(r35927);
        mpfr_init(r35928);
        mpfr_init(r35929);
        mpfr_init(r35930);
        mpfr_init(r35931);
        mpfr_init(r35932);
        mpfr_init(r35933);
        mpfr_init(r35934);
}

double f_dm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r35908, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r35910, Ec, MPFR_RNDN);
        mpfr_set_d(r35911, Vef, MPFR_RNDN);
        mpfr_sub(r35912, r35910, r35911, MPFR_RNDN);
        mpfr_set_d(r35913, EDonor, MPFR_RNDN);
        mpfr_sub(r35914, r35912, r35913, MPFR_RNDN);
        mpfr_set_d(r35915, mu, MPFR_RNDN);
        mpfr_sub(r35916, r35914, r35915, MPFR_RNDN);
        mpfr_neg(r35917, r35916, MPFR_RNDN);
        mpfr_set_d(r35918, KbT, MPFR_RNDN);
        mpfr_div(r35919, r35917, r35918, MPFR_RNDN);
        mpfr_exp(r35920, r35919, MPFR_RNDN);
        mpfr_add(r35921, r35909, r35920, MPFR_RNDN);
        mpfr_div(r35922, r35908, r35921, MPFR_RNDN);
        mpfr_set_d(r35923, NaChar, MPFR_RNDN);
        mpfr_set_d(r35924, Ev, MPFR_RNDN);
        mpfr_add(r35925, r35924, r35911, MPFR_RNDN);
        mpfr_set_d(r35926, EAccept, MPFR_RNDN);
        mpfr_add(r35927, r35925, r35926, MPFR_RNDN);
        mpfr_neg(r35928, r35915, MPFR_RNDN);
        mpfr_add(r35929, r35927, r35928, MPFR_RNDN);
        mpfr_div(r35930, r35929, r35918, MPFR_RNDN);
        mpfr_exp(r35931, r35930, MPFR_RNDN);
        mpfr_add(r35932, r35909, r35931, MPFR_RNDN);
        mpfr_div(r35933, r35923, r35932, MPFR_RNDN);
        mpfr_add(r35934, r35922, r35933, MPFR_RNDN);
        return mpfr_get_d(r35934, MPFR_RNDN);
}

