本周文件交换选择

我们最好的用户反馈

数值比较

汪东城他本周的选择是numcmp通过卡洛斯·阿德里安·巴尔加斯·阿奎莱拉

你们中的一些人(很多人?)可能听说过浮点数学问题,甚至可能读过书这个引用.甚至在我们的博客里,我们很多人都写过浮点运算

下面是一个简短的例子来说明这一点。

X = 2 - 1/3 - 1/3 - 1/3
X = 1.0000

但如果我们将结果与理论答案进行比较,就会发现它们是不相等的。

Tf = isequal(x, 1)
Tf = 0

如果我们显示x十六进制格式来检查完整的精度,

格式十六进制x
X = 3ff0000000000001

另一方面,值“1”以十六进制表示

1
Ans = 3ff0000000000000

注意最后一点的区别。

正因为如此,对浮点运算进行直接比较通常不是一个好做法。相反,你可能会这样做。

格式Tf = abs(x - 1) <= eps(1)
Tf = 1

卡洛斯的numcmp允许您在特定公差范围内比较两个值。您可以从一组不同的比较中进行选择,例如'==','~=','<','>'等。还可以选择由正整数指定的公差托尔代表10 ^ (tol)

Tf = numcmp(x,“= =”1 10)1e-10的%公差
Tf = 1

卡洛斯,谢谢你的加入。一个评论。我喜欢它是向量化的,但是你用repmat来匹配输入的大小。你甚至有一张纸条说你“避免使用”bsxfun”。我建议使用bsxfun.它在速度和内存方面效率更高,特别是对于较大的数据。

评论

试一试,让我们知道你的想法在这里或者留下评论对于卡洛斯




发布与MATLAB®R2016a

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。