10
|
stakx - no longer contributing Saravana Kumar · 技术社区 · 14 年前 |
![]() |
1
11
简短回答: 你可以取一个适合你的应用需求的小值。 没有人知道你的应用程序做了哪些计算以及如何计算 你希望你的结果是正确的。由于舍入误差和机器epsilon几乎总是太大,所以您必须选择自己的值。根据您的需要,0.01就足够了,或者0.00000000000001或更小。 问题是, 您真的想/需要对浮点值进行相等性测试吗 ? 也许你应该重新设计你的算法。 |
![]() |
2
5
在过去,当我不得不使用一个epsilon值时,它比机器的epsilon值要大得多。 -6 中大多数(如果不是全部)计算值都需要 我们的特殊应用 . 你选择的epsilon值取决于你的数字的比例。如果你在处理 (10 +10 假设)那么你可能需要一个更大的epsilon值,因为你的有效数字不会延伸到小数部分(如果有的话)。如果你在处理 非常小 (10 -10 您需要做一些实验,执行计算并检查输出值之间的差异。只有当你知道你的潜在答案的范围,你才能决定一个合适的值 . |
![]() |
3
5
可悲的事实是: 浮点比较没有合适的epsilon。 如果不想遇到严重的错误,可以使用另一种方法进行浮点相等性测试。
近似浮点比较是一个非常棘手的领域
有更好的方法,使用相对差异或ULP,但它们有自己的缺点和缺陷。读布鲁斯道森的优秀文章 Comparing Floating Point Numbers, 2012 Edition |
![]() |
4
2
我也有关于什么是正确的程序的问题。不过,我认为应该:
而不是:
原因来自于机器ε的定义。使用python代码:
它给出:
现在可以得出:
然而,尽管dx和eps*x/2之间存在差异,我们还是看到
这类似于: www.ibiblio.org/pub/languages/fortran/ch1-8.html#02 , 但是,如果有人知道更好的程序或如果这里有什么不正确的,请说。 |
![]() |
Fidel90 · 浏览器支持Number.EPSILON? 8 年前 |