文件交换的选择

我们最好的用户提交

比较数值

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

一些(很多)你可能听说过浮点数学问题,甚至可能已经阅读这个引用。即使在我们的博客,我们中的许多人都写过浮点运算

这是一个简短的示例,说明了这一点。

x = 2 - 1/3 - 1/3 - 1/3
x = 1.0000

但是如果我们比较结果的理论回答,我们得到他们不平等。

tf = isequal (x, 1)
tf = 0

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

格式十六进制x
x = 3 ff0000000000001

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

1
ans = 3 ff0000000000000

最后一点注意的区别。

因此,通常这不是一个良好的实践做一个直接比较的浮点运算。相反,你可能会做这样的事情。

格式tf = abs (x - 1) < =每股收益(1)
tf = 1

卡洛斯的numcmp可以让你比较两个值在一个特定的公差。你可以选择从一组不同的比较,如' = = ',' ~ =”、“<”、“>”,等等。你还可以选择宽容,指定一个正整数托尔代表10 ^ (tol)

tf = numcmp (x,“= =”1 10)% 1平台以及公差
tf = 1

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

评论

给这一个尝试,并让我们知道你的想法在这里或者离开评论对于卡洛斯




发表与MATLAB®R2016a

|
  • 打印

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。