で満たされた NEON レジスタがありfloat32
ます。メインCPUに戻すことなく、最も近い整数に丸めたいと思います。に変換する NEON 命令はfloat32
単純uint32
に切り捨てられるため、たとえば、 ではなく に39.7
なります。どのように処理されるかについてはあまり気にしません。ゼロから丸めたり、丸めたりして、両方が機能します。39
40
0.5
丸めを実装するために私が見ることができる最良の方法は、
- に変換し
int32
ます (したがって、切り捨てます) - に戻す_
float32
- に 1 を足して
int32
に戻しfloat32
、切り上げる場合に備えて取っておきます - 減算
- と比較し
0.5
ます(私の場合、それらはすべて正になることがわかっているため、絶対値は必要ありません) - 比較結果に基づいて truncated または truncated + 1 を選択します
それは醜く、遅く、複雑に思えます。
よりクリーンで、より速く、よりシンプルで、より健全な方法はありますか?