以下方法获取绝对值的速度是多少
What is the speed for the following methods to get the absolute value?
任务:使用阈值假设1e-8检查x(双精度)是否非常接近零。这让我想到了两个性能问题。
我目前使用的方法:
1:当我不确定数据是否完全正确时保存的方法。
double threshold = 0.00000001;
if ( abs(x) < threshold );
//remove x
2:如果我非常确定数据是完全积极的。
if ( x < threshold )
//remove x
这就引出了我的第一个问题,第二种方法是否比第一种方法快?我只是一直认为第二种方法更快...
我一直在考虑作为方法 1 的替代方案的另一种方法是使用
if ( x < threshold && x > -threshold )
//remove x
这就引出了我的第二个问题,这种方法比方法1更快还是更慢?
如果有疑问,请对其进行分析:如今,编译器在进行优化方面很聪明。如果要更深入地研究,请检查生成的程序集。
但从概念上讲,abs(x)
具有函数调用的开销,该函数调用必须按值返回浮点数double.
一元否定-threshold
相同。当然,&&
的短循环降低了评估-threshold
的可能性。
因此,if ( x < threshold )
肯定不会比其他两个慢。
我本能地会abs
否定,因为最重要的是,这是表达你想做的事情的最清晰的方式。此外,编译器可能能够更容易地优化它,因为它是一个标准函数。在IEEE754中,abs
只不过是设置符号位。
abs
的性能取决于实现和优化级别。我不认为有一个正确的答案哪个更快。
实际上我会一直坚持abs
.正如Bathsheba指出的那样,它可以像一条指令一样快,并且可以清楚地了解您的代码正在做什么。另外,我真的认为这种"优化"没有什么意义。它对几乎任何程序的性能都有微不足道的影响。如果你对这个级别的性能非常认真,你可能应该自己编写汇编代码。
相关文章:
- 复制列表初始化的隐式转换的等级是多少
- while循环中while循环的时间复杂度是多少
- 为什么在读取文件大小时文件IO速度会发生变化
- 如何检查一个c++字符串中有多少相同的字符/数字
- C++有多少类型的循环
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 在条件变量中触发错误信号的频率是多少
- 函数的时间复杂度是多少?
- 必须为 C++20 协程帧保留多少内存?
- 对于四轴飞行器,PID中I控制器的理想值应该是多少
- C++,数组有多少个地址?
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 在 Linux 中存储区域设置名称的缓冲区大小应该是多少?
- 使用额外的变量使计算更容易理解 - (多少)我减慢了代码的速度?
- 以下方法获取绝对值的速度是多少
- 在linux上,通过sendfile()在c++代码中复制的速度是多少
- 在最坏的情况下,多少QPI延迟可以减慢任意应用程序的速度