【发布时间】:2012-10-31 06:57:08
【问题描述】:
我的问题 - 第 1 部分: 测试浮点数是否为“整数”(在 Matlab 中)的最佳方法是什么?
我目前对第 1 部分的解决方案: 显然,isinteger 已经过时了,因为它测试的是元素的类型,而不是值,所以目前,我这样解决问题:
abs(round(X) - X) <= sqrt(eps(X))
但也许还有更原生的 Matlab 方法?
我的问题 - 第 2 部分: 如果我当前的解决方案确实是最好的方法,那么我想知道是否有推荐的一般公差?从上面可以看出,我使用sqrt(eps(X)),但我真的没有任何好的理由。也许我应该只使用eps(X),或者5 * eps(X)?任何建议都将受到欢迎。
示例: 在 Matlab 中,sqrt(2)^2 == 2 返回 False。但在实践中,我们可能希望该逻辑条件返回 True。使用上述方法可以实现这一点,因为sqrt(2)^2 实际上等于2 + eps(2)(即在sqrt(eps(2)) 的容差范围内。但这是否意味着我应该始终使用eps(X) 作为我的容差,或者有充分的理由要使用更大的容差,例如5 * eps(X),还是sqrt(eps(X))?
更新(2012-10-31): @FakeDIY 指出我的问题部分与 this SO question 重复(抱歉,不知道我在最初的搜索中是如何错过的)。鉴于此,我想强调问题的“公差”部分(该链接未涵盖),即eps(X) 是一个合理的公差,还是我应该使用更大的东西,比如5 * eps(X),如果是这样,为什么?
更新(2012-11-01):感谢大家的回复。我已经 +1 了所有三个答案,因为我觉得它们都对问题的各个方面做出了有意义的贡献。我将答案打勾给 Eric Postpischil,因为该答案确实很好地确定了问题的容忍部分(并且它在此时获得了最多的支持)。
【问题讨论】:
-
因为您可以在 Matlab 中直接使用 Java,所以下面的问题可能会有用:stackoverflow.com/questions/1575052/…
标签: matlab floating-point integer