|
|
1
1
受到Roku答案的启发(在MSVC++10分支上),这似乎不是分支:
以下是由IDA Pro分析的反汇编(在MSVC++10上编译,发布模式): Disassembly http://img248.imageshack.us/img248/6865/floattestbranchmine.png |
|
|
2
4
这个怎么样?
编辑: Mike是正确的,他将引入一个分支,并感谢Pedro证明了这一点。我将&改为&现在GCC(版本4.4.0)生成了无分支代码。 |
|
|
3
1
|
|
|
4
0
就在我头顶上(我确信它可以减少):
为了澄清一点,我将分别计算符号:
这是浮点数学,所以您可能需要修正一些舍入问题,但这会使您走上正确的道路。 |
|
|
5
0
如果你担心过度的分支,看看 Duff's Device . 这应该有助于在一定程度上展开循环。事实上,循环展开是优化器要做的事情,所以用手来做可能是浪费时间。检查总成输出以查明。 如果您对数组中的每个项执行完全相同的操作,simd肯定会提供帮助。请注意,并非所有的硬件都支持SIMD,但一些编译器(如GCC)确实为SIMD提供了内部函数,这将避免您浸入汇编程序中。 如果使用gcc编译ARM代码,可以找到simd内部函数 here |
|
|
6
0
你对有分支和没有分支的循环做基准测试了吗? 至少可以删除分支的一部分,因为mixValue在循环之外。
|
|
|
7
0
看看你的代码,你会发现你总是将
有了一些小技巧和IEEE浮点知识,您就可以摆脱条件:
最后:你的循环
注意:你的积累规模不匹配。这个
|
|
|
8
0
一些编译器(即msc)也需要手动签名检查。 来源:
英特尔11.1:
海湾合作委员会4.5:
|
|
|
Leo · 为什么carg(-0)返回-pi? 1 年前 |
|
Fyodor · 在C中使用sin和cos计算数学表达式不正确? 2 年前 |
|
|
Alexander · 为什么数字的输出不同? 2 年前 |
|
Ronny · 如何防止程序返回“inf”? 2 年前 |
|
|
EMS · 为什么双重打印的值与C中的浮点值相同,而它们的大小不同? 2 年前 |
|
|
Dakolas · 对python十进制库感到困惑 2 年前 |
|
|
RTC222 · 无法获取vrndscalepd的正确舍入模式代码 2 年前 |