#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 r35877 = NdChar;
        float r35878 = 1;
        float r35879 = Ec;
        float r35880 = Vef;
        float r35881 = r35879 - r35880;
        float r35882 = EDonor;
        float r35883 = r35881 - r35882;
        float r35884 = mu;
        float r35885 = r35883 - r35884;
        float r35886 = -r35885;
        float r35887 = KbT;
        float r35888 = r35886 / r35887;
        float r35889 = exp(r35888);
        float r35890 = r35878 + r35889;
        float r35891 = r35877 / r35890;
        float r35892 = NaChar;
        float r35893 = Ev;
        float r35894 = r35893 + r35880;
        float r35895 = EAccept;
        float r35896 = r35894 + r35895;
        float r35897 = -r35884;
        float r35898 = r35896 + r35897;
        float r35899 = r35898 / r35887;
        float r35900 = exp(r35899);
        float r35901 = r35878 + r35900;
        float r35902 = r35892 / r35901;
        float r35903 = r35891 + r35902;
        return r35903;
}

double f_id(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r35904 = NdChar;
        double r35905 = 1;
        double r35906 = Ec;
        double r35907 = Vef;
        double r35908 = r35906 - r35907;
        double r35909 = EDonor;
        double r35910 = r35908 - r35909;
        double r35911 = mu;
        double r35912 = r35910 - r35911;
        double r35913 = -r35912;
        double r35914 = KbT;
        double r35915 = r35913 / r35914;
        double r35916 = exp(r35915);
        double r35917 = r35905 + r35916;
        double r35918 = r35904 / r35917;
        double r35919 = NaChar;
        double r35920 = Ev;
        double r35921 = r35920 + r35907;
        double r35922 = EAccept;
        double r35923 = r35921 + r35922;
        double r35924 = -r35911;
        double r35925 = r35923 + r35924;
        double r35926 = r35925 / r35914;
        double r35927 = exp(r35926);
        double r35928 = r35905 + r35927;
        double r35929 = r35919 / r35928;
        double r35930 = r35918 + r35929;
        return r35930;
}


double f_of(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r35931 = NdChar;
        float r35932 = 1;
        float r35933 = Ec;
        float r35934 = Vef;
        float r35935 = r35933 - r35934;
        float r35936 = EDonor;
        float r35937 = r35935 - r35936;
        float r35938 = mu;
        float r35939 = r35937 - r35938;
        float r35940 = -r35939;
        float r35941 = KbT;
        float r35942 = r35940 / r35941;
        float r35943 = exp(r35942);
        float r35944 = r35932 + r35943;
        float r35945 = r35931 / r35944;
        float r35946 = NaChar;
        float r35947 = Ev;
        float r35948 = r35947 + r35934;
        float r35949 = EAccept;
        float r35950 = r35948 + r35949;
        float r35951 = -r35938;
        float r35952 = r35950 + r35951;
        float r35953 = r35952 / r35941;
        float r35954 = exp(r35953);
        float r35955 = r35932 + r35954;
        float r35956 = r35946 / r35955;
        float r35957 = r35945 + r35956;
        return r35957;
}

double f_od(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r35958 = NdChar;
        double r35959 = 1;
        double r35960 = Ec;
        double r35961 = Vef;
        double r35962 = r35960 - r35961;
        double r35963 = EDonor;
        double r35964 = r35962 - r35963;
        double r35965 = mu;
        double r35966 = r35964 - r35965;
        double r35967 = -r35966;
        double r35968 = KbT;
        double r35969 = r35967 / r35968;
        double r35970 = exp(r35969);
        double r35971 = r35959 + r35970;
        double r35972 = r35958 / r35971;
        double r35973 = NaChar;
        double r35974 = Ev;
        double r35975 = r35974 + r35961;
        double r35976 = EAccept;
        double r35977 = r35975 + r35976;
        double r35978 = -r35965;
        double r35979 = r35977 + r35978;
        double r35980 = r35979 / r35968;
        double r35981 = exp(r35980);
        double r35982 = r35959 + r35981;
        double r35983 = r35973 / r35982;
        double r35984 = r35972 + r35983;
        return r35984;
}

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 r35985, r35986, r35987, r35988, r35989, r35990, r35991, r35992, r35993, r35994, r35995, r35996, r35997, r35998, r35999, r36000, r36001, r36002, r36003, r36004, r36005, r36006, r36007, r36008, r36009, r36010, r36011;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r35985);
        mpfr_init_set_str(r35986, "1", 10, MPFR_RNDN);
        mpfr_init(r35987);
        mpfr_init(r35988);
        mpfr_init(r35989);
        mpfr_init(r35990);
        mpfr_init(r35991);
        mpfr_init(r35992);
        mpfr_init(r35993);
        mpfr_init(r35994);
        mpfr_init(r35995);
        mpfr_init(r35996);
        mpfr_init(r35997);
        mpfr_init(r35998);
        mpfr_init(r35999);
        mpfr_init(r36000);
        mpfr_init(r36001);
        mpfr_init(r36002);
        mpfr_init(r36003);
        mpfr_init(r36004);
        mpfr_init(r36005);
        mpfr_init(r36006);
        mpfr_init(r36007);
        mpfr_init(r36008);
        mpfr_init(r36009);
        mpfr_init(r36010);
        mpfr_init(r36011);
}

