Jos*_*der 0 floating-point arm rounding neon
我有一个充满NEON的注册表float32.我想将它们四舍五入到最接近的整数,而不必转回主CPU.转换float32为uint32简单截断的NEON指令,例如39.7变为39,而不是40.我不太关心如何0.5处理 - 从零或圆到圆,甚至两个都为我工作.
我能看到实现舍入的最佳途径是
int32(因此截断)float32int32,转换回float32,并留出以防万一我们正在四舍五入0.5(不需要abs值,因为我知道在我的情况下他们都是正面的)这似乎是丑陋,缓慢和复杂的.
有更清洁,更快,更简单,更健全的方式吗?
添加.5并转换为整数.如果您希望结果采用浮点格式,请转换回来.
由于您知道数字都是正数,因此另一个选项是添加0x1p23并减去0x1p23.添加0x1p23的结果至少为0x1p23,因此float结果没有值小于1的位,因此它必须舍入为整数.然后减去0x1p23减去添加的值,只留下舍入的效果.
| 归档时间: |
|
| 查看次数: |
1335 次 |
| 最近记录: |