我有一个 NEON 寄存器,里面填满了float32
. 我想将它们四舍五入到最接近的整数,而不必传输回主 CPU。NEON 指令转换float32
为uint32
简单截断,因此例如39.7
变为39
,而不是40
。我不太关心如何0.5
处理——从零舍入或舍入到甚至两者都对我有用。
我可以看到实现舍入的最佳途径是
- 转换为
int32
(因此截断) - 转换回_
float32
- 将 1 添加到
int32
,转换回float32
,并留出以防我们四舍五入 - 减去
- 比较
0.5
(不需要绝对值,因为我知道在我的情况下它们都是积极的) - 根据比较结果选择 truncated 或 truncated + 1
这看起来丑陋、缓慢和复杂。
有没有更清洁、更快、更简单、更理智的方法?