#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 r24964 = NdChar;
        float r24965 = 1;
        float r24966 = Ec;
        float r24967 = Vef;
        float r24968 = r24966 - r24967;
        float r24969 = EDonor;
        float r24970 = r24968 - r24969;
        float r24971 = mu;
        float r24972 = r24970 - r24971;
        float r24973 = -r24972;
        float r24974 = KbT;
        float r24975 = r24973 / r24974;
        float r24976 = exp(r24975);
        float r24977 = r24965 + r24976;
        float r24978 = r24964 / r24977;
        float r24979 = NaChar;
        float r24980 = Ev;
        float r24981 = r24980 + r24967;
        float r24982 = EAccept;
        float r24983 = r24981 + r24982;
        float r24984 = -r24971;
        float r24985 = r24983 + r24984;
        float r24986 = r24985 / r24974;
        float r24987 = exp(r24986);
        float r24988 = r24965 + r24987;
        float r24989 = r24979 / r24988;
        float r24990 = r24978 + r24989;
        return r24990;
}

double f_id(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r24991 = NdChar;
        double r24992 = 1;
        double r24993 = Ec;
        double r24994 = Vef;
        double r24995 = r24993 - r24994;
        double r24996 = EDonor;
        double r24997 = r24995 - r24996;
        double r24998 = mu;
        double r24999 = r24997 - r24998;
        double r25000 = -r24999;
        double r25001 = KbT;
        double r25002 = r25000 / r25001;
        double r25003 = exp(r25002);
        double r25004 = r24992 + r25003;
        double r25005 = r24991 / r25004;
        double r25006 = NaChar;
        double r25007 = Ev;
        double r25008 = r25007 + r24994;
        double r25009 = EAccept;
        double r25010 = r25008 + r25009;
        double r25011 = -r24998;
        double r25012 = r25010 + r25011;
        double r25013 = r25012 / r25001;
        double r25014 = exp(r25013);
        double r25015 = r24992 + r25014;
        double r25016 = r25006 / r25015;
        double r25017 = r25005 + r25016;
        return r25017;
}


double f_of(float NdChar, float Ec, float Vef, float EDonor, float mu, float KbT, float NaChar, float Ev, float EAccept) {
        float r25018 = NdChar;
        float r25019 = 1;
        float r25020 = Ec;
        float r25021 = Vef;
        float r25022 = r25020 - r25021;
        float r25023 = EDonor;
        float r25024 = r25022 - r25023;
        float r25025 = mu;
        float r25026 = r25024 - r25025;
        float r25027 = -r25026;
        float r25028 = KbT;
        float r25029 = r25027 / r25028;
        float r25030 = exp(r25029);
        float r25031 = r25019 + r25030;
        float r25032 = r25018 / r25031;
        float r25033 = NaChar;
        float r25034 = Ev;
        float r25035 = r25034 + r25021;
        float r25036 = EAccept;
        float r25037 = r25035 + r25036;
        float r25038 = -r25025;
        float r25039 = r25037 + r25038;
        float r25040 = r25039 / r25028;
        float r25041 = exp(r25040);
        float r25042 = r25019 + r25041;
        float r25043 = r25033 / r25042;
        float r25044 = r25032 + r25043;
        return r25044;
}

double f_od(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        double r25045 = NdChar;
        double r25046 = 1;
        double r25047 = Ec;
        double r25048 = Vef;
        double r25049 = r25047 - r25048;
        double r25050 = EDonor;
        double r25051 = r25049 - r25050;
        double r25052 = mu;
        double r25053 = r25051 - r25052;
        double r25054 = -r25053;
        double r25055 = KbT;
        double r25056 = r25054 / r25055;
        double r25057 = exp(r25056);
        double r25058 = r25046 + r25057;
        double r25059 = r25045 / r25058;
        double r25060 = NaChar;
        double r25061 = Ev;
        double r25062 = r25061 + r25048;
        double r25063 = EAccept;
        double r25064 = r25062 + r25063;
        double r25065 = -r25052;
        double r25066 = r25064 + r25065;
        double r25067 = r25066 / r25055;
        double r25068 = exp(r25067);
        double r25069 = r25046 + r25068;
        double r25070 = r25060 / r25069;
        double r25071 = r25059 + r25070;
        return r25071;
}

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 r25072, r25073, r25074, r25075, r25076, r25077, r25078, r25079, r25080, r25081, r25082, r25083, r25084, r25085, r25086, r25087, r25088, r25089, r25090, r25091, r25092, r25093, r25094, r25095, r25096, r25097, r25098;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r25072);
        mpfr_init_set_str(r25073, "1", 10, MPFR_RNDN);
        mpfr_init(r25074);
        mpfr_init(r25075);
        mpfr_init(r25076);
        mpfr_init(r25077);
        mpfr_init(r25078);
        mpfr_init(r25079);
        mpfr_init(r25080);
        mpfr_init(r25081);
        mpfr_init(r25082);
        mpfr_init(r25083);
        mpfr_init(r25084);
        mpfr_init(r25085);
        mpfr_init(r25086);
        mpfr_init(r25087);
        mpfr_init(r25088);
        mpfr_init(r25089);
        mpfr_init(r25090);
        mpfr_init(r25091);
        mpfr_init(r25092);
        mpfr_init(r25093);
        mpfr_init(r25094);
        mpfr_init(r25095);
        mpfr_init(r25096);
        mpfr_init(r25097);
        mpfr_init(r25098);
}

