【发布时间】:2021-08-12 00:32:27
【问题描述】:
所以我有一个表示角度的变量值。我在代码中经常使用这个值进行操作,所以我还需要经常检查它的值是否还在 [-180, +180] 范围内。
目前,我正在使用这段代码:
if (value > 180)
value -= 360;
else if (value < -180)
value += 360;
有没有更快的方法来完成同样的事情?
【问题讨论】:
-
@2b-t 三元运算符应该如何更快做到这一点?!?请介意详细说明?只是代码行更少,并不意味着生成的汇编代码会更快,或者完全不同。
-
@2b-t “你应该如何让它更快?”你不是。试图比现代 c 或 c++ 编译器更聪明以在那里获得更高的性能,通常会惨败:-P
-
如果
value大于 540 或小于 -540,您的代码将不起作用。 180 度有两种表示形式(180 和 -180),否则您可以使用涉及%360的表达式的一些变体(如果您真的希望它在 -180 到 180 的范围内,请进行大量调整)以使其正常工作输入值。 -
您目前的基准测试结果是什么?您想具体优化哪种微架构(假设 x86)?我们是在谈论尺寸优化还是速度优化?
-
@2b-t “现代 C++ 编译器如此出色 bla bla bla”之所以被“抛出很多”的原因是这样的问题:人们认为他们可以以某种方式在他们的代码中撒上神奇的汇编或奇怪的编译器特定的功能使一系列基于比较的
ifs “更快”。同时,他们没有参考框架来比较新的解决方案,他们的代码没有被分析以确保给定的序列实际上是一个瓶颈,或者性能“问题”不存在。
标签: c optimization