#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 r27749 = NdChar;
        float r27750 = 1;
        float r27751 = Ec;
        float r27752 = Vef;
        float r27753 = r27751 - r27752;
        float r27754 = EDonor;
        float r27755 = r27753 - r27754;
        float r27756 = mu;
        float r27757 = r27755 - r27756;
        float r27758 = -r27757;
        float r27759 = KbT;
        float r27760 = r27758 / r27759;
        float r27761 = exp(r27760);
        float r27762 = r27750 + r27761;
        float r27763 = r27749 / r27762;
        float r27764 = NaChar;
        float r27765 = Ev;
        float r27766 = r27765 + r27752;
        float r27767 = EAccept;
        float r27768 = r27766 + r27767;
        float r27769 = -r27756;
        float r27770 = r27768 + r27769;
        float r27771 = r27770 / r27759;
        float r27772 = exp(r27771);
        float r27773 = r27750 + r27772;
        float r27774 = r27764 / r27773;
        float r27775 = r27763 + r27774;
        return r27775;
}

double f_id(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r27776 = NdChar;
        double r27777 = 1;
        double r27778 = Ec;
        double r27779 = Vef;
        double r27780 = r27778 - r27779;
        double r27781 = EDonor;
        double r27782 = r27780 - r27781;
        double r27783 = mu;
        double r27784 = r27782 - r27783;
        double r27785 = -r27784;
        double r27786 = KbT;
        double r27787 = r27785 / r27786;
        double r27788 = exp(r27787);
        double r27789 = r27777 + r27788;
        double r27790 = r27776 / r27789;
        double r27791 = NaChar;
        double r27792 = Ev;
        double r27793 = r27792 + r27779;
        double r27794 = EAccept;
        double r27795 = r27793 + r27794;
        double r27796 = -r27783;
        double r27797 = r27795 + r27796;
        double r27798 = r27797 / r27786;
        double r27799 = exp(r27798);
        double r27800 = r27777 + r27799;
        double r27801 = r27791 / r27800;
        double r27802 = r27790 + r27801;
        return r27802;
}


double f_of(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r27803 = NdChar;
        float r27804 = 1;
        float r27805 = Ec;
        float r27806 = Vef;
        float r27807 = r27805 - r27806;
        float r27808 = EDonor;
        float r27809 = r27807 - r27808;
        float r27810 = mu;
        float r27811 = r27809 - r27810;
        float r27812 = -r27811;
        float r27813 = KbT;
        float r27814 = r27812 / r27813;
        float r27815 = exp(r27814);
        float r27816 = r27804 + r27815;
        float r27817 = r27803 / r27816;
        float r27818 = NaChar;
        float r27819 = Ev;
        float r27820 = r27819 + r27806;
        float r27821 = EAccept;
        float r27822 = r27820 + r27821;
        float r27823 = -r27810;
        float r27824 = r27822 + r27823;
        float r27825 = r27824 / r27813;
        float r27826 = exp(r27825);
        float r27827 = r27804 + r27826;
        float r27828 = r27818 / r27827;
        float r27829 = r27817 + r27828;
        return r27829;
}

double f_od(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r27830 = NdChar;
        double r27831 = 1;
        double r27832 = Ec;
        double r27833 = Vef;
        double r27834 = r27832 - r27833;
        double r27835 = EDonor;
        double r27836 = r27834 - r27835;
        double r27837 = mu;
        double r27838 = r27836 - r27837;
        double r27839 = -r27838;
        double r27840 = KbT;
        double r27841 = r27839 / r27840;
        double r27842 = exp(r27841);
        double r27843 = r27831 + r27842;
        double r27844 = r27830 / r27843;
        double r27845 = NaChar;
        double r27846 = Ev;
        double r27847 = r27846 + r27833;
        double r27848 = EAccept;
        double r27849 = r27847 + r27848;
        double r27850 = -r27837;
        double r27851 = r27849 + r27850;
        double r27852 = r27851 / r27840;
        double r27853 = exp(r27852);
        double r27854 = r27831 + r27853;
        double r27855 = r27845 / r27854;
        double r27856 = r27844 + r27855;
        return r27856;
}

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 r27857, r27858, r27859, r27860, r27861, r27862, r27863, r27864, r27865, r27866, r27867, r27868, r27869, r27870, r27871, r27872, r27873, r27874, r27875, r27876, r27877, r27878, r27879, r27880, r27881, r27882, r27883;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r27857);
        mpfr_init_set_str(r27858, "1", 10, MPFR_RNDN);
        mpfr_init(r27859);
        mpfr_init(r27860);
        mpfr_init(r27861);
        mpfr_init(r27862);
        mpfr_init(r27863);
        mpfr_init(r27864);
        mpfr_init(r27865);
        mpfr_init(r27866);
        mpfr_init(r27867);
        mpfr_init(r27868);
        mpfr_init(r27869);
        mpfr_init(r27870);
        mpfr_init(r27871);
        mpfr_init(r27872);
        mpfr_init(r27873);
        mpfr_init(r27874);
        mpfr_init(r27875);
        mpfr_init(r27876);
        mpfr_init(r27877);
        mpfr_init(r27878);
        mpfr_init(r27879);
        mpfr_init(r27880);
        mpfr_init(r27881);
        mpfr_init(r27882);
        mpfr_init(r27883);
}