double f_im(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r25072, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r25074, Ec, MPFR_RNDN);
        mpfr_set_d(r25075, Vef, MPFR_RNDN);
        mpfr_sub(r25076, r25074, r25075, MPFR_RNDN);
        mpfr_set_d(r25077, EDonor, MPFR_RNDN);
        mpfr_sub(r25078, r25076, r25077, MPFR_RNDN);
        mpfr_set_d(r25079, mu, MPFR_RNDN);
        mpfr_sub(r25080, r25078, r25079, MPFR_RNDN);
        mpfr_neg(r25081, r25080, MPFR_RNDN);
        mpfr_set_d(r25082, KbT, MPFR_RNDN);
        mpfr_div(r25083, r25081, r25082, MPFR_RNDN);
        mpfr_exp(r25084, r25083, MPFR_RNDN);
        mpfr_add(r25085, r25073, r25084, MPFR_RNDN);
        mpfr_div(r25086, r25072, r25085, MPFR_RNDN);
        mpfr_set_d(r25087, NaChar, MPFR_RNDN);
        mpfr_set_d(r25088, Ev, MPFR_RNDN);
        mpfr_add(r25089, r25088, r25075, MPFR_RNDN);
        mpfr_set_d(r25090, EAccept, MPFR_RNDN);
        mpfr_add(r25091, r25089, r25090, MPFR_RNDN);
        mpfr_neg(r25092, r25079, MPFR_RNDN);
        mpfr_add(r25093, r25091, r25092, MPFR_RNDN);
        mpfr_div(r25094, r25093, r25082, MPFR_RNDN);
        mpfr_exp(r25095, r25094, MPFR_RNDN);
        mpfr_add(r25096, r25073, r25095, MPFR_RNDN);
        mpfr_div(r25097, r25087, r25096, MPFR_RNDN);
        mpfr_add(r25098, r25086, r25097, MPFR_RNDN);
        return mpfr_get_d(r25098, MPFR_RNDN);
}

static mpfr_t r25099, r25100, r25101, r25102, r25103, r25104, r25105, r25106, r25107, r25108, r25109, r25110, r25111, r25112, r25113, r25114, r25115, r25116, r25117, r25118, r25119, r25120, r25121, r25122, r25123, r25124, r25125;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r25099);
        mpfr_init_set_str(r25100, "1", 10, MPFR_RNDN);
        mpfr_init(r25101);
        mpfr_init(r25102);
        mpfr_init(r25103);
        mpfr_init(r25104);
        mpfr_init(r25105);
        mpfr_init(r25106);
        mpfr_init(r25107);
        mpfr_init(r25108);
        mpfr_init(r25109);
        mpfr_init(r25110);
        mpfr_init(r25111);
        mpfr_init(r25112);
        mpfr_init(r25113);
        mpfr_init(r25114);
        mpfr_init(r25115);
        mpfr_init(r25116);
        mpfr_init(r25117);
        mpfr_init(r25118);
        mpfr_init(r25119);
        mpfr_init(r25120);
        mpfr_init(r25121);
        mpfr_init(r25122);
        mpfr_init(r25123);
        mpfr_init(r25124);
        mpfr_init(r25125);
}

