gpt4 book ai didi

c - C 中更快的不等式

转载 作者:行者123 更新时间:2023-12-04 10:01:04 24 4
gpt4 key购买 nike

假设我们有这些不等式:

if (a*a+b*b>0) {
...
}

if (a*b+c*d>0) {
...
}

显然,它们都需要 2 次乘法才能求值。
问题是,我们真的需要计算 2 个全精度乘积来检查这些表达式是否为正?
是否有任何数学技巧可以让我在不需要评估 2 个产品的情况下编写这些 if 命令?
会更快吗?
或者也许编译器负责让它尽可能快?
我是不是想多了?

编辑:好吧,这很快升级了。我只想指出,我是笼统地说。无论如何,我的任何项目都不需要这样的微优化。另外,是的,我可以省略第一个,因为它太琐碎了。可能第二个更有趣。

最佳答案

你的“我是不是想多了”的问题表明你还没有通过真正分析你的代码发现这是一个真正的瓶颈。所以我会说是的,您只是在尝试进行过早的优化。

但是,如果这真的是您应用程序的主要性能关键部分,那么我现在能想到的唯一改进如下。由于实数的平方永远不可能为负,因此“a 的平方大于零”等价于“a 不为零”。因此,如果您的架构上的比较速度很快(好吧,这是相对的——比乘法快),那么

if (a*a+b*b>0) {
...
}

可以写成

if (a || b) {
...
}

(前提是不出现极端情况。如果变量是有符号整数或代表实数的 float ,那么这应该没问题。但是,如果涉及到一些无符号整数溢出或复数,那么你将必须执行额外的检查,到那时,如果没有真正的分析就很难推断出相对性能。)

对于第二种情况,我没有这么“聪明”的“优化”,但也许其他人可以想出类似的东西 -- 当且仅当绝对必要时. 不然——当性能不重要时,代码可读性比性能更重要。

关于c - C 中更快的不等式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20169014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com