首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++中的比较效率?( abs(X)>1 vs abs(x) != 0)

C++中的比较效率?( abs(X)>1 vs abs(x) != 0)
EN

Stack Overflow用户
提问于 2009-07-09 18:52:50
回答 12查看 2.2K关注 0票数 4

我知道-过早的优化。

但是我的代码应该是用来判断一个位置和一个缓存的位置是否发生了变化。

当前代码为:

代码语言:javascript
运行
复制
if(abs(newpos-oldpos) > 1){
    .....
}

使用下面的代码会更有效吗?

代码语言:javascript
运行
复制
if(abs(newpos-oldpos) != 0){
    ....
}

为什么或者为什么不?我现在正在讨论我的想法,它更具可读性,我想知道是否有我遗漏的性能差异。

EN

回答 12

Stack Overflow用户

发布于 2009-07-09 18:54:47

为什么不是这个呢?

代码语言:javascript
运行
复制
if (newpos != oldpos) {
    ...
}

由于缺少abs(),因此比两者都更高效,而且引导更清晰。

票数 13
EN

Stack Overflow用户

发布于 2009-07-09 18:56:55

不改变的一个主要原因

代码语言:javascript
运行
复制
(abs(newpos-oldpos) > 1)

代码语言:javascript
运行
复制
(abs(newpos-oldpos) != 0)

它们在语义上是不同的。

当使用abs(newpos-oldpos) == 1时,你会得到不同的结果。这是一个例子,说明了为什么你应该“仅仅因为”而不愿意改变事情--除了这样一个事实,即无论如何都不会有可测量的性能差异(也可能也没有实际的差异)。

票数 13
EN

Stack Overflow用户

发布于 2009-07-09 18:56:54

如果去掉不必要的abs(),第二个方法会更有效。如果要与零进行比较,差异是正还是负都无关紧要。此外,我认为它更具可读性。然而,这两个条件似乎并不等价;如果abs(newpos-oldpos) == 1会发生什么?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1105817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档