数值比较
汪东城他本周的选择是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.它在速度和内存方面效率更高,特别是对于较大的数据。
评论
- 类别:
- 选择
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。