Achieving better than the theoretical False Positive Rate for Bloom Filters I implemented a standard Bloom Filter in C++, and tested it on different sizes, with varying values of the ratio ${c = n/m}$ where ${n}$ is the size of the filter, and ${m}$ is the number of elements inserted. 

For a Bloom Filter, I created ${k}$ Hash functions, and set the value in the filter for each Hash Index returned. Here's a graph of the results I obtained from my tests:



The problem from the graph is clear, I am getting False Positive rates that are better than the Theoretical value. The theoretical value is based on the assumption that each Hash Index is equally likely, which is:

$
Pr(H(a) = 1)^k = 1 - Pr(H(a) = 0)\\
               = (1 - (1 - 1/n)^{km})^{k}\\
               = (1 - e^{-k/c})^{k}
$

Using $k = c \ln(2)$

$
Pr(H(a) = 1)^{k} = (1 - e^{-\ln(2)})^{k}\\
                 = (1/2)^{c \ln(2)}\\
                 = 0.6185^{c}
$

All my tests are based on the optimal value of $k = c \ln(2)$, and the theoretical line is a plot of $0.6185^{c}$. My concern is that my False Positive rates are consistently better than the theoretical. Does this mean that my implementation is incorrect, or is it a likely possibility given the large sizes of the Bloom Filters and the efficiency of the hashing algorithm? 

I appreciate any guidance on this.
Your question includes the equation

$$
(1 - (1 - 1/n)^{km})^{k} = (1 - e^{-k/c})^{k}
$$

But that is not actually an equation; it is only an approximation.