double f_im(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r27857, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r27859, Ec, MPFR_RNDN);
        mpfr_set_d(r27860, Vef, MPFR_RNDN);
        mpfr_sub(r27861, r27859, r27860, MPFR_RNDN);
        mpfr_set_d(r27862, EDonor, MPFR_RNDN);
        mpfr_sub(r27863, r27861, r27862, MPFR_RNDN);
        mpfr_set_d(r27864, mu, MPFR_RNDN);
        mpfr_sub(r27865, r27863, r27864, MPFR_RNDN);
        mpfr_neg(r27866, r27865, MPFR_RNDN);
        mpfr_set_d(r27867, KbT, MPFR_RNDN);
        mpfr_div(r27868, r27866, r27867, MPFR_RNDN);
        mpfr_exp(r27869, r27868, MPFR_RNDN);
        mpfr_add(r27870, r27858, r27869, MPFR_RNDN);
        mpfr_div(r27871, r27857, r27870, MPFR_RNDN);
        mpfr_set_d(r27872, NaChar, MPFR_RNDN);
        mpfr_set_d(r27873, Ev, MPFR_RNDN);
        mpfr_add(r27874, r27873, r27860, MPFR_RNDN);
        mpfr_set_d(r27875, EAccept, MPFR_RNDN);
        mpfr_add(r27876, r27874, r27875, MPFR_RNDN);
        mpfr_neg(r27877, r27864, MPFR_RNDN);
        mpfr_add(r27878, r27876, r27877, MPFR_RNDN);
        mpfr_div(r27879, r27878, r27867, MPFR_RNDN);
        mpfr_exp(r27880, r27879, MPFR_RNDN);
        mpfr_add(r27881, r27858, r27880, MPFR_RNDN);
        mpfr_div(r27882, r27872, r27881, MPFR_RNDN);
        mpfr_add(r27883, r27871, r27882, MPFR_RNDN);
        return mpfr_get_d(r27883, MPFR_RNDN);
}

static mpfr_t r27884, r27885, r27886, r27887, r27888, r27889, r27890, r27891, r27892, r27893, r27894, r27895, r27896, r27897, r27898, r27899, r27900, r27901, r27902, r27903, r27904, r27905, r27906, r27907, r27908, r27909, r27910;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27884);
        mpfr_init_set_str(r27885, "1", 10, MPFR_RNDN);
        mpfr_init(r27886);
        mpfr_init(r27887);
        mpfr_init(r27888);
        mpfr_init(r27889);
        mpfr_init(r27890);
        mpfr_init(r27891);
        mpfr_init(r27892);
        mpfr_init(r27893);
        mpfr_init(r27894);
        mpfr_init(r27895);
        mpfr_init(r27896);
        mpfr_init(r27897);
        mpfr_init(r27898);
        mpfr_init(r27899);
        mpfr_init(r27900);
        mpfr_init(r27901);
        mpfr_init(r27902);
        mpfr_init(r27903);
        mpfr_init(r27904);
        mpfr_init(r27905);
        mpfr_init(r27906);
        mpfr_init(r27907);
        mpfr_init(r27908);
        mpfr_init(r27909);
        mpfr_init(r27910);
}