double f_im(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r35985, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r35987, Ec, MPFR_RNDN);
        mpfr_set_d(r35988, Vef, MPFR_RNDN);
        mpfr_sub(r35989, r35987, r35988, MPFR_RNDN);
        mpfr_set_d(r35990, EDonor, MPFR_RNDN);
        mpfr_sub(r35991, r35989, r35990, MPFR_RNDN);
        mpfr_set_d(r35992, mu, MPFR_RNDN);
        mpfr_sub(r35993, r35991, r35992, MPFR_RNDN);
        mpfr_neg(r35994, r35993, MPFR_RNDN);
        mpfr_set_d(r35995, KbT, MPFR_RNDN);
        mpfr_div(r35996, r35994, r35995, MPFR_RNDN);
        mpfr_exp(r35997, r35996, MPFR_RNDN);
        mpfr_add(r35998, r35986, r35997, MPFR_RNDN);
        mpfr_div(r35999, r35985, r35998, MPFR_RNDN);
        mpfr_set_d(r36000, NaChar, MPFR_RNDN);
        mpfr_set_d(r36001, Ev, MPFR_RNDN);
        mpfr_add(r36002, r36001, r35988, MPFR_RNDN);
        mpfr_set_d(r36003, EAccept, MPFR_RNDN);
        mpfr_add(r36004, r36002, r36003, MPFR_RNDN);
        mpfr_neg(r36005, r35992, MPFR_RNDN);
        mpfr_add(r36006, r36004, r36005, MPFR_RNDN);
        mpfr_div(r36007, r36006, r35995, MPFR_RNDN);
        mpfr_exp(r36008, r36007, MPFR_RNDN);
        mpfr_add(r36009, r35986, r36008, MPFR_RNDN);
        mpfr_div(r36010, r36000, r36009, MPFR_RNDN);
        mpfr_add(r36011, r35999, r36010, MPFR_RNDN);
        return mpfr_get_d(r36011, MPFR_RNDN);
}

static mpfr_t r36012, r36013, r36014, r36015, r36016, r36017, r36018, r36019, r36020, r36021, r36022, r36023, r36024, r36025, r36026, r36027, r36028, r36029, r36030, r36031, r36032, r36033, r36034, r36035, r36036, r36037, r36038;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r36012);
        mpfr_init_set_str(r36013, "1", 10, MPFR_RNDN);
        mpfr_init(r36014);
        mpfr_init(r36015);
        mpfr_init(r36016);
        mpfr_init(r36017);
        mpfr_init(r36018);
        mpfr_init(r36019);
        mpfr_init(r36020);
        mpfr_init(r36021);
        mpfr_init(r36022);
        mpfr_init(r36023);
        mpfr_init(r36024);
        mpfr_init(r36025);
        mpfr_init(r36026);
        mpfr_init(r36027);
        mpfr_init(r36028);
        mpfr_init(r36029);
        mpfr_init(r36030);
        mpfr_init(r36031);
        mpfr_init(r36032);
        mpfr_init(r36033);
        mpfr_init(r36034);
        mpfr_init(r36035);
        mpfr_init(r36036);
        mpfr_init(r36037);
        mpfr_init(r36038);
}

