我目前正在收紧浮点数字以估计值。(这是:p(k,t)
对于那些感兴趣的人。)本质上,实用程序永远不会低估这个值:可能的素数生成的安全性取决于数值稳健的实现。虽然输出结果与公布的值一致,但我使用该DBL_EPSILON
值来确保特别是除法产生的结果永远不会小于真实值:
考虑:double x, y; /* assigned some values... */
评估:r = x / y;
经常发生,但这些(有限精度)结果可能会从真实结果中截断有效数字 - 可能是无限精度的理性扩展。我目前尝试通过对分子施加偏差来缓解这种情况,即
r = ((1.0 + DBL_EPSILON) * x) / y;
如果您对这个主题有所了解,p(k,t)
通常比大多数估计要小得多 - 但它根本不足以解决这个“观察”的问题。我当然可以说:
(((1.0 + DBL_EPSILON) * x) / y) >= (x / y)
当然,我需要确保“有偏差”的结果大于或等于“精确”值。虽然我确信它与操纵或缩放DBL_EPSILON
有关,但我显然希望“有偏差”的结果超过“精确”结果的最小值——这在IEEE-754算术假设下是可以证明的。
是的,我查看了 Goldberg 的论文,并寻找了一个可靠的解决方案。请不要建议操纵舍入模式。理想情况下,我正在寻求对浮点定理非常了解的人的回答,或者知道一个很好的例子。
编辑:澄清(((1.0 + DBL_EPSILON) * x) / y)
或表格(((1.0 + c) * x) / y)
不是先决条件。这只是我使用的一种“可能足够好”的方法,但没有为它提供坚实的基础。我可以说分子和分母不会是特殊值:NaN、Infs 等,分母也不会是零。