double f_fm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r27884, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r27886, Ec, MPFR_RNDN);
        mpfr_set_d(r27887, Vef, MPFR_RNDN);
        mpfr_sub(r27888, r27886, r27887, MPFR_RNDN);
        mpfr_set_d(r27889, EDonor, MPFR_RNDN);
        mpfr_sub(r27890, r27888, r27889, MPFR_RNDN);
        mpfr_set_d(r27891, mu, MPFR_RNDN);
        mpfr_sub(r27892, r27890, r27891, MPFR_RNDN);
        mpfr_neg(r27893, r27892, MPFR_RNDN);
        mpfr_set_d(r27894, KbT, MPFR_RNDN);
        mpfr_div(r27895, r27893, r27894, MPFR_RNDN);
        mpfr_exp(r27896, r27895, MPFR_RNDN);
        mpfr_add(r27897, r27885, r27896, MPFR_RNDN);
        mpfr_div(r27898, r27884, r27897, MPFR_RNDN);
        mpfr_set_d(r27899, NaChar, MPFR_RNDN);
        mpfr_set_d(r27900, Ev, MPFR_RNDN);
        mpfr_add(r27901, r27900, r27887, MPFR_RNDN);
        mpfr_set_d(r27902, EAccept, MPFR_RNDN);
        mpfr_add(r27903, r27901, r27902, MPFR_RNDN);
        mpfr_neg(r27904, r27891, MPFR_RNDN);
        mpfr_add(r27905, r27903, r27904, MPFR_RNDN);
        mpfr_div(r27906, r27905, r27894, MPFR_RNDN);
        mpfr_exp(r27907, r27906, MPFR_RNDN);
        mpfr_add(r27908, r27885, r27907, MPFR_RNDN);
        mpfr_div(r27909, r27899, r27908, MPFR_RNDN);
        mpfr_add(r27910, r27898, r27909, MPFR_RNDN);
        return mpfr_get_d(r27910, MPFR_RNDN);
}

static mpfr_t r27911, r27912, r27913, r27914, r27915, r27916, r27917, r27918, r27919, r27920, r27921, r27922, r27923, r27924, r27925, r27926, r27927, r27928, r27929, r27930, r27931, r27932, r27933, r27934, r27935, r27936, r27937;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27911);
        mpfr_init_set_str(r27912, "1", 10, MPFR_RNDN);
        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);
        mpfr_init(r27932);
        mpfr_init(r27933);
        mpfr_init(r27934);
        mpfr_init(r27935);
        mpfr_init(r27936);
        mpfr_init(r27937);
}

double f_dm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r27911, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r27913, Ec, MPFR_RNDN);
        mpfr_set_d(r27914, Vef, MPFR_RNDN);
        mpfr_sub(r27915, r27913, r27914, MPFR_RNDN);
        mpfr_set_d(r27916, EDonor, MPFR_RNDN);
        mpfr_sub(r27917, r27915, r27916, MPFR_RNDN);
        mpfr_set_d(r27918, mu, MPFR_RNDN);
        mpfr_sub(r27919, r27917, r27918, MPFR_RNDN);
        mpfr_neg(r27920, r27919, MPFR_RNDN);
        mpfr_set_d(r27921, KbT, MPFR_RNDN);
        mpfr_div(r27922, r27920, r27921, MPFR_RNDN);
        mpfr_exp(r27923, r27922, MPFR_RNDN);
        mpfr_add(r27924, r27912, r27923, MPFR_RNDN);
        mpfr_div(r27925, r27911, r27924, MPFR_RNDN);
        mpfr_set_d(r27926, NaChar, MPFR_RNDN);
        mpfr_set_d(r27927, Ev, MPFR_RNDN);
        mpfr_add(r27928, r27927, r27914, MPFR_RNDN);
        mpfr_set_d(r27929, EAccept, MPFR_RNDN);
        mpfr_add(r27930, r27928, r27929, MPFR_RNDN);
        mpfr_neg(r27931, r27918, MPFR_RNDN);
        mpfr_add(r27932, r27930, r27931, MPFR_RNDN);
        mpfr_div(r27933, r27932, r27921, MPFR_RNDN);
        mpfr_exp(r27934, r27933, MPFR_RNDN);
        mpfr_add(r27935, r27912, r27934, MPFR_RNDN);
        mpfr_div(r27936, r27926, r27935, MPFR_RNDN);
        mpfr_add(r27937, r27925, r27936, MPFR_RNDN);
        return mpfr_get_d(r27937, MPFR_RNDN);
}

