#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 r24816 = NdChar;
        float r24817 = 1;
        float r24818 = Ec;
        float r24819 = Vef;
        float r24820 = r24818 - r24819;
        float r24821 = EDonor;
        float r24822 = r24820 - r24821;
        float r24823 = mu;
        float r24824 = r24822 - r24823;
        float r24825 = -r24824;
        float r24826 = KbT;
        float r24827 = r24825 / r24826;
        float r24828 = exp(r24827);
        float r24829 = r24817 + r24828;
        float r24830 = r24816 / r24829;
        float r24831 = NaChar;
        float r24832 = Ev;
        float r24833 = r24832 + r24819;
        float r24834 = EAccept;
        float r24835 = r24833 + r24834;
        float r24836 = -r24823;
        float r24837 = r24835 + r24836;
        float r24838 = r24837 / r24826;
        float r24839 = exp(r24838);
        float r24840 = r24817 + r24839;
        float r24841 = r24831 / r24840;
        float r24842 = r24830 + r24841;
        return r24842;
}

double f_id(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r24843 = NdChar;
        double r24844 = 1;
        double r24845 = Ec;
        double r24846 = Vef;
        double r24847 = r24845 - r24846;
        double r24848 = EDonor;
        double r24849 = r24847 - r24848;
        double r24850 = mu;
        double r24851 = r24849 - r24850;
        double r24852 = -r24851;
        double r24853 = KbT;
        double r24854 = r24852 / r24853;
        double r24855 = exp(r24854);
        double r24856 = r24844 + r24855;
        double r24857 = r24843 / r24856;
        double r24858 = NaChar;
        double r24859 = Ev;
        double r24860 = r24859 + r24846;
        double r24861 = EAccept;
        double r24862 = r24860 + r24861;
        double r24863 = -r24850;
        double r24864 = r24862 + r24863;
        double r24865 = r24864 / r24853;
        double r24866 = exp(r24865);
        double r24867 = r24844 + r24866;
        double r24868 = r24858 / r24867;
        double r24869 = r24857 + r24868;
        return r24869;
}


double f_of(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r24870 = NdChar;
        float r24871 = 1;
        float r24872 = Ec;
        float r24873 = Vef;
        float r24874 = r24872 - r24873;
        float r24875 = EDonor;
        float r24876 = r24874 - r24875;
        float r24877 = mu;
        float r24878 = r24876 - r24877;
        float r24879 = KbT;
        float r24880 = r24878 / r24879;
        float r24881 = exp(r24880);
        float r24882 = r24871 / r24881;
        float r24883 = r24871 + r24882;
        float r24884 = r24870 / r24883;
        float r24885 = NaChar;
        float r24886 = Ev;
        float r24887 = r24886 + r24873;
        float r24888 = EAccept;
        float r24889 = r24887 + r24888;
        float r24890 = -r24877;
        float r24891 = r24889 + r24890;
        float r24892 = r24891 / r24879;
        float r24893 = exp(r24892);
        float r24894 = r24871 + r24893;
        float r24895 = r24885 / r24894;
        float r24896 = r24884 + r24895;
        return r24896;
}

double f_od(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r24897 = NdChar;
        double r24898 = 1;
        double r24899 = Ec;
        double r24900 = Vef;
        double r24901 = r24899 - r24900;
        double r24902 = EDonor;
        double r24903 = r24901 - r24902;
        double r24904 = mu;
        double r24905 = r24903 - r24904;
        double r24906 = KbT;
        double r24907 = r24905 / r24906;
        double r24908 = exp(r24907);
        double r24909 = r24898 / r24908;
        double r24910 = r24898 + r24909;
        double r24911 = r24897 / r24910;
        double r24912 = NaChar;
        double r24913 = Ev;
        double r24914 = r24913 + r24900;
        double r24915 = EAccept;
        double r24916 = r24914 + r24915;
        double r24917 = -r24904;
        double r24918 = r24916 + r24917;
        double r24919 = r24918 / r24906;
        double r24920 = exp(r24919);
        double r24921 = r24898 + r24920;
        double r24922 = r24912 / r24921;
        double r24923 = r24911 + r24922;
        return r24923;
}

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 r24924, r24925, r24926, r24927, r24928, r24929, r24930, r24931, r24932, r24933, r24934, r24935, r24936, r24937, r24938, r24939, r24940, r24941, r24942, r24943, r24944, r24945, r24946, r24947, r24948, r24949, r24950;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r24924);
        mpfr_init_set_str(r24925, "1", 10, MPFR_RNDN);
        mpfr_init(r24926);
        mpfr_init(r24927);
        mpfr_init(r24928);
        mpfr_init(r24929);
        mpfr_init(r24930);
        mpfr_init(r24931);
        mpfr_init(r24932);
        mpfr_init(r24933);
        mpfr_init(r24934);
        mpfr_init(r24935);
        mpfr_init(r24936);
        mpfr_init(r24937);
        mpfr_init(r24938);
        mpfr_init(r24939);
        mpfr_init(r24940);
        mpfr_init(r24941);
        mpfr_init(r24942);
        mpfr_init(r24943);
        mpfr_init(r24944);
        mpfr_init(r24945);
        mpfr_init(r24946);
        mpfr_init(r24947);
        mpfr_init(r24948);
        mpfr_init(r24949);
        mpfr_init(r24950);
}