double f_fm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r25099, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r25101, Ec, MPFR_RNDN);
        mpfr_set_d(r25102, Vef, MPFR_RNDN);
        mpfr_sub(r25103, r25101, r25102, MPFR_RNDN);
        mpfr_set_d(r25104, EDonor, MPFR_RNDN);
        mpfr_sub(r25105, r25103, r25104, MPFR_RNDN);
        mpfr_set_d(r25106, mu, MPFR_RNDN);
        mpfr_sub(r25107, r25105, r25106, MPFR_RNDN);
        mpfr_neg(r25108, r25107, MPFR_RNDN);
        mpfr_set_d(r25109, KbT, MPFR_RNDN);
        mpfr_div(r25110, r25108, r25109, MPFR_RNDN);
        mpfr_exp(r25111, r25110, MPFR_RNDN);
        mpfr_add(r25112, r25100, r25111, MPFR_RNDN);
        mpfr_div(r25113, r25099, r25112, MPFR_RNDN);
        mpfr_set_d(r25114, NaChar, MPFR_RNDN);
        mpfr_set_d(r25115, Ev, MPFR_RNDN);
        mpfr_add(r25116, r25115, r25102, MPFR_RNDN);
        mpfr_set_d(r25117, EAccept, MPFR_RNDN);
        mpfr_add(r25118, r25116, r25117, MPFR_RNDN);
        mpfr_neg(r25119, r25106, MPFR_RNDN);
        mpfr_add(r25120, r25118, r25119, MPFR_RNDN);
        mpfr_div(r25121, r25120, r25109, MPFR_RNDN);
        mpfr_exp(r25122, r25121, MPFR_RNDN);
        mpfr_add(r25123, r25100, r25122, MPFR_RNDN);
        mpfr_div(r25124, r25114, r25123, MPFR_RNDN);
        mpfr_add(r25125, r25113, r25124, MPFR_RNDN);
        return mpfr_get_d(r25125, MPFR_RNDN);
}

static mpfr_t r25126, r25127, r25128, r25129, r25130, r25131, r25132, r25133, r25134, r25135, r25136, r25137, r25138, r25139, r25140, r25141, r25142, r25143, r25144, r25145, r25146, r25147, r25148, r25149, r25150, r25151, r25152;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r25126);
        mpfr_init_set_str(r25127, "1", 10, MPFR_RNDN);
        mpfr_init(r25128);
        mpfr_init(r25129);
        mpfr_init(r25130);
        mpfr_init(r25131);
        mpfr_init(r25132);
        mpfr_init(r25133);
        mpfr_init(r25134);
        mpfr_init(r25135);
        mpfr_init(r25136);
        mpfr_init(r25137);
        mpfr_init(r25138);
        mpfr_init(r25139);
        mpfr_init(r25140);
        mpfr_init(r25141);
        mpfr_init(r25142);
        mpfr_init(r25143);
        mpfr_init(r25144);
        mpfr_init(r25145);
        mpfr_init(r25146);
        mpfr_init(r25147);
        mpfr_init(r25148);
        mpfr_init(r25149);
        mpfr_init(r25150);
        mpfr_init(r25151);
        mpfr_init(r25152);
}

double f_dm(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
        mpfr_set_d(r25126, NdChar, MPFR_RNDN);
        ;
        mpfr_set_d(r25128, Ec, MPFR_RNDN);
        mpfr_set_d(r25129, Vef, MPFR_RNDN);
        mpfr_sub(r25130, r25128, r25129, MPFR_RNDN);
        mpfr_set_d(r25131, EDonor, MPFR_RNDN);
        mpfr_sub(r25132, r25130, r25131, MPFR_RNDN);
        mpfr_set_d(r25133, mu, MPFR_RNDN);
        mpfr_sub(r25134, r25132, r25133, MPFR_RNDN);
        mpfr_neg(r25135, r25134, MPFR_RNDN);
        mpfr_set_d(r25136, KbT, MPFR_RNDN);
        mpfr_div(r25137, r25135, r25136, MPFR_RNDN);
        mpfr_exp(r25138, r25137, MPFR_RNDN);
        mpfr_add(r25139, r25127, r25138, MPFR_RNDN);
        mpfr_div(r25140, r25126, r25139, MPFR_RNDN);
        mpfr_set_d(r25141, NaChar, MPFR_RNDN);
        mpfr_set_d(r25142, Ev, MPFR_RNDN);
        mpfr_add(r25143, r25142, r25129, MPFR_RNDN);
        mpfr_set_d(r25144, EAccept, MPFR_RNDN);
        mpfr_add(r25145, r25143, r25144, MPFR_RNDN);
        mpfr_neg(r25146, r25133, MPFR_RNDN);
        mpfr_add(r25147, r25145, r25146, MPFR_RNDN);
        mpfr_div(r25148, r25147, r25136, MPFR_RNDN);
        mpfr_exp(r25149, r25148, MPFR_RNDN);
        mpfr_add(r25150, r25127, r25149, MPFR_RNDN);
        mpfr_div(r25151, r25141, r25150, MPFR_RNDN);
        mpfr_add(r25152, r25140, r25151, MPFR_RNDN);
        return mpfr_get_d(r25152, MPFR_RNDN);
}

