【发布时间】:2012-05-26 00:06:02
【问题描述】:
我有一个 NEON 寄存器,里面填满了float32。我想将它们四舍五入到最接近的整数,而不必传输回主 CPU。将float32 转换为uint32 的NEON 指令只是截断,例如39.7 变为 39,而不是 40。我不太关心0.5 的处理方式——从零舍入或舍入到甚至两者都对我有用。
我认为实现舍入的最佳途径是
- 转换为
int32(因此被截断) - 转换返回为
float32 - 将
int32加1,转换回float32,并留出以防我们四舍五入 - 减法
- 与
0.5比较(不需要绝对值,因为我知道在我的情况下它们都是正数) - 根据比较结果选择截断或截断 + 1
这看起来丑陋、缓慢且复杂。
有没有更清洁、更快、更简单、更明智的方法?
【问题讨论】:
标签: floating-point arm rounding neon