|
|
|
@ -1784,12 +1784,28 @@ namespace cryptonote
|
|
|
|
|
return f;
|
|
|
|
|
}
|
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
|
|
|
static double probability(unsigned int blocks, unsigned int expected)
|
|
|
|
|
static double probability1(unsigned int blocks, unsigned int expected)
|
|
|
|
|
{
|
|
|
|
|
// https://www.umass.edu/wsp/resources/poisson/#computing
|
|
|
|
|
return pow(expected, blocks) / (factorial(blocks) * exp(expected));
|
|
|
|
|
}
|
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
|
|
|
static double probability(unsigned int blocks, unsigned int expected)
|
|
|
|
|
{
|
|
|
|
|
double p = 0.0;
|
|
|
|
|
if (blocks <= expected)
|
|
|
|
|
{
|
|
|
|
|
for (unsigned int b = 0; b <= blocks; ++b)
|
|
|
|
|
p += probability1(b, expected);
|
|
|
|
|
}
|
|
|
|
|
else if (blocks > expected)
|
|
|
|
|
{
|
|
|
|
|
for (unsigned int b = blocks; b <= expected * 3 /* close enough */; ++b)
|
|
|
|
|
p += probability1(b, expected);
|
|
|
|
|
}
|
|
|
|
|
return p;
|
|
|
|
|
}
|
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
|
|
|
bool core::check_block_rate()
|
|
|
|
|
{
|
|
|
|
|
if (m_offline || m_target_blockchain_height > get_current_blockchain_height())
|
|
|
|
|