double f_im(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r24924, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r24926, Ec, MPFR_RNDN);
        mpfr_set_d(r24927, Vef, MPFR_RNDN);
        mpfr_sub(r24928, r24926, r24927, MPFR_RNDN);
        mpfr_set_d(r24929, EDonor, MPFR_RNDN);
        mpfr_sub(r24930, r24928, r24929, MPFR_RNDN);
        mpfr_set_d(r24931, mu, MPFR_RNDN);
        mpfr_sub(r24932, r24930, r24931, MPFR_RNDN);
        mpfr_neg(r24933, r24932, MPFR_RNDN);
        mpfr_set_d(r24934, KbT, MPFR_RNDN);
        mpfr_div(r24935, r24933, r24934, MPFR_RNDN);
        mpfr_exp(r24936, r24935, MPFR_RNDN);
        mpfr_add(r24937, r24925, r24936, MPFR_RNDN);
        mpfr_div(r24938, r24924, r24937, MPFR_RNDN);
        mpfr_set_d(r24939, NaChar, MPFR_RNDN);
        mpfr_set_d(r24940, Ev, MPFR_RNDN);
        mpfr_add(r24941, r24940, r24927, MPFR_RNDN);
        mpfr_set_d(r24942, EAccept, MPFR_RNDN);
        mpfr_add(r24943, r24941, r24942, MPFR_RNDN);
        mpfr_neg(r24944, r24931, MPFR_RNDN);
        mpfr_add(r24945, r24943, r24944, MPFR_RNDN);
        mpfr_div(r24946, r24945, r24934, MPFR_RNDN);
        mpfr_exp(r24947, r24946, MPFR_RNDN);
        mpfr_add(r24948, r24925, r24947, MPFR_RNDN);
        mpfr_div(r24949, r24939, r24948, MPFR_RNDN);
        mpfr_add(r24950, r24938, r24949, MPFR_RNDN);
        return mpfr_get_d(r24950, MPFR_RNDN);
}

static mpfr_t r24951, r24952, r24953, r24954, r24955, r24956, r24957, r24958, r24959, r24960, r24961, r24962, r24963, r24964, r24965, r24966, r24967, r24968, r24969, r24970, r24971, r24972, r24973, r24974, r24975, r24976, r24977;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r24951);
        mpfr_init_set_str(r24952, "1", 10, MPFR_RNDN);
        mpfr_init(r24953);
        mpfr_init(r24954);
        mpfr_init(r24955);
        mpfr_init(r24956);
        mpfr_init(r24957);
        mpfr_init(r24958);
        mpfr_init(r24959);
        mpfr_init(r24960);
        mpfr_init(r24961);
        mpfr_init(r24962);
        mpfr_init(r24963);
        mpfr_init(r24964);
        mpfr_init(r24965);
        mpfr_init(r24966);
        mpfr_init(r24967);
        mpfr_init(r24968);
        mpfr_init(r24969);
        mpfr_init(r24970);
        mpfr_init(r24971);
        mpfr_init(r24972);
        mpfr_init(r24973);
        mpfr_init(r24974);
        mpfr_init(r24975);
        mpfr_init(r24976);
        mpfr_init(r24977);
}

