|
def binom(x, y):
try:
binom = fac(x) // fac(y) // fac(x - y)
except ValueError:
binom = 0
return binom
###This function takes inputs and outputs the probability
#of success in one trial
#pcalc is short for probability calculation
def pcalc(masternodes,quorumsize,attacksuccess,Byznodes):
SampleSpace = binom(masternodes,quorumsize)
pctemp=0
for x in range(attacksuccess, quorumsize+1):
pctemp = pctemp + binom(Byznodes,x)*binom(masternodes-Byznodes,quorumsize-x)
#at this juncture the answer is pctemp/SampleSpace
#but that will produce an overflow error. We use logarithms to
#calculate this value
return 10 ** (log(pctemp,10)- log(SampleSpace,10))
|