double f_fm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r36012, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r36014, Ec, MPFR_RNDN);
        mpfr_set_d(r36015, Vef, MPFR_RNDN);
        mpfr_sub(r36016, r36014, r36015, MPFR_RNDN);
        mpfr_set_d(r36017, EDonor, MPFR_RNDN);
        mpfr_sub(r36018, r36016, r36017, MPFR_RNDN);
        mpfr_set_d(r36019, mu, MPFR_RNDN);
        mpfr_sub(r36020, r36018, r36019, MPFR_RNDN);
        mpfr_neg(r36021, r36020, MPFR_RNDN);
        mpfr_set_d(r36022, KbT, MPFR_RNDN);
        mpfr_div(r36023, r36021, r36022, MPFR_RNDN);
        mpfr_exp(r36024, r36023, MPFR_RNDN);
        mpfr_add(r36025, r36013, r36024, MPFR_RNDN);
        mpfr_div(r36026, r36012, r36025, MPFR_RNDN);
        mpfr_set_d(r36027, NaChar, MPFR_RNDN);
        mpfr_set_d(r36028, Ev, MPFR_RNDN);
        mpfr_add(r36029, r36028, r36015, MPFR_RNDN);
        mpfr_set_d(r36030, EAccept, MPFR_RNDN);
        mpfr_add(r36031, r36029, r36030, MPFR_RNDN);
        mpfr_neg(r36032, r36019, MPFR_RNDN);
        mpfr_add(r36033, r36031, r36032, MPFR_RNDN);
        mpfr_div(r36034, r36033, r36022, MPFR_RNDN);
        mpfr_exp(r36035, r36034, MPFR_RNDN);
        mpfr_add(r36036, r36013, r36035, MPFR_RNDN);
        mpfr_div(r36037, r36027, r36036, MPFR_RNDN);
        mpfr_add(r36038, r36026, r36037, MPFR_RNDN);
        return mpfr_get_d(r36038, MPFR_RNDN);
}

static mpfr_t r36039, r36040, r36041, r36042, r36043, r36044, r36045, r36046, r36047, r36048, r36049, r36050, r36051, r36052, r36053, r36054, r36055, r36056, r36057, r36058, r36059, r36060, r36061, r36062, r36063, r36064, r36065;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r36039);
        mpfr_init_set_str(r36040, "1", 10, MPFR_RNDN);
        mpfr_init(r36041);
        mpfr_init(r36042);
        mpfr_init(r36043);
        mpfr_init(r36044);
        mpfr_init(r36045);
        mpfr_init(r36046);
        mpfr_init(r36047);
        mpfr_init(r36048);
        mpfr_init(r36049);
        mpfr_init(r36050);
        mpfr_init(r36051);
        mpfr_init(r36052);
        mpfr_init(r36053);
        mpfr_init(r36054);
        mpfr_init(r36055);
        mpfr_init(r36056);
        mpfr_init(r36057);
        mpfr_init(r36058);
        mpfr_init(r36059);
        mpfr_init(r36060);
        mpfr_init(r36061);
        mpfr_init(r36062);
        mpfr_init(r36063);
        mpfr_init(r36064);
        mpfr_init(r36065);
}

double f_dm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r36039, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r36041, Ec, MPFR_RNDN);
        mpfr_set_d(r36042, Vef, MPFR_RNDN);
        mpfr_sub(r36043, r36041, r36042, MPFR_RNDN);
        mpfr_set_d(r36044, EDonor, MPFR_RNDN);
        mpfr_sub(r36045, r36043, r36044, MPFR_RNDN);
        mpfr_set_d(r36046, mu, MPFR_RNDN);
        mpfr_sub(r36047, r36045, r36046, MPFR_RNDN);
        mpfr_neg(r36048, r36047, MPFR_RNDN);
        mpfr_set_d(r36049, KbT, MPFR_RNDN);
        mpfr_div(r36050, r36048, r36049, MPFR_RNDN);
        mpfr_exp(r36051, r36050, MPFR_RNDN);
        mpfr_add(r36052, r36040, r36051, MPFR_RNDN);
        mpfr_div(r36053, r36039, r36052, MPFR_RNDN);
        mpfr_set_d(r36054, NaChar, MPFR_RNDN);
        mpfr_set_d(r36055, Ev, MPFR_RNDN);
        mpfr_add(r36056, r36055, r36042, MPFR_RNDN);
        mpfr_set_d(r36057, EAccept, MPFR_RNDN);
        mpfr_add(r36058, r36056, r36057, MPFR_RNDN);
        mpfr_neg(r36059, r36046, MPFR_RNDN);
        mpfr_add(r36060, r36058, r36059, MPFR_RNDN);
        mpfr_div(r36061, r36060, r36049, MPFR_RNDN);
        mpfr_exp(r36062, r36061, MPFR_RNDN);
        mpfr_add(r36063, r36040, r36062, MPFR_RNDN);
        mpfr_div(r36064, r36054, r36063, MPFR_RNDN);
        mpfr_add(r36065, r36053, r36064, MPFR_RNDN);
        return mpfr_get_d(r36065, MPFR_RNDN);
}