double f_fm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r24951, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r24953, Ec, MPFR_RNDN);
        mpfr_set_d(r24954, Vef, MPFR_RNDN);
        mpfr_sub(r24955, r24953, r24954, MPFR_RNDN);
        mpfr_set_d(r24956, EDonor, MPFR_RNDN);
        mpfr_sub(r24957, r24955, r24956, MPFR_RNDN);
        mpfr_set_d(r24958, mu, MPFR_RNDN);
        mpfr_sub(r24959, r24957, r24958, MPFR_RNDN);
        mpfr_set_d(r24960, KbT, MPFR_RNDN);
        mpfr_div(r24961, r24959, r24960, MPFR_RNDN);
        mpfr_exp(r24962, r24961, MPFR_RNDN);
        mpfr_div(r24963, r24952, r24962, MPFR_RNDN);
        mpfr_add(r24964, r24952, r24963, MPFR_RNDN);
        mpfr_div(r24965, r24951, r24964, MPFR_RNDN);
        mpfr_set_d(r24966, NaChar, MPFR_RNDN);
        mpfr_set_d(r24967, Ev, MPFR_RNDN);
        mpfr_add(r24968, r24967, r24954, MPFR_RNDN);
        mpfr_set_d(r24969, EAccept, MPFR_RNDN);
        mpfr_add(r24970, r24968, r24969, MPFR_RNDN);
        mpfr_neg(r24971, r24958, MPFR_RNDN);
        mpfr_add(r24972, r24970, r24971, MPFR_RNDN);
        mpfr_div(r24973, r24972, r24960, MPFR_RNDN);
        mpfr_exp(r24974, r24973, MPFR_RNDN);
        mpfr_add(r24975, r24952, r24974, MPFR_RNDN);
        mpfr_div(r24976, r24966, r24975, MPFR_RNDN);
        mpfr_add(r24977, r24965, r24976, MPFR_RNDN);
        return mpfr_get_d(r24977, MPFR_RNDN);
}

static mpfr_t r24978, r24979, r24980, r24981, r24982, r24983, r24984, r24985, r24986, r24987, r24988, r24989, r24990, r24991, r24992, r24993, r24994, r24995, r24996, r24997, r24998, r24999, r25000, r25001, r25002, r25003, r25004;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r24978);
        mpfr_init_set_str(r24979, "1", 10, MPFR_RNDN);
        mpfr_init(r24980);
        mpfr_init(r24981);
        mpfr_init(r24982);
        mpfr_init(r24983);
        mpfr_init(r24984);
        mpfr_init(r24985);
        mpfr_init(r24986);
        mpfr_init(r24987);
        mpfr_init(r24988);
        mpfr_init(r24989);
        mpfr_init(r24990);
        mpfr_init(r24991);
        mpfr_init(r24992);
        mpfr_init(r24993);
        mpfr_init(r24994);
        mpfr_init(r24995);
        mpfr_init(r24996);
        mpfr_init(r24997);
        mpfr_init(r24998);
        mpfr_init(r24999);
        mpfr_init(r25000);
        mpfr_init(r25001);
        mpfr_init(r25002);
        mpfr_init(r25003);
        mpfr_init(r25004);
}

double f_dm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r24978, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r24980, Ec, MPFR_RNDN);
        mpfr_set_d(r24981, Vef, MPFR_RNDN);
        mpfr_sub(r24982, r24980, r24981, MPFR_RNDN);
        mpfr_set_d(r24983, EDonor, MPFR_RNDN);
        mpfr_sub(r24984, r24982, r24983, MPFR_RNDN);
        mpfr_set_d(r24985, mu, MPFR_RNDN);
        mpfr_sub(r24986, r24984, r24985, MPFR_RNDN);
        mpfr_set_d(r24987, KbT, MPFR_RNDN);
        mpfr_div(r24988, r24986, r24987, MPFR_RNDN);
        mpfr_exp(r24989, r24988, MPFR_RNDN);
        mpfr_div(r24990, r24979, r24989, MPFR_RNDN);
        mpfr_add(r24991, r24979, r24990, MPFR_RNDN);
        mpfr_div(r24992, r24978, r24991, MPFR_RNDN);
        mpfr_set_d(r24993, NaChar, MPFR_RNDN);
        mpfr_set_d(r24994, Ev, MPFR_RNDN);
        mpfr_add(r24995, r24994, r24981, MPFR_RNDN);
        mpfr_set_d(r24996, EAccept, MPFR_RNDN);
        mpfr_add(r24997, r24995, r24996, MPFR_RNDN);
        mpfr_neg(r24998, r24985, MPFR_RNDN);
        mpfr_add(r24999, r24997, r24998, MPFR_RNDN);
        mpfr_div(r25000, r24999, r24987, MPFR_RNDN);
        mpfr_exp(r25001, r25000, MPFR_RNDN);
        mpfr_add(r25002, r24979, r25001, MPFR_RNDN);
        mpfr_div(r25003, r24993, r25002, MPFR_RNDN);
        mpfr_add(r25004, r24992, r25003, MPFR_RNDN);
        return mpfr_get_d(r25004, MPFR_RNDN);
}

