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