forked from OSchip/llvm-project
51b78a3e06
The current implementation of binomial_distribution is not guaranteed to converge for certain extreme configurations of the engine and distribution. This is due to a mistake in the implementation of the algorithm from the given reference paper. The algorithm in the paper is guaranteed to terminate but has redundant statements. The current implementation simplified away the redundancy into a while loop, but it excludes the return condition of the case where a good sample cannot be returned for the particular sample being used from the uniform distribution, which is what causes the infinite loop. This change guarantees termination by recognizing that a good sample cannot be returned and returning 0 after breaking the loop. This is also in contrast to the paper because the return value as specified in the paper violates basic checks in at least a subset of the extreme cases where the current implementation fails to terminate. This default return value of 0 is satisfactory for the extreme case known so far. Since this is only meant to affect extreme cases where the algorithm does not terminate anyways, the behavior is expected to remain exactly the same for all non-extreme cases that have been terminating so far. Fixes https://llvm.org/PR44847 Differential Revision: https://reviews.llvm.org/D74997 |
||
---|---|---|
.. | ||
libcxx | ||
pretty_printers | ||
std | ||
support | ||
CMakeLists.txt | ||
lit.cfg | ||
lit.site.cfg.in | ||
nothing_to_do.pass.cpp |