#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 r27797 = NdChar;
        float r27798 = 1;
        float r27799 = Ec;
        float r27800 = Vef;
        float r27801 = r27799 - r27800;
        float r27802 = EDonor;
        float r27803 = r27801 - r27802;
        float r27804 = mu;
        float r27805 = r27803 - r27804;
        float r27806 = -r27805;
        float r27807 = KbT;
        float r27808 = r27806 / r27807;
        float r27809 = exp(r27808);
        float r27810 = r27798 + r27809;
        float r27811 = r27797 / r27810;
        float r27812 = NaChar;
        float r27813 = Ev;
        float r27814 = r27813 + r27800;
        float r27815 = EAccept;
        float r27816 = r27814 + r27815;
        float r27817 = -r27804;
        float r27818 = r27816 + r27817;
        float r27819 = r27818 / r27807;
        float r27820 = exp(r27819);
        float r27821 = r27798 + r27820;
        float r27822 = r27812 / r27821;
        float r27823 = r27811 + r27822;
        return r27823;
}

double f_id(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r27824 = NdChar;
        double r27825 = 1;
        double r27826 = Ec;
        double r27827 = Vef;
        double r27828 = r27826 - r27827;
        double r27829 = EDonor;
        double r27830 = r27828 - r27829;
        double r27831 = mu;
        double r27832 = r27830 - r27831;
        double r27833 = -r27832;
        double r27834 = KbT;
        double r27835 = r27833 / r27834;
        double r27836 = exp(r27835);
        double r27837 = r27825 + r27836;
        double r27838 = r27824 / r27837;
        double r27839 = NaChar;
        double r27840 = Ev;
        double r27841 = r27840 + r27827;
        double r27842 = EAccept;
        double r27843 = r27841 + r27842;
        double r27844 = -r27831;
        double r27845 = r27843 + r27844;
        double r27846 = r27845 / r27834;
        double r27847 = exp(r27846);
        double r27848 = r27825 + r27847;
        double r27849 = r27839 / r27848;
        double r27850 = r27838 + r27849;
        return r27850;
}


double f_of(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r27851 = NdChar;
        float r27852 = 1;
        float r27853 = Ec;
        float r27854 = Vef;
        float r27855 = r27853 - r27854;
        float r27856 = EDonor;
        float r27857 = r27855 - r27856;
        float r27858 = mu;
        float r27859 = r27857 - r27858;
        float r27860 = -r27859;
        float r27861 = KbT;
        float r27862 = r27860 / r27861;
        float r27863 = exp(r27862);
        float r27864 = r27852 + r27863;
        float r27865 = r27851 / r27864;
        float r27866 = NaChar;
        float r27867 = Ev;
        float r27868 = r27867 + r27854;
        float r27869 = EAccept;
        float r27870 = r27868 + r27869;
        float r27871 = -r27858;
        float r27872 = r27870 + r27871;
        float r27873 = r27872 / r27861;
        float r27874 = exp(r27873);
        float r27875 = r27852 + r27874;
        float r27876 = r27866 / r27875;
        float r27877 = r27865 + r27876;
        return r27877;
}

double f_od(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r27878 = NdChar;
        double r27879 = 1;
        double r27880 = Ec;
        double r27881 = Vef;
        double r27882 = r27880 - r27881;
        double r27883 = EDonor;
        double r27884 = r27882 - r27883;
        double r27885 = mu;
        double r27886 = r27884 - r27885;
        double r27887 = -r27886;
        double r27888 = KbT;
        double r27889 = r27887 / r27888;
        double r27890 = exp(r27889);
        double r27891 = r27879 + r27890;
        double r27892 = r27878 / r27891;
        double r27893 = NaChar;
        double r27894 = Ev;
        double r27895 = r27894 + r27881;
        double r27896 = EAccept;
        double r27897 = r27895 + r27896;
        double r27898 = -r27885;
        double r27899 = r27897 + r27898;
        double r27900 = r27899 / r27888;
        double r27901 = exp(r27900);
        double r27902 = r27879 + r27901;
        double r27903 = r27893 / r27902;
        double r27904 = r27892 + r27903;
        return r27904;
}

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 r27905, r27906, r27907, r27908, r27909, r27910, r27911, r27912, r27913, r27914, r27915, r27916, r27917, r27918, r27919, r27920, r27921, r27922, r27923, r27924, r27925, r27926, r27927, r27928, r27929, r27930, r27931;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r27905);
        mpfr_init_set_str(r27906, "1", 10, MPFR_RNDN);
        mpfr_init(r27907);
        mpfr_init(r27908);
        mpfr_init(r27909);
        mpfr_init(r27910);
        mpfr_init(r27911);
        mpfr_init(r27912);
        mpfr_init(r27913);
        mpfr_init(r27914);
        mpfr_init(r27915);
        mpfr_init(r27916);
        mpfr_init(r27917);
        mpfr_init(r27918);
        mpfr_init(r27919);
        mpfr_init(r27920);
        mpfr_init(r27921);
        mpfr_init(r27922);
        mpfr_init(r27923);
        mpfr_init(r27924);
        mpfr_init(r27925);
        mpfr_init(r27926);
        mpfr_init(r27927);
        mpfr_init(r27928);
        mpfr_init(r27929);
        mpfr_init(r27930);
        mpfr_init(r27931);
}

double f_im(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r27905, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r27907, Ec, MPFR_RNDN);
        mpfr_set_d(r27908, Vef, MPFR_RNDN);
        mpfr_sub(r27909, r27907, r27908, MPFR_RNDN);
        mpfr_set_d(r27910, EDonor, MPFR_RNDN);
        mpfr_sub(r27911, r27909, r27910, MPFR_RNDN);
        mpfr_set_d(r27912, mu, MPFR_RNDN);
        mpfr_sub(r27913, r27911, r27912, MPFR_RNDN);
        mpfr_neg(r27914, r27913, MPFR_RNDN);
        mpfr_set_d(r27915, KbT, MPFR_RNDN);
        mpfr_div(r27916, r27914, r27915, MPFR_RNDN);
        mpfr_exp(r27917, r27916, MPFR_RNDN);
        mpfr_add(r27918, r27906, r27917, MPFR_RNDN);
        mpfr_div(r27919, r27905, r27918, MPFR_RNDN);
        mpfr_set_d(r27920, NaChar, MPFR_RNDN);
        mpfr_set_d(r27921, Ev, MPFR_RNDN);
        mpfr_add(r27922, r27921, r27908, MPFR_RNDN);
        mpfr_set_d(r27923, EAccept, MPFR_RNDN);
        mpfr_add(r27924, r27922, r27923, MPFR_RNDN);
        mpfr_neg(r27925, r27912, MPFR_RNDN);
        mpfr_add(r27926, r27924, r27925, MPFR_RNDN);
        mpfr_div(r27927, r27926, r27915, MPFR_RNDN);
        mpfr_exp(r27928, r27927, MPFR_RNDN);
        mpfr_add(r27929, r27906, r27928, MPFR_RNDN);
        mpfr_div(r27930, r27920, r27929, MPFR_RNDN);
        mpfr_add(r27931, r27919, r27930, MPFR_RNDN);
        return mpfr_get_d(r27931, MPFR_RNDN);
}

static mpfr_t r27932, r27933, r27934, r27935, r27936, r27937, r27938, r27939, r27940, r27941, r27942, r27943, r27944, r27945, r27946, r27947, r27948, r27949, r27950, r27951, r27952, r27953, r27954, r27955, r27956, r27957, r27958;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27932);
        mpfr_init_set_str(r27933, "1", 10, MPFR_RNDN);
        mpfr_init(r27934);
        mpfr_init(r27935);
        mpfr_init(r27936);
        mpfr_init(r27937);
        mpfr_init(r27938);
        mpfr_init(r27939);
        mpfr_init(r27940);
        mpfr_init(r27941);
        mpfr_init(r27942);
        mpfr_init(r27943);
        mpfr_init(r27944);
        mpfr_init(r27945);
        mpfr_init(r27946);
        mpfr_init(r27947);
        mpfr_init(r27948);
        mpfr_init(r27949);
        mpfr_init(r27950);
        mpfr_init(r27951);
        mpfr_init(r27952);
        mpfr_init(r27953);
        mpfr_init(r27954);
        mpfr_init(r27955);
        mpfr_init(r27956);
        mpfr_init(r27957);
        mpfr_init(r27958);
}

double f_fm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r27932, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r27934, Ec, MPFR_RNDN);
        mpfr_set_d(r27935, Vef, MPFR_RNDN);
        mpfr_sub(r27936, r27934, r27935, MPFR_RNDN);
        mpfr_set_d(r27937, EDonor, MPFR_RNDN);
        mpfr_sub(r27938, r27936, r27937, MPFR_RNDN);
        mpfr_set_d(r27939, mu, MPFR_RNDN);
        mpfr_sub(r27940, r27938, r27939, MPFR_RNDN);
        mpfr_neg(r27941, r27940, MPFR_RNDN);
        mpfr_set_d(r27942, KbT, MPFR_RNDN);
        mpfr_div(r27943, r27941, r27942, MPFR_RNDN);
        mpfr_exp(r27944, r27943, MPFR_RNDN);
        mpfr_add(r27945, r27933, r27944, MPFR_RNDN);
        mpfr_div(r27946, r27932, r27945, MPFR_RNDN);
        mpfr_set_d(r27947, NaChar, MPFR_RNDN);
        mpfr_set_d(r27948, Ev, MPFR_RNDN);
        mpfr_add(r27949, r27948, r27935, MPFR_RNDN);
        mpfr_set_d(r27950, EAccept, MPFR_RNDN);
        mpfr_add(r27951, r27949, r27950, MPFR_RNDN);
        mpfr_neg(r27952, r27939, MPFR_RNDN);
        mpfr_add(r27953, r27951, r27952, MPFR_RNDN);
        mpfr_div(r27954, r27953, r27942, MPFR_RNDN);
        mpfr_exp(r27955, r27954, MPFR_RNDN);
        mpfr_add(r27956, r27933, r27955, MPFR_RNDN);
        mpfr_div(r27957, r27947, r27956, MPFR_RNDN);
        mpfr_add(r27958, r27946, r27957, MPFR_RNDN);
        return mpfr_get_d(r27958, MPFR_RNDN);
}

static mpfr_t r27959, r27960, r27961, r27962, r27963, r27964, r27965, r27966, r27967, r27968, r27969, r27970, r27971, r27972, r27973, r27974, r27975, r27976, r27977, r27978, r27979, r27980, r27981, r27982, r27983, r27984, r27985;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27959);
        mpfr_init_set_str(r27960, "1", 10, MPFR_RNDN);
        mpfr_init(r27961);
        mpfr_init(r27962);
        mpfr_init(r27963);
        mpfr_init(r27964);
        mpfr_init(r27965);
        mpfr_init(r27966);
        mpfr_init(r27967);
        mpfr_init(r27968);
        mpfr_init(r27969);
        mpfr_init(r27970);
        mpfr_init(r27971);
        mpfr_init(r27972);
        mpfr_init(r27973);
        mpfr_init(r27974);
        mpfr_init(r27975);
        mpfr_init(r27976);
        mpfr_init(r27977);
        mpfr_init(r27978);
        mpfr_init(r27979);
        mpfr_init(r27980);
        mpfr_init(r27981);
        mpfr_init(r27982);
        mpfr_init(r27983);
        mpfr_init(r27984);
        mpfr_init(r27985);
}

double f_dm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r27959, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r27961, Ec, MPFR_RNDN);
        mpfr_set_d(r27962, Vef, MPFR_RNDN);
        mpfr_sub(r27963, r27961, r27962, MPFR_RNDN);
        mpfr_set_d(r27964, EDonor, MPFR_RNDN);
        mpfr_sub(r27965, r27963, r27964, MPFR_RNDN);
        mpfr_set_d(r27966, mu, MPFR_RNDN);
        mpfr_sub(r27967, r27965, r27966, MPFR_RNDN);
        mpfr_neg(r27968, r27967, MPFR_RNDN);
        mpfr_set_d(r27969, KbT, MPFR_RNDN);
        mpfr_div(r27970, r27968, r27969, MPFR_RNDN);
        mpfr_exp(r27971, r27970, MPFR_RNDN);
        mpfr_add(r27972, r27960, r27971, MPFR_RNDN);
        mpfr_div(r27973, r27959, r27972, MPFR_RNDN);
        mpfr_set_d(r27974, NaChar, MPFR_RNDN);
        mpfr_set_d(r27975, Ev, MPFR_RNDN);
        mpfr_add(r27976, r27975, r27962, MPFR_RNDN);
        mpfr_set_d(r27977, EAccept, MPFR_RNDN);
        mpfr_add(r27978, r27976, r27977, MPFR_RNDN);
        mpfr_neg(r27979, r27966, MPFR_RNDN);
        mpfr_add(r27980, r27978, r27979, MPFR_RNDN);
        mpfr_div(r27981, r27980, r27969, MPFR_RNDN);
        mpfr_exp(r27982, r27981, MPFR_RNDN);
        mpfr_add(r27983, r27960, r27982, MPFR_RNDN);
        mpfr_div(r27984, r27974, r27983, MPFR_RNDN);
        mpfr_add(r27985, r27973, r27984, MPFR_RNDN);
        return mpfr_get_d(r27985, MPFR_RNDN